【问题标题】:Write Excel data directly to OutputStream (limit memory consumption)将Excel数据直接写入OutputStream(限制内存消耗)
【发布时间】:2010-01-15 11:53:37
【问题描述】:

我正在寻找一种简单的解决方案来输出大的 excel 文件。输入数据来自数据库,我想将 Excel 文件直接输出到磁盘,以尽可能降低内存消耗。我查看了 Apache POI 或 jxls 之类的东西,但没有找到解决问题的方法。

作为附加信息,我需要为 2007 年之前的 Excel 生成 .xls 文件,而不是新的 .xlsx xml 格式。我也知道我可以生成 CSV 文件,但我更喜欢生成纯 Excel……

有什么想法吗?

我意识到我的问题不太清楚,我真的希望能够编写 excel 文件而不必将整个文件保存在内存中......

【问题讨论】:

  • 我看到了这个问题,即使标题很相似我只对写excel文件感兴趣,不需要阅读它们。而且我正在专门寻找一种不将整个 excel 文件保存在内存中的方法...

标签: java excel


【解决方案1】:

有效地做到这一点的唯一方法是使用基于字符的CSV或XML(XLSX)格式,因为它们可以逐行写入输出,所以你可以在每个萨尔多的记忆中一直只有一行。基于 binary 的 XLS 格式必须首先在内存中完全填充,然后才能写入输出,这在大量记录的情况下当然会占用内存。

我建议为此使用 CSV,因为它可能比 XML 更有效,而且您的优势是任何体面的数据库服务器都具有导出功能,因此您不需要 program/@987654322 @Java 中的任何新事物。我不知道您使用的是哪个数据库,但如果是 MySQL,那么您可以为此使用 LOAD DATA INFILE

【讨论】:

  • 感谢您的回答,我想我会选择 CSV,直到我的公司迁移到更新的 Office 版本,然后继续使用 xlsx。你知道一个可以逐行生成 xlsx 的库吗?
【解决方案2】:

不知道如何生成真正的 XSL 文件。但是你可以直接写一个HTML文件,或者一个包含OPenDocument电子表格的zip流(我猜MSExcel以后可以读这个格式)

【讨论】:

  • HTML 是一个非常糟糕的主意。不要那样做。 Excel 会在编辑/保存时弄乱它,最新版本会抱怨不支持的文件格式。仅使用 XLS/XLSX/CSV。
【解决方案3】:

JExcelAPI 通常被推荐作为 Apache POI 的内存效率更高的替代方案。

【讨论】:

    猜你喜欢
    • 2015-11-30
    • 2017-10-07
    • 1970-01-01
    • 2020-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    相关资源
    最近更新 更多