在jxl中写入Excel单元格时发生内存不足错误

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

for(int j = 0; j <countOfRows; j ++){

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

}

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

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

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

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

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

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

这是一个好主意,还是你会提出一个解决scheme?

提高虚拟机的可用内存(使用-Xms和-Xmx)不是一个选项?

JExcel常见问题解答有几个build议,包括Curtis的想法。

如果您不介意性能受到影响,则可以使用临时文件,而不是在内存中完成所有操作 。

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