我正在使用Apache POI Streaming API-SXSSFWorkbook将数据写入excel文件。 但是,如果大小超过100Mb,Excel文件会因超过100 000条记录而被破坏,通常有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 Streaming Api的问题。它正在生成包含1百万条记录的文件。但Excel没有加载该文件。它正在给予“没有足够的记忆来完成这个动作”。错误。
我使用的是Excel 2013 32位版本,只能使用2GB内存。我用100k记录和300列创建的excel文件的文件大小为108MB。当我尝试在Excel中打开此文件时,它占用了大量的系统内存。一旦内存消耗达到1.7 MB,Excel就会出错。
使用Apache Streaming API生成100万行的最低配置是什么?任何帮助将不胜感激。
感谢。
编辑2: 如果我以zip格式打开使用Apache Streaming Api生成的Excel文件(通过将.xlsx重命名为.zip),xl-&gt; worksheets文件夹中xml文件的大小约为2GB(100k记录和300列)。有没有办法减少这个xml文件的大小。