jjzjj

java - Apache POI 3.7 OutOfMemoryError : Java heap space when writing to large no of rows to xlsx files

coder 2024-03-27 原文

我需要在 xlsx 文件中写入超过 65000 行的结果集。所以,我正在尝试使用 Apache POI 3.7。我收到 OutOfMemoryError:Java 堆空间。除了增加 JVM 内存似乎无法解决问题外,我该如何解决此问题。

简单示例代码:

public static void main(String[] args) throws IOException {
    Workbook wb = new XSSFWorkbook();
    CreationHelper createHelper = wb.getCreationHelper();
    Sheet sheet = wb.createSheet("new sheet");

    // Create a row and put some cells in it. Rows are 0 based.
    for (int i=0;i<65000;i++){
        Row row = sheet.createRow((int) i);
    // Create a cell and put a value in it.
    Cell cell = row.createCell(0);
    cell.setCellValue(1);

    // Or do it on one line.
    row.createCell(1).setCellValue(1.2);
    row.createCell(2).setCellValue(
            createHelper.createRichTextString("This is a string"));
    row.createCell(3).setCellValue(true);
    }
   

    // Write the output to a file
    FileOutputStream fileOut = new FileOutputStream("test1.xls");
    fileOut.flush();
    wb.write(fileOut);
    fileOut.close();
}

最佳答案

您可能想查看 POI 项目最近使用 SXSSF API 做了什么. How-To 中也有一个部分.
对于您提供的示例代码,这将是您创建数据然后在创建后忘记它的完美选择。使用 SXSSF 扩展名,您可以立即开始将数据写入文件。这样可以保持较低的内存占用量。

请注意,此功能在 Apache POI 3.7 中不存在,但在 Apache POI 3.8 beta 3 中添加。
目前正在对最终版本 3.8 进行投票。因此,如果您必须使用最终版本,那么发布之前的时间应该不会太长。

关于java - Apache POI 3.7 OutOfMemoryError : Java heap space when writing to large no of rows to xlsx files,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9775796/

有关java - Apache POI 3.7 OutOfMemoryError : Java heap space when writing to large no of rows to xlsx files的更多相关文章

随机推荐