我使用 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的任何示例。
感谢您的帮助。
答案 0 :(得分:0)
Dotnetcore.NPOI不是NPOI的官方发行版,并且很长时间以来,它们都不再维护该分支。请改用https://www.nuget.org/packages/NPOI/。如果确认为错误,请向https://github.com/tonyqus/npoi/issues
提交问题