2013-11-15 62 views
0

我需要在xls文件(Microsoft 97-xp)中編寫超過1,000,000行的結果集。所以我試圖使用JExcel API但是我得到錯誤OutOfMemoryError:Java堆空間。除了增加JVM內存或創建不同的Excel文件,然後手動合併它們,我該如何解決這個問題。我甚至不想創建CSV文件。請幫忙。OutofMemoryError:寫入大號時出現Java堆空間。的行到xls文件

示例代碼:

int sheetNumber = 1; 
int maxSheetSize=65000; 
int start = 0; 
int end=maxSheetSize; 
int totalsize=1000000; 
int completed = 0; 
int columnCount=10; 
WritableWorkbook workbook = Workbook.createWorkbook(new File("output.xls")); 

while (completed < totalsize) { 
    WritableSheet sheet = workbook.createSheet("Sheet " + (sheetNumber++), 0); 
    for (int r = start; r < end; r++) { 
     int i=1; 
     for (int c = 0; c < columnCount; c++) { 
      Label label = new Label(c, i, "data from resultset"); 
      sheet.addCell(label); 
     } 
     i++; 
    } 
    completed += (end - completed); 
    start = end; 
    end = (totalsize - completed) < maxSheetSize ? (totalsize - completed) : completed + maxSheetSize; 
    end = end < maxSheetSize ? totalsize : end; 
} 
workbook.write(); 
workbook.close(); 
+1

不支持在Excel中寫入1M行。見http://office.microsoft.com/en-001/excel-help/excel-specifications-and-limits-HP005199291.aspx –

回答

2

那Excel格式的舊版本只支持65,536行,256列。

「所有現有的Java API都試圖一次性在RAM中構建整個文檔,嘗試編寫一個符合新的xslx文件格式的XML文件,爲此,我建議在然後打開它,檢查結構並更換你想要的零件。「亞倫Digulla - API to write huge excel files using java

+0

只想使用XLS格式 – user2994919

+0

使用@ user2310289的解決方案;在這個過程中有時重新打開工作表,所以它們都不存儲在RAM中。 – spydon

0

直到Excel 2003中的最大行數爲65,536。
即使您使用更高版本,我也會建議您重新打開工作表並追加說明最大行數(可能爲10000)。關閉,打開並重復。

相關問題