DotNetCore.NPOI 总是创建损坏的文件

Posted

技术标签:

【中文标题】DotNetCore.NPOI 总是创建损坏的文件【英文标题】:DotNetCore.NPOI always creates corrupted file 【发布时间】: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 的示例。

感谢您的帮助。

【问题讨论】:

【参考方案1】:

Dotnetcore.NPOI 不是官方的 NPOI 版本,他们停止维护这个分支很长一段时间。请改用https://www.nuget.org/packages/NPOI/。如果确认为bug,请提交issues至https://github.com/tonyqus/npoi/issues

【讨论】:

以上是关于DotNetCore.NPOI 总是创建损坏的文件的主要内容,如果未能解决你的问题,请参考以下文章

在 alpine 中使用 NPOI

盖茨比 - 下载的文件总是损坏

PHP 文件下载总是损坏(50% 的时间)

iTextSharp 正在生成损坏的 PDF

下载时文件损坏

Ionic Native 视频上传损坏的文件