我正在使用 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。
但这不适用于 xls 格式文件。
关于excel - JAVA - 写入 Excel 文件时出现 Apache POI OutOfMemoryError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3185841/