在将数据导出Excel的时候NPOI因创建太多单元格对象,导致内存溢出。大概20列的数据,4W行就会出现,故另寻它法进行处理。原本是用文件流来进行,但是会导致Excel文件损坏,后来找到EPPlus来进行导出操作。当然可能是本人能力有限,用NPOI不会导出大量数据,文件流操作也没有细研究。
FileInfo file = new FileInfo(Server.MapPath("/Resource/OutFile/1.xlsx"));
using (ExcelPackage package = new ExcelPackage()) { //创建Sheet ExcelWorksheet worksheet = package.Workbook.Worksheets.Add("test"); for (int i = 1; i < data.Count; i++) {//也可以直接用指定单元格进行复制
//worksheet.Cells["A1"].Value="";
//直接指定行列数进行赋值 worksheet.Cells[i, 1].Value = data[i].AccumMonths; } package.SaveAs(file); }
注意:EPPlus所有的行和列的索引是从1开始的,如果写0会报行索引不在范围什么的。
注意:踩了一个坑,在测试的时候没有问题,放到生产服务器上在导出时报错,Error saving file xxx,后来仔细对比下服务器的差别,配置Everyone权限就好了。
此方式可以导出数据20列大概可以导出20W,具体没有试验,我一个Excel存10W数据,然后存放不同的Excel进行的。毕竟查询数据库时候,数据传输大也会比较慢。索性分批,然后压缩打包下载。