JAVA - 在jxl中编写Excel单元格时出现内存不足错误

时间:2010-07-02 15:22:49

标签: excel memory memory-management cells jxl

我正在使用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”中的异常java.lang.OutOfMemoryError:Java堆空间     在jxl.write.biff.WritableSheetImpl.getRowRecord(WritableSheetImpl.java:984)     at jxl.write.biff.WritableSheetImpl.addCell(WritableSheetImpl.java:951)     在KLL.ConverterMainFrame $ exportToXLSBillRightsThread.run(ConverterMainFrame.java:6895)

Java处理内存总是很困难。

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

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

这会是一个好主意还是你还有什么建议作为解决方案?

2 个答案:

答案 0 :(得分:5)

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); 

答案 1 :(得分:1)

提高VM的可用内存(使用-Xms和-Xmx)不是一种选择吗?