【问题标题】:JAVA - Out Of Memory Error while writing Excel Cells in jxlJAVA - 在 jxl 中写入 Excel 单元格时出现内存不足错误
【发布时间】:2011-03-11 04:04:16
【问题描述】:

我正在使用 JXL 编写一个 50000 行和 30 列的 excel 文件。 我的代码如下所示:

for (int j = 0; j

myWritableSheet.addCell(new Label(0, j, myResultSet.getString(1), myWritableCellFormat));

myWritableSheet.addCell(new Label(1, j, myResultSet.getString(2), myWritableCellFormat));

.....

.....

}

在编写单元格时,程序越来越慢

最后在第 25000 行出现以下错误:

线程“Thread-3”java.lang.OutOfMemoryError 中的异常:Java 堆空间 在 jxl.write.biff.WritableSheetImpl.getRowRecord(WritableSheetImpl.java:984) 在 jxl.write.biff.WritableSheetImpl.addCell(WritableSheetImpl.java:951) 在 KLL.ConverterMainFrame$exportToXLSBillRightsThread.run(ConverterMainFrame.java:6895)

在 Java 中处理内存总是很困难。

在这种情况下,这似乎是 jxl 的问题。

有没有办法写入文件,清除内存并继续每 1000 个单元格写入单元格?

这是个好主意还是您会提出什么其他解决方案?

【问题讨论】:

    标签: excel memory memory-management cells jxl


    【解决方案1】:

    增加可用于 VM 的内存(使用 -Xms 和 -Xmx)不是一个选项吗?

    【讨论】:

      【解决方案2】:

      JExcel FAQ 有几个建议,包括上面柯蒂斯的想法。

      如果您不介意性能下降,可以使用temporary file instead of doing it all in memory

      WorkbookSettings s = new WorkbookSettings();  
      s.setUseTemporaryFileDuringWrite(true);  
      WritableWorkbook ws = Workbook.createWorkbook(new File("someFile.xls"),s); 
      

      【讨论】:

      • 我在 WorkbookSettings 对象中找不到 setUseTemporaryFileDuringWrite。你有什么版本的jxl? (有关更多信息,请参阅我在下面发布的答案)
      • @Stefanos,根据 javadocs,看起来该功能在 verison >= 2.6.9 中可用
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-15
      相关资源
      最近更新 更多