【发布时间】:2019-07-11 22:31:43
【问题描述】:
我使用 DotNetCore.NPOI 将数据导出到 *.xlsx 文件,我的程序似乎内存不足,所以我尝试使用相对较新的 SXSSFWorkbook降低内存占用,但生成的文件总是损坏且无法打开。
即使是这个简单的示例(最初使用 Java 或其他语言)也会创建损坏的文件:
var wb = new SXSSFWorkbook(new XSSFWorkbook(), 1024); // keep 1024 rows in memory
var sh = wb.CreateSheet();
// Should not even have to flush anything before end, only 100 lines
for (int rownum = 0; rownum < 100; rownum++)
{
var row = sh.CreateRow(rownum);
for (int cellnum = 0; cellnum < 10; cellnum++)
{
var cell = row.CreateCell(cellnum);
cell.SetCellValue($"{rownum}:{cellnum}");
}
}
var o = new FileStream("test.xlsx", FileMode.Create, FileAccess.Write);
wb.Write(o);
o.Close();
wb.Dispose();
当我将第一行更改为此时,它可以工作(但始终将整个文档保存在内存中):
var wb = new XSSFWorkbook();
...
不确定我是否应该像这样将 XSSFWorkbook 实例传递给 SXSSFWorkbook 实例:new SXSSFWorkbook(new XSSFWorkbook(), 1024),但不知道还能做什么。原始示例中的 SXSSFWorkbook 构造函数只需要行数。找不到任何专门用于 .NET 的示例。
感谢您的帮助。
【问题讨论】: