读取20MB XLSX文件的“OutOfMemoryException”

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

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

但是,对于大于几兆字节的任何XLSX文件而言,这会导致内存使用量猛增至1GB左右,并最终导致OOMexception。

做一些研究,我发现 ,奇怪的是,从文件加载工作簿,而不是一个stream导致POI内存消耗更less。 与我提供的使用Files提供的Java示例等效的最接近的C#如下所示:

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

但它似乎使用相同的底层实现,因为内存使用仍然是相同的,并导致OutOfMemoryexception。

NPOI是否有内置的用于处理大型XLSX文件的内容?

对可以同时处理XLS和XLSX文件的替代库的build议也值得欢迎。

看来XLSX的支持在NPOI中是相当新颖的,它现在还不能处理大文件。

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

作为替代库的build议,一个好的是Apache POI 。 我已经广泛地使用了XLSX和XLS文件,它很好地完成了这项工作。 这是一个快速testing你的文件的要点 。

Apache POI不包含的唯一格式是可以使用Xelem的旧格式XML文件。