1)Following is the detail excepion [WARNING] Unknown Ptg 2d (45) java.lang.reflect.InvocationTargetException at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) at java.lang.reflect.Constructor.newInstance(Unknown Source) at org.apache.poi.hssf.record.RecordFactory.createRecord (RecordFactory.java:224) at org.apache.poi.hssf.record.RecordFactory.createRecords (RecordFactory.java:160) at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init> (HSSFWorkbook.java:163) at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init> (HSSFWorkbook.java:130) at test.Test.parsingToRawContent(Test.java:70) at test.Test.main(Test.java:313) Caused by: java.lang.ArrayIndexOutOfBoundsException at java.lang.System.arraycopy(Native Method) at org.apache.poi.hssf.record.UnknownRecord.<init> (UnknownRecord.java:62) at org.apache.poi.hssf.record.SubRecord.createSubRecord (SubRecord.java:57) at org.apache.poi.hssf.record.ObjRecord.fillFields(ObjRecord.java:99) at org.apache.poi.hssf.record.Record.fillFields(Record.java:90) at org.apache.poi.hssf.record.Record.<init>(Record.java:55) at org.apache.poi.hssf.record.ObjRecord.<init>(ObjRecord.java:61) ... 10 more Exception in thread "main" org.apache.poi.hssf.record.RecordFormatException: Unable to construct record instance, the following exception occured: null at org.apache.poi.hssf.record.RecordFactory.createRecord (RecordFactory.java:237) at org.apache.poi.hssf.record.RecordFactory.createRecords (RecordFactory.java:160) at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init> (HSSFWorkbook.java:163) at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init> (HSSFWorkbook.java:130) at test.Test.parsingToRawContent(Test.java:70) at test.Test.main(Test.java:313) --------------------------------------------------------------- My code is quite simple: POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(fileName)); HSSFWorkbook wb = new HSSFWorkbook(fs); 2)While I use the old version of POI to parse same excel file, although it will display warning message like "[WARNING] Unknown Ptg 2d (45)" but at least it can parse the content, but It looks like that it always threw OutOfMemoryError while parsing the large xls file.
Created attachment 19234 [details] The testing xls file which cause exception
I have run into the same bug (UnknownRecord throwing an ArrayIndexOutOfBoundsException), and here is a possible solution Change the 3rd constructor to read: public UnknownRecord( short id, short size, byte[] data, int offset ) { sid = id; // ObjRecord's fillFields was getting an obviously wrong subRecordSize, // which it passes to SubRecord.createSubRecord, which passes the value // here as "size". // // Instead of allowing an ArrayIndexOutOfBoundsException // to happen, let's change the size if appropriate. if ( size > (data.length - offset) ) { size = (short)(data.length - offset); } thedata = new byte[size]; System.arraycopy(data, offset, thedata, 0, size); } It could be argued that this is just patching the real problem; the real problem is that we have bogus length/size for some Unknown record type in Excel.
Works with POI-3.0.2-BETA2. Regards, Yegor