gpt4 book ai didi

java - 将 SXSSF 保存为 .xls 文件

转载 作者:行者123 更新时间:2023-11-30 07:12:01 34 4
gpt4 key购买 nike

我正在使用 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 堆大小,或为 .xlsx 切换到 SXSSF,或者只使用 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/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com