前言
本篇文章主要讲解如何将EF查询出来的数据,按照自己得需求导出到Excel的思路和实现的代码
一、需要引入的包
NuGet搜索NPOI,安装引入即可,好像以前做java操作Excel也是用的apache的这个包
二、定义一个ExcelHeader类
这个类的主要作用就是Excel的表头中文以及我们党费缴纳流水类对应的属性,以我需要导出党费收入的表为例:
public static Dictionary<string, string> ShouKuanHeader = new Dictionary<string, string> {
{ "Tujing","途径"},{ "Fashengshijian","发生时间"},{ "Zhibu","党支部"},{ "Jiaonaren","缴纳人"},{ "Jiaonanianfen","缴纳年份"},{"Jiaonajidu","缴纳季度" },{ "Yuedu","月度"}, {"Shourujine","收入金额" },{ "Dangbanbeizhu","备注"}
};
在类中定义一个静态的字典属性, key就是党费流水类的属性, value是中文名称,用于表示表头.不要喷我,我很多都是用的拼音,哈哈哈哈哈.
三、导出Excel的具体实现方法
HSSFWorkbook excelBook = new HSSFWorkbook(); //创建工作簿Excel
NPOI.SS.UserModel.ISheet sheet1 = excelBook.CreateSheet("党费收款流水");
NPOI.SS.UserModel.IRow row1 = sheet1.CreateRow(0);//创建第一行
int i = 0;
foreach (var s in ExcelHeader.ShouKuanHeader) //循环把表头写入到第一行对应单元格
{
row1.CreateCell(i).SetCellValue(s.Value);
i++;
}
i = 0;
foreach (var k in res) //res是EF查询出来的需要导出的流水
{
NPOI.SS.UserModel.IRow row = sheet1.CreateRow(i + 1);
int j = 0;
foreach (var s in ExcelHeader.ShouKuanHeader)
{
row.CreateCell(j).SetCellValue(k.GetType().GetProperty(s.Key).GetValue(k).ToString());
j++;
}
i++;
}
MemoryStream bookStream = new MemoryStream();//创建文件流
excelBook.Write(bookStream); //文件写入流(向流中写入字节序列)
bookStream.Seek(0, SeekOrigin.Begin);//输出之前调用Seek,把0位置指定为开始位置
return File(bookStream, "application/vnd.ms-excel", $"党费收款流水-{startDate}-{endDate}.xlsx");//最后以文件形式返回
总结:
通过NPOI导出Excel是相对比较容易的。先定义一个工作簿,然后创建一个页签,通过row和cell来定位到具体的单元格,对单元来进行内容的填充。我这里实现简单的导出即可,所以就没有涉及到单元格样式的设置等更高级的操作了。