直接将Excel数据写入输出流(限制内存消耗)

4
我正在寻找一个简单的解决方案来输出大型Excel文件。输入数据来自数据库,我希望直接将Excel文件输出到磁盘上,以尽可能降低内存消耗。我已经查看了像Apache POI或jxls这样的工具,但没有找到解决我的问题的方法。
额外的信息是,我需要生成针对2007年之前的Excel的.xls文件,而不是新的.xlsx xml格式。我知道我可以生成CSV文件,但我更喜欢生成普通的Excel文件...
有什么建议吗?
我意识到我的问题并不是很清楚,我真的想能够在不必将整个文件保存在内存中的情况下编写Excel文件...

https://dev59.com/fUrSa4cB1Zd3GeqPX6PC - pstanton
1
我看到了这个问题,虽然标题很相似,但我只对编写 Excel 文件感兴趣,无需读取它们。而且我特别想找到一种不需要在内存中保存整个 Excel 文件的方法... - pgras
3个回答

6
唯一有效的方法是使用基于字符的 CSV 或 XML(XLSX)格式,因为它们可以逐行写入输出,这样您每次只能在内存中保留一行。 基于二进制的 XLS 格式必须在写入输出之前完全填充到内存中,这在大量记录的情况下会占用大量内存。
我建议使用 CSV,因为它可能比 XML 更有效,并且您有优势,即任何体面的数据库服务器都具有导出功能,因此您不需要在 Java 中 program/include 任何新内容。 我不知道您使用的是哪个 DB,但如果例如是 MySQL,则可以使用 LOAD DATA INFILE

谢谢您的回答,我想我会选择CSV,直到我的公司迁移到更新的Office版本,然后继续使用xlsx。您知道有哪个库可以逐行生成xlsx吗? - pgras

2

不清楚怎样生成真正的XSL文件。但是,您可以直接编写一个HTML文件,或者压缩一个包含OpenDocument电子表格的流(我猜测MS Excel后来能够读取这种格式)。


HTML是一个极其糟糕的想法。不要这样做。Excel在编辑/保存时会弄乱它,而最新版本会抱怨不支持的文件格式。只使用XLS / XLSX / CSV。 - BalusC

2

JExcelAPI 经常被推荐作为比 Apache POI 更节省内存的选择。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接