You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@poi.apache.org by Greg Woolsey <gr...@gmail.com> on 2019/04/10 14:59:07 UTC
Re: Loading Large XLSM file using POI without Memory issue .
First try with the latest POI, 4.1.0. The version you are using, 3.8, is
very out of date. Much has changed, and I doubt you will get any help for
such an old version.
On Wed, Apr 10, 2019, 05:24 Dhanaraja, R (R.) <RD...@ford.com> wrote:
> Hi Team,
>
> We use below 3 POI jars in in our organization for Excel processing .
>
> · poi-3.8
>
> · poi-ooxml-3.8-20120326.jar
>
> · poi-ooxml-schemas-3.8-20120326.jar
>
> Below excel formats are getting processed with the help of mentioned jar
> files.
>
> · .xls
>
> · .xlsx
>
> · .xlsm
>
> We have a new requirement where we need to load 500MB of .xlsm file and
> delete the particular sheet from that workbook and save the updated excel
> in to the server location.
>
> Tried something like this but, while loading opc package into xssf work
> book gave us out of memory error .
> import org.apache.poi.openxml4j.opc.OPCPackage;
> import org.apache.poi.xssf.streaming.SXSSFWorkbook;
> import org.apache.poi.xssf.usermodel.XSSFSheet;
> import org.apache.poi.xssf.usermodel.XSSFWorkbook;
>
> OPCPackage pkg =
> OPCPackage.open("C:\\PROJECTS\\Test.xlsm");
> XSSFWorkbook wb = new XSSFWorkbook(pkg);
> SXSSFWorkbook wb1 = new SXSSFWorkbook(wb, 100);
>
>
> Out Of Memory Error log:
> JVMDUMP032I JVM requested System dump using 'C:\PROJECTS\
> Workspace\webcontent\core.20190409.141414.14460.0001.dmp' in response to an
> event
> JVMDUMP010I System dump written to 'C:\PROJECTS\ Workspace\webcontent
> \core.20190409.141414.14460.0001.dmp
>
> We have another logic running fine where currently we are parsing same
> file and reading some data .
>
> OPCPackage pkg = OPCPackage.open(filename);
> XSSFReader r = new XSSFReader( pkg );
> XSSFReader.SheetIterator iter =
> (XSSFReader.SheetIterator) r
> .getSheetsData();
> int index = 1;
> while (iter.hasNext()) {
> iter.next();
> String sheetName = iter.getSheetName();
> if(sheetName.equals("SHEET1")){
> break;
> }
> index++;
> }
> SharedStringsTable sst = r.getSharedStringsTable();
> XMLReader parser = fetchSheetParser(sst); ==>
> org.apache.xerces.parsers.SAXParser
> InputStream sheet2 = r.getSheet("rId"+index);
> InputSource sheetSource = new InputSource(sheet2);
>
> parser.parse(sheetSource);
> sheet2.close();
> pkg.close();
>
> From the stack overflow forum understood that one of the solution is to
> increase the JVM to support this .
> But in my case already we have enabled maximum possible size for our JVM
> since our application has more no of concurrent users .So further
> increasing it not possible in my case.
>
> Question: Is there any possible way available to delete particular sheet
> without memory issue using Apache POI ?
>
>
> Note: We are using JRE 1.8
>
> Please provide your suggestions on this .
>
>
> Thanks & Regards,
> Dhanaraja.R
>
>