将100万条记录写入包含300列的Excel文件

时间:2016-04-10 19:05:16

标签: java apache-poi excel-2007

我正在使用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文件的大小。

0 个答案:

没有答案