使用EPPlus导出EXCEL文件
.NET平台有不少用于Excel文件读写的第三方库,最早使用的是NPOI。
后面接触了MiniExcel,大部分使用场景下,发现用起来更加简单。所以后来很多项目都使用MiniExcel。
这几天在弄一个数据录入的小工具,动态生成模板,然后按照模板录入数据。
因为记录的字段都是根据模板动态生成的,包括数据,其实是一个字段一个类地保存的。
然后导出的数据的时候,想着可以一行一条记录或者一列一条记录两种模式。
发现去实现这个功能的时候,MiniExcel就不是很方便了。
包括NPOI,基本上的思路都是先产生一个Row对象,再指定这个Row对象每个Column的值。
特别是一列一条记录的时候,要先new一个Row对象的模式,就非常不方便。
所以就想到用EPPlus来实现,因为EPPlus可以直接指定某行某列Cell的值,并不需要在指定Cell的值之前,要先去创建Row对象。
安装:
Install-Package EPPlus
使用前需要指定LicenseContext,NonCommercial为非商用。
ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
参考代码:
using (var p = new ExcelPackage()) { var ws = p.Workbook.Worksheets.Add("Sheet1"); var _fieldFormat = DbHelper.Select<FieldInfo, int>(s => s.TemplateGuid == SelectedItem.TemplateGuid, s => s.OrderID); var rowIndex = 1; foreach (var item in _fieldFormat) { ws.Cells[rowIndex++, 1].Value = item.FieldName; } var columnIndex = 2; var records = DbHelper.Select<RecordInfo>(s => s.DataGuid == SelectedItem.DataGuid); foreach (var record in records) { var items = DbHelper.Select<FieldDataInfo>(s => s.RecordGuid == record.RecordGuid); rowIndex = 1; foreach (var item in items) { ws.Cells[rowIndex++, columnIndex].Value = item.FieldValue; } columnIndex++; } p.SaveAs(new FileInfo(fileName)); Process.Start("explorer.exe", "/select," + fileName); }