前言
许多业务场景下需要处理和分析大量的数据,而 Excel 是广泛使用的文件格式,几乎所有人都能打开和查看 Excel 文件,因此将数据库中的原始数据处理后,导出到 Excel 是一个很常见的功能,对于数据管理、分析、备份、展示以及与外部系统集成等方面都具有重要的作用。
之前分享了如何使用 Magicodes.IE.Excel 上传和读取 Excel的方案(请参考前文《分享一个 ASP.NET Web Api 上传和读取 Excel 的方案》),今天继续分享如何使用 Magicodes.IE.Excel 导出 Excel 到模板的方案。
Step By Step 步骤
-
创建一个 .NET Console 项目
-
安装以下 Nuget 包
Magicodes.IE.Excel
-
新建一个 ExcelUtil.cs,写导出到 Excel 到模板的方法,留意注释
using Magicodes.ExporterAndImporter.Core.Models; using Magicodes.ExporterAndImporter.Core; using Magicodes.ExporterAndImporter.Excel; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace MRHelper.Utils {public static class ExcelUtil{/// <summary>/// 根据模板导出到excel/// </summary>/// <typeparam name="T"></typeparam>/// <param name="templateModel">要导出的数据</param>/// <param name="savePath">保存目录</param>/// <param name="fileName">保存文件名称</param>/// <param name="templatePath">Excel 模板</param>/// <returns></returns>public static async Task<string> ExportExcelByTemplate<T>(T templateModel, string savePath, string fileName, string templatePath) where T : class, new(){IExportFileByTemplate exporter = new ExcelExporter();// 如果保存目录不存在,则新建if (!Directory.Exists(savePath)){Directory.CreateDirectory(savePath);}// 如果要导出的文件名已经存在,先删除var filePath = savePath + fileName;if (File.Exists(filePath)) File.Delete(filePath);// 导出数据await exporter.ExportByTemplate(filePath, templateModel, templatePath);return filePath;}} }
-
写一个数据实体类
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace MRHelper.Entity {/// <summary>/// 数据实体/// </summary>public class ZqReportEntity{/// <summary>/// 类型/// </summary>public string ChannelType { get; set; }/// <summary>/// 编码/// </summary>public string ChannelCode { get; set; }/// <summary>/// 账户/// </summary>public string AccountNature { get; set; }/// <summary>/// 金额/// </summary>public decimal Cash { get; set; }/// <summary>/// 冻结原因/// </summary>public string FreezeReason { get; set; }} }
-
新建一个 Excel 导出 DTO 类,留意注释
using MRHelper.Entity; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace MRHelper.ExcelExportDTO {// 可以在这个 Dto 类中,对数据作进一步处理,比如添加报表制作人等等属性public class ZqReportExportDto{// 说明:// 1. 是 public 类型// 2. 用在 Excel 模板中public List<ZqReportEntity> ExportDtoList { get; set; }public ZqReportExportDto(){}public ZqReportExportDto(List<ZqReportEntity> dataDetails){ExportDtoList = dataDetails;}} }
-
新建一个 Excel 文件,命名为 ZqReportTemplate.xlsx,编写 Excel 模板,如图:
[图片]
-
将上一步创建的 Excel 模板放到项目中,并在属性中设置复制到输出目录为 “如果较新则复制”,如图:
[图片]
-
编写导出数据的方法
using MRHelper.Entity; using MRHelper.ExcelExportDTO; using MRHelper.Utils;namespace MRHelper {class Program{static void Main(string[] args){// 1. 获取要导出的数据// 可以直接手动添加模拟数据,或者从数据库中获取var excelDataList = ......// 2. 导出var exportDto = new ZqReportExportDto(excelDataList);string savePath = @"d:\zqexport\";string fileName =@"test.xlsx";string templatePath = @"ExcelTemplate/ZqReportTemplate.xlsx";string fileUrl = ExcelUtil.ExportExcelByTemplate(exportDto, savePath, fileName, templatePath).Result;// 3. 打印出生成的 Excel 文件Console.WriteLine(fileUrl);}} }
总结
- Magicodes.IE.Excel 导出数据到 Excel 的性能非常高,10 几个字段,20000 多条数据,导出用时不到 7 秒。
- 代码简单,导出的核心代码只有 2 行
- 采用模板的方式,可以预先设置 Excel 的行高、标题、字体等样式,导出来的 Excel 内容样式比较美观专业。
- Magicodes.IE.Excel 导出数据到 Excel 不需要机器上安装 Office 或 Wps 等软件
- 本文提供的例子可以应付大部分的业务场景,但事实上,Magicodes.IE.Excel 还可以处理更复杂的数据,大家有兴趣可以到 GitHub 下载其源码深入了解
我是老杨,一个奋斗在一线的资深研发老鸟,让我们一起聊聊技术,聊聊人生。
都看到这了,求个点赞、关注、在看三连呗,感谢支持。