';内存不足异常';正在读取20mb XLSX文件

本文关键字:20mb 文件 读取 XLSX 内存不足 异常 | 更新日期: 2023-09-27 18:21:35

我正在使用NPOI处理Excel文件。以下是我阅读文件的方式:

using (FileStream stream = File.OpenRead(excelFilePath))
{
    IWorkbook wb = WorkbookFactory.Create(stream);
    ...
}

然而,对于任何大于几兆字节的XLSX文件,它都会导致内存使用率飙升至1GB左右,并最终引发OOM异常。

通过一些研究,我发现,奇怪的是,从文件而不是流加载工作簿会减少POI的内存消耗。与我所提供的使用Files的Java示例最接近的C#等价物如下:

OPCPackage pkg = OPCPackage.Open(new FileInfo(excelFilePath));
XSSFWorkbook wb = new XSSFWorkbook(pkg);

但它似乎使用了相同的底层实现,因为内存使用率仍然相同,并导致OutOfMemory异常。

NPOI是否内置了处理大型XLSX文件的功能?

关于可以同时处理XLS和XLSX文件的替代库的建议也很受欢迎。

';内存不足异常';正在读取20mb XLSX文件

似乎XLSX支持在NPOI中是相当新的,而且它还不能处理大文件。

在尝试了几个库之后,EPPlus能够顺利处理大型XLSX文件,所以我最终决定拥有两个用于读取Excel文件的库,用于XLS的NPOI和用于XLSX的EPPlus。

作为替代库的建议,Apache POI是一个不错的库。我已经在XLSX和XLS文件中广泛使用了它,它做得很好。以下是对文件进行快速测试的要点。

Apache POI唯一没有涵盖的格式是可以使用Xelem的旧格式XML文件。