如何正确构建包含多行的 xlsx 文件?

How build xlsx file with many rows it corectly?

我尝试构建从 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文件?

您的问题是由 Apache-POI(与大多数 API 一样)尝试在内存中构建 xls 文件这一事实引起的。要解决这个问题,您有两个选择:

  • SXSSF。这是一个使用 Apache POI 库构建的流媒体解决方案。它的工作方式与您已有的类似,但会将额外的内容刷新到磁盘,应该可以让您轻松处理大文件。

  • 或者您也可以只编写 CSV 文件。这样您就可以抛弃整个 POI 库并编写纯 CSV 文件。这些可以使用标准 Java 代码(或者如果您认为需要 CSS 库)逐行编写,然后如果该报告的用户需要,则将其转换为 XLSX。 Excel 现在可以轻松打开 CSV 文件。