C# 根据模板导出Excel

复制代码
/// <summary>
/// 导出Excel(使用模板)
/// </summary>
/// <returns></returns>
[HttpGet]
public IActionResult ExportExcelByTemplate()
{
    try
    {
        IWorkbook wb = null;
        var template = Directory.GetCurrentDirectory() + @"\wwwroot\Template\template.xlsx";
        // 按模板内容创建 IWorkbook
        using(FileStream fs = new FileStream(template, FileMode.OpenOrCreate))
        {
            wb = new XSSFWorkbook(fs);
        }

        var list = db.Stu.Where(s => s.IsOk).ToList();

        ISheet sheet = wb.GetSheetAt(0);
        int i = 1;
        IRow row = null;
        foreach (var item in list)
        {
            row = sheet.CreateRow(i);
            row.CreateCell(0).SetCellValue(item.StuName);
            row.CreateCell(1).SetCellValue(item.Sex == 0 ? "" : "");
            row.CreateCell(2).SetCellValue(double.Parse(item.Phone));
            row.CreateCell(3).SetCellValue(item.CId);

            // 日期格式的导出
            ICell cell = row.CreateCell(4);
            ICellStyle style = wb.CreateCellStyle();
            IDataFormat format = wb.CreateDataFormat();
            style.DataFormat = format.GetFormat("yyyy-MM-dd");
            cell.CellStyle = style;
            cell.SetCellValue(DateTime.Parse(item.InDate.ToString("yyyy-MM-dd")));

            row.CreateCell(5).SetCellValue((double)item.JF);
            row.CreateCell(6).SetCellValue(item.Pic);
            row.CreateCell(7).SetCellValue(item.State);
            i++;
        }

        byte[] buffer = null;
        using (MemoryStream ms = new MemoryStream())
        {
            wb.Write(ms);
            buffer = ms.ToArray();
        }
         // .xlsx文件对应的Mime信息
         var mime = new FileExtensionContentTypeProvider().Mappings[".xlsx"];
        return File(buffer, mime, "学生信息.xlsx");

    }
    catch (Exception)
    {
        throw;
    }
}
复制代码

网址

posted @   lixia64  阅读(218)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示