2015-05-16 3 views
-1

Java пространства кучи поднятого во время написания 86000 строк с .xlsm Excel с помощью поиJava куча пространство при написании 86000 строк с .xlsm Excel с помощью xssf

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

Итак, в чем вопрос? – DarkHorse

+0

Я получаю исключение, как указано выше, поэтому, пожалуйста, предложите мне, что делать? –

+1

попытайтесь расширить кучу при запуске приложения: java -Xms500m -Xmx1000m -jar ./dist/myJar.jar – houssam

ответ

0

Я пытался так много способов решить эту проблему, и, наконец, я получил решение, как показано ниже

Я использовал 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);