编写XLSX文件时不会将整个对象同时存储在内存中

时间:2015-11-26 17:52:18

标签: xlsx

我正在尝试使用32位C#应用程序创建大型XLSX文件。对于此要求,二进制必须是32位(决定不是我的)。但它可以在64位机器上运行,内存为16 + GB。

我尝试使用NPOI和EPPlus编写XLSX文件。我可以毫无问题地编写小文件。当我写大得多的数据时,我会遇到内存不足的问题。以CSV表示的相同数据仅为80MB。我希望XLSX对象必须是庞大的,因为我原本以为我至少有几GB的无碎片内存可用。)

我尝试过编写一个CSV文件(在这种情况下会生成一个80MB的CSV文件),然后使用EPPlus的LoadFromText函数创建一个XLSX。同样适用于小文件,但对于80MB CSV,创建XLSX需要21个多小时。

我想要一个可扩展的解决方案。所以我不能依赖于在内存中同时拥有一个代表整个XLSX文件的对象。有没有人知道编写XLSX文件的方法,这些文件不需要同时在内存中包含一个代表整个XLSX文件的对象?

认为 Perl的Excel :: Writer :: XLSX可以做到这一点,但我需要一个C#解决方案。我最好不需要自己编写或从其他库中编写端口。

有没有人知道任何选项?

1 个答案:

答案 0 :(得分:0)

看起来z0mp在http://epplus.codeplex.com/discussions/230092的答案以可扩展的方式解决了问题。他首先创建一个Open XML文档,然后一次读取X多个字节并将其写入他的XLSX文档。