java - 将 SXSSF 保存为 .xls 文件

标签 java excel apache-poi

我正在使用 Apache POI 库将大量数据导入 Excel 文件。我不能使用 HSSF 模型,因为它需要太多内存并且 Java 会抛出内存堆异常。我发现的方法是 SXSSF 工作簿模型,它将每 N 行写入文件,而不是将所有工作簿存储在内存中。但我找不到方法,如何将其保存为 .xls(Excel 2003 及更低格式)而不是 .xlsx。

File f = new File("file.xlsx");
f.createNewFile();
SXSSFWorkbook wb = new SXSSFWorkbook(200);
//inputing values here
FileOutputStream fileOut = new FileOutputStream(f);
wb.write(fileOut);
fileOut.close();

最佳答案

你不能。

explained on the POI Components page ,HSSF 用于处理 .xls 文件(基于 OLE2),XSSF/SXSSF 用于处理 .xlsx 文件(.xlsx)

如果您想生成 .xls 文件,则必须使用 HSSF UserModel。 HSSF没有流写入支持,只有streaming read .

.xls 文件格式不像 .xlsx(更多后退/前进引用、偏移量等)那么适合流式写入,因此 HSSF 不支持流式写入。只需增加 Java 堆大小,或者切换到 SXSSF for .xlsx,或者只使用简单的东西,比如 CSV!

.

更新 如果您需要测试应该为系统分配多少内存来使用 HSSF 甚至 XSSF 进行写入,我建议您尝试使用 SSPerformanceTest example ,可以在命令行上运行。使用所有 jar 和给定的堆大小启动它,看看它是否完成。它接受行数和列数以及要创建的文件类型的参数。使用夜间构建并尝试 40k 行/10 列,我可以让它在 90mb 堆中快速完成:

$ java -Xmx90m -classpath poi-3.10-beta3-20131219.jar:poi-examples-3.10-beta3-20131219.jar:poi-ooxml-3.10-beta3-20131219.jar \
     org.apache.poi.ss.examples.SSPerformanceTest HSSF 40000 10 1
Elapsed 1 seconds

关于java - 将 SXSSF 保存为 .xls 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20678164/

相关文章:

vba - 使用 Excel VBA 压缩文件会产生一个空存档

java - SXSSFWorkbook.write to FileOutputStream 写入大文件

java - 使用java删除Excel中的 '0'和 'n/a'

java - 结果集为 Excel 忽略第一行

java - RandomAccessFile 类如何使用 randomAccessFile.read() 方法返回字节;

java - Oracle JDBC优化: Enable PreparedStatement caching in a Spring boot Application

java - 在 Eclipse 中链接文本资源

python - XLWINGS:如何选择没有标题的整列?

java - libGDX:ClickListener 中的延迟

Excel VBA保护工作表而不锁定所有单元格