我使用Apache POI Streaming API-SXSSFWorkbook將數據寫入excel文件。 但是,如果文件大小大於100Mb,Excel文件通常會損壞超過100 000條包含300列的記錄。有沒有辦法將大量數據寫入excel文件。將300萬條記錄寫入300列的Excel文件
class Test1 {
public static void main(String[] args) throws FileNotFoundException, {
SXSSFWorkbook workbook = new SXSSFWorkbook(100);
workbook.setCompressTempFiles(true);
Sheet sheet = null;
Row row = null;
Cell cell = null;
sheet = workbook.createSheet("Demo1");
FileOutputStream outStream = new FileOutputStream("D:\\Test1.xlsx");
try {
for (int i = 0; i < 100000; i++) {
row = sheet.createRow(i);
for (int j = 0; j < 300; j++) {
cell = row.createCell(j);
cell.setCellValue(" row : "+i +" col: "+ j);
}
}
workbook.write(outStream);
} catch (Exception exception) {
exception.printStackTrace();
} finally {
workbook.dispose();
try {
outStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
編輯1:
我發現,它是不是與Apache POI流Api.It問題產生100萬個的記錄文件。但Excel不加載該文件。它給出'沒有足夠的內存來完成這個動作'的錯誤。
我使用Excel 2013 32位版本,它只能使用2GB的內存。我用100k條記錄和300列創建的excel文件的文件大小爲108MB。當我嘗試在Excel中打開這個文件時,它佔用了大量的系統內存。一旦內存消耗達到1.7 MB,Excel就會報錯。
加載使用Apache Streaming API生成的100萬行的最低配置是多少?任何幫助,將不勝感激。
謝謝。
編輯2: 如果我打開以zip格式使用Apache流API生成的Excel文件(通過重命名.XLSX爲.zip),在XL->工作表文件夾中的XML文件的大小是大約爲2GB 100k的記錄和300列。有什麼辦法可以減小這個xml文件的大小。
問題是什麼?我正在使用SXSSF流編寫大型XLSX文件,並沒有遇到問題。 (除了有足夠的磁盤空間與輸出和tmp區域)。 – rpy
當我嘗試使用Excel 2007打開文件時,它顯示'Excel發現不可讀的內容'。任何幫助將非常感激。 – teja
您是否確認有足夠的磁盤空間?生成一個工作的Excel文件的相同代碼只生成一些行(例如<100k)?它是否使用較少的列(例如<256)? – rpy