使用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);
}

 

posted @ 2022-05-09 16:01  wzwyc  阅读(836)  评论(2编辑  收藏  举报