如何构建具有多行的xlsx文件?

时间:2015-11-03 07:56:02

标签: java oracle apache-poi xlsx

我尝试构建一个从Oracle到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 个答案:

答案 0 :(得分:4)

你的问题是由Apache-POI(像大多数API)试图在内存中构建xls文件引起的。要解决此问题,您有两种选择:

  • SXSSF。这是使用Apache POI库构建的流式解决方案。它的工作方式与您现有的相似,但可以将额外的内容刷新到磁盘,并且可以让您轻松处理大文件。

  • 或者您可以只写CSV文件。这样您就可以放弃整个POI库并编写纯CSV文件。这些可以使用标准Java代码(或者如果您认为需要时使用CSS库)逐行编写,然后在该报告的用户需要时转换为XLSX。 Excel现在没有太多的喧嚣打开CSV文件。