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

我正在寻找一个简单的解决scheme来输出大的Excel文件。 input数据来自数据库,我想直接输出Excel文件到磁盘,以保持尽可能低的内存消耗。 我曾经看过Apache POI或jxls之类的东西,但是没有办法解决我的问题。

而作为额外的信息,我需要为2007年之前的Excel生成.xls文件,而不是新的.xlsx xml格式。 我也知道我可以生成CSV文件,但我宁愿生成简单的Excel …

有任何想法吗 ?

我意识到我的问题不是很清楚,我真的希望能够写出excel文件,而不必保持整个内存…

唯一有效的方法是使用基于字符的CSV或XML(XLSX)格式,因为它们可以逐行写入输出行,这样每次只能在内存中一次只写一行。 基于二进制的XLS格式必须首先在内存中完全填充,然后才能写入输出,这在logging数量很大的情况下当然是内存占用。

我build议使用CSV,因为它可能比XML更高效,另外你还有一个好处,就是任何体面的数据库服务器都具有导出function,所以你不需要在Java中编写/ 包含任何新东西。 我不知道你正在使用哪个数据库,但是如果它是例如MySQL,那么你可以使用LOAD DATA INFILE

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

通常推荐使用JExcelAPI作为Apache POI更高效的内存替代scheme。