excel - JAVA - 写入 Excel 文件时出现 Apache POI OutOfMemoryError

标签 excel memory memory-management excel-2007 apache-poi

我正在使用 Apache POI 编写 Excel 文件。

我想将myResultSet的所有数据写入其中

其中字段名称(列)存储在 String[] 字段名称中。

我有 70000 行和 27 列

我的代码:

String xlsFilename = "myXLSX.xlsx";
org.apache.poi.ss.usermodel.Workbook myWorkbook = new XSSFWorkbook();
org.apache.poi.ss.usermodel.Sheet mySheet = myWorkbook.createSheet("myXLSX");
Row currentRow = mySheet.createRow(0);
for (int k = 0; k < fieldNames.length; k++) {
    // Add Cells Of Title Of ResultsTable In Excel File
    currentRow.createCell(k).setCellValue(fieldNames[k]);
}

for (int j = 0; j < countOfResultSetRows; j++) {
    myResultSet.next();
    currentRow = mySheet.createRow(j + 1);
    for (int k = 0; k < fieldNames.length; k++) {
        currentRow.createCell(k).setCellValue(myResultSet.getString(fieldNames[k]));
        System.out.println("Processing Row " + j);
    }
}

FileOutputStream myFileOutputStream = new FileOutputStream(xlsFilename);
myWorkbook.write(myFileOutputStream);
myFileOutputStream.close();

我的问题是,在写入行时,程序变得越来越慢。

当到达第 3500 行时,它会停止并出现异常:

线程“Thread-3”中出现异常 java.lang.OutOfMemoryError:Java 堆空间 在 java.lang.AbstractStringBuilder.(AbstractStringBuilder.java:45) 在 java.lang.StringBuffer.(StringBuffer.java:79)

看来我的内存力不够了。

我该如何解决这个问题。

有没有办法将我的数据每 1000 个存储到一个临时文件(例如)?

你有什么建议?

我在使用 jxl 时遇到了同样的问题,但也没有解决它 ( JAVA - Out Of Memory Error while writing Excel Cells in jxl )

现在我无论如何都需要 xlsx 文件,所以我必须使用 POI。

最佳答案

似乎有一种方法首先创建 XML 格式的数据文件,然后用现有的模板 xlsx 文件替换该 XML。

http://svn.apache.org/repos/asf/poi/trunk/src/examples/src/org/apache/poi/xssf/usermodel/examples/BigGridDemo.java

但这不适用于 xls 格式文件。

关于excel - JAVA - 写入 Excel 文件时出现 Apache POI OutOfMemoryError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3185841/

相关文章:

excel - 我们如何在 MS Excel 中执行常见的集合操作(​​联合、交集、减)?

python - 递归函数内有一个列表对内存/资源的影响

debugging - 有没有办法限制ghci可以拥有的内存?

c# - 内存平铺管理和大对象 C#

我们可以在没有动态内存分配的情况下在 C 中使用双向链表吗?

python - 打开pyxl : need the max number of rows in a column that has data in Excel

VBA Excel 在另一个选项卡上取消选择

c# - 如何提示用户保存自动 Excel 文件

我的 std::map of &Objects 和 std::vector of &Objects 导致 C++ 内存泄漏

delphi - 无效的指针操作,调试时请求建议