【问题标题】:Writing XLSX files without having the entire object in memory at once写入 XLSX 文件,而无需一次将整个对象放在内存中
【发布时间】:2016-02-29 21:37:43
【问题描述】:

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

我曾尝试使用 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# 解决方案。我最好不需要自己编写或从其他库移植的一个。

有人知道有什么选择吗?

【问题讨论】:

    标签: xlsx


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2010-11-22
      • 2019-06-16
      • 1970-01-01
      • 2018-06-12
      • 1970-01-01
      • 2021-12-20
      • 2017-03-29
      • 2016-02-29
      • 2016-08-18
      相关资源
      最近更新 更多