2015-11-03 58 views
1

我試圖建立一個從Oracle到xlsx的報告,但是我的服務器凍結了。我這樣做:如何正確構建包含多行的xlsx文件?

int i = 0; 
while (resultSet.next()) { 
    //Create a new row in current sheet 
    Row row = sheet.createRow(i); 
    //Create a new cell in current row 
    row.createCell(0).setCellValue(resultSet.getInt(1)); 
    row.createCell(1).setCellValue(resultSet.getString(2)); 
    row.createCell(2).setCellValue(resultSet.getString(3)); 
    row.createCell(3).setCellValue(resultSet.getLong(4)); 
    row.createCell(4).setCellValue(resultSet.getString(5)); 
    row.createCell(5).setCellValue(resultSet.getString(6)); 
    row.createCell(6).setCellValue(resultSet.getString(7)); 
    row.createCell(7).setCellValue(resultSet.getString(8)); 
    row.createCell(8).setCellValue(resultSet.getString(9)); 
    row.createCell(9).setCellValue(resultSet.getString(10)); 
    row.createCell(10).setCellValue(resultSet.getString(11)); 
    row.createCell(11).setCellValue(resultSet.getLong(12)); 
    i++; 
} 
FileOutputStream out = new FileOutputStream(new File("C:\\new.xls")); 
wb.write(out); 
out.close(); 
resultSet.close(); 
sqlStatment.close(); 
sqlConnection.close(); 

我的resultSet有〜500 000行。我沒有錯誤。如何正確構建具有多行的xlsx文件?

+1

您確實需要xlsx文件:是否可以替代生成CSV文件,然後將其導入到xlsx中使用Excel函數從文件中導入數據? – Willmore

回答

4

您的問題是由於Apache-POI(像大多數API)嘗試在內存中構建xls文件這一事實造成的。要解決這個問題,您有兩種選擇:

  • SXSSF。這是一個使用Apache POI庫構建的流媒體解決方案。它的工作方式與您已有的類似,但將額外的內容刷新到磁盤,並且應該允許您輕鬆處理大文件。

  • 另外,你也可以寫CSV文件。通過這種方式,您可以放棄整個POI庫並編寫普通的CSV文件。可以使用標準Java代碼(如果您覺得需要的話,可以使用CSS庫)逐行編寫這些代碼,然後在該報告的用戶需要時將其轉換爲XLSX。 Excel現在可以打開CSV文件,而不會出現太多的喧鬧。

+0

CSS文件== CSV文件? – are

+0

200 000行輸出酷!現在我開始3 000 000行並等待)))) – Pavel

+1

CSS vs CSV:我整個星期都在做前端...對不起。 –