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

标签 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 文件?

最佳答案

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

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

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

关于java - 如何正确构建包含多行的 xlsx 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33493982/

相关文章:

java - 具有返回语句的良好编程习惯

java - 使用装饰器时未注入(inject) SessionContext

sql - 如何判断一个表是否用于存储物化 View 日志?

java - 无法在 Glassfish3 上使用 JDBC 连接到数据库

sql - 确定 Oracle 数据库对象何时无效

java - Servlet 只读取 Excel 文件的前两行

java - Microsoft Graph API,使用 ADAL4J

java - 获取父目录的完整路径[java]

java - Apache POI Word 文档中表格单元格的内容居中并加粗

java - poi API 创建的 Excel 文件 : data is there but only one row is viewable?