2010-07-02 34 views
1

我正在使用JXL編寫50000行和30列的excel文件。 我的代碼看起來是這樣的:JAVA - 在jxl中編寫Excel單元格時出現內存不足錯誤

對(INT J = 0;Ĵ< countOfRows; J ++){

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

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

..... 

..... 

}

在寫單元,程序進慢

最後在25000行左右出現以下錯誤:

異常在線程「線程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的問題。

有沒有辦法寫入文件,清除內存並coninue每1000個單元格寫入單元格?

這是一個好主意,或者你會提出什麼樣的解決方案?

回答

1

提高虛擬機可用內存(帶-Xms和-Xmx)不是一個選項嗎?

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

我在WorkbookSettings對象中找不到setUseTemporaryFileDuringWrite。 你有什麼版本的jxl? (查看我在下面發佈的答案以獲取更多信息) – 2010-07-06 15:37:24

+2

@Stefanos,根據javadocs,它看起來像是該功能在verison> = 2.6.9中可用 – Mark 2010-07-06 16:58:49

相關問題