Пространство кучи Java при написании 86000 строк с.xlsm excel с использованием xssf
Пространство кучи Java поднялось при написании 86000 строк с.xlsm excel с использованием poi
xssfworkbook at hhhhCell = hhhhRow.createCell(j + colNumber);
hhhhCell.setCellValue(ret.getFieldValueString(sortSequence.get(i), colName));
java.lang.OutOfMemoryError: Java heap space
at org.apache.xmlbeans.impl.store.Saver$TextSaver.resize(Saver.java:1592)
at org.apache.xmlbeans.impl.store.Saver$TextSaver.preEmit(Saver.java:1223)
at org.apache.xmlbeans.impl.store.Saver$TextSaver.emit(Saver.java:1144)
at org.apache.xmlbeans.impl.store.Saver$TextSaver.emitElement(Saver.java:926)
at org.apache.xmlbeans.impl.store.Saver.processElement(Saver.java:456)
at org.apache.xmlbeans.impl.store.Saver.process(Saver.java:307)
at org.apache.xmlbeans.impl.store.Saver$TextSaver.saveToString(Saver.java:1727)
at org.apache.xmlbeans.impl.store.Cursor._xmlText(Cursor.java:546)
at org.apache.xmlbeans.impl.store.Cursor.xmlText(Cursor.java:2436)
at org.apache.xmlbeans.impl.values.XmlObjectBase.xmlText(XmlObjectBase.java:1455)
at org.apache.poi.xssf.model.SharedStringsTable.getKey(SharedStringsTable.java:130)
at org.apache.poi.xssf.model.SharedStringsTable.addEntry(SharedStringsTable.java:176)
at org.apache.poi.xssf.usermodel.XSSFCell.setCellValue(XSSFCell.java:345)
at org.apache.poi.xssf.usermodel.XSSFCell.setCellValue(XSSFCell.java:315)
at prg.util.PbExcelGenerator.buildReportTableXLSM(PbExcelGenerator.java:5233)
at prg.util.PbExcelGenerator.createExcelForReportsXLSM(PbExcelGenerator.java:3490)
at com.progen.reportview.bd.PbReportViewerBD.generateReportForExportReportSchedule(PbReportViewerBD.java:14811)
at prg.reportscheduler.ReportSchedulerJob.sendExportSchedulerMail(ReportSchedulerJob.java:810)
at prg.reportscheduler.ReportSchedulerJob.execute(ReportSchedulerJob.java:83)
at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:525)
1 ответ
Я пробовал так много способов, чтобы решить это, и, наконец, я получил решение, как показано ниже
Я использовал POI SXSSFWorkbook, предложенный кем-то, и он отлично работает для меня.
SXSSFWorkbook hhhhWorkbook = null;
SXSSFSheet hhhhSheet = null;
CellStyle hhhhStyle = null;
Row hhhhRow = null;
Cell hhhhCell = null;
OPCPackage pkg = OPCPackage.open(inStream);
XSSFWorkbook xssfwb = new XSSFWorkbook(pkg);
hhhhWorkbook = new SXSSFWorkbook(xssfwb,100); // keep 100 rows in memory, exceeding rows will be flushed to disk
hhhhSheet = (SXSSFSheet) hhhhWorkbook.getSheetAt(sheetNumber);