当前位置: 首页 > 面试题库 >

将SXSSF保存为.xls文件

仲俊豪
2023-03-14
问题内容

我正在使用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();

问题答案:

你不能

如POI组件页面上所述,HSSF用于处理.xls文件(基于OLE2),而XSSF
/ SXSSF用于处理.xlsx文件(.xlsx)

如果要生成.xls文件,则必须使用HSSF
UserModel。HSSF不支持流写入,仅支持流读取。

.xls文件格式不像.xlsx那样适合流式写入(更多的后向/向前引用,偏移量等),因此HSSF中不提供流式写入支持。只需增加您的Java堆大小,或针对.xlsx切换到SXSSF,或仅使用CSV之类的简单方法即可!

更新
如果需要测试要为使用HSSF甚至XSSF进行写入而应为系统提供的内存,建议您尝试使用SSPerformanceTest示例,该示例可以在命令行上运行。用所有罐子和给定的堆大小将其启动,然后查看是否完成。它接受行和列数以及要创建的文件类型的参数。使用每晚构建并尝试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


 类似资料:
  • 问题内容: 我正在保存一个.txt和.doc文件,其中包含来自JTable的数据。在保存的那一刻,它像在表中一样放置文本,但是由于数据长度不同,它无法容纳。因此,我试图按如下所示安排日期: 第1列名称:第1行第1列数据 第2列名称:第1行第2列数据 第3列名称:第1行第3列数据 第4列名称:第1行第4列数据 第1列名称:第2行第1列数据 第2列名称:第2行第2列数据 第3列名称:第2行第3列数据

  • 我正在保存一个. txt和. doc文件,其中包含我的JTable中的数据。当它保存时,它会像在表格中一样将文本放在外面,但是由于数据长度不同,它不适合。所以我试着把日期安排如下: 第1列名称:第1行第1列数据 第2列名称:第1行第2列数据 第3列名称:第1行第3列数据 第4列名称:第1行第4列数据 第1列名称:第2行第1列数据 第2列名称:第2行第2列数据 第3列名称:第2行第3列数据 第4列名

  • 我有一个file.xls扩展名,但另存为XMl电子表格2003,希望读取该文件并用java代码将其转换为.xls扩展名我的代码如下- 公共类ExcelImport{

  • 当我启动这个代码时,你通常认为它会在文本文件中输入一个100,但我不知道为什么它会像字符一样输入一个“d”。有人知道如何修复吗?一个方法应该输入一个数据,一个应该输入那个数据,一个应该保存那个数据。

  • 我正在尝试将一些UTF-8字符输出到JSON文件。 当我保存文件时,它们是像这样编写的: {“some_key”: “Enviar invitaci\u00f3n privada”} 上述操作是有效的。当我加载文件并打印“some_key”时,它会在终端中显示“Enviar invitación Private ada”。 是否无论如何都要编写带有“some_key”作为编码版本的JSON文件,如