I use the eventmodel of POI to process XLS files and convert them to XML (I am the creator of http://elev.at). I came across a spreadsheet today that results in the RecordFormatException as per the subject line. The spreadsheet can be found at: http://www.nytimes.com/packages/html/nyregion/20050405_DONOR_SPREADSHEET.xls The stack trace I get is: org.apache.poi.hssf.record.RecordFormatException: Unable to construct record instance org.apache.poi.hssf.record.RecordFactory$ReflectionRecordCreator.create(RecordFactory.java:64) org.apache.poi.hssf.record.RecordFactory.createSingleRecord(RecordFactory.java:263) org.apache.poi.hssf.record.RecordFactoryInputStream.readNextRecord(RecordFactoryInputStream.java:270) org.apache.poi.hssf.record.RecordFactoryInputStream.nextRecord(RecordFactoryInputStream.java:236) org.apache.poi.hssf.eventusermodel.HSSFEventFactory.genericProcessEvents(HSSFEventFactory.java:122) org.apache.poi.hssf.eventusermodel.HSSFEventFactory.processEvents(HSSFEventFactory.java:85) org.apache.poi.hssf.eventusermodel.HSSFEventFactory.processWorkbookEvents(HSSFEventFactory.java:56) xlsconvert$to_xml__7.invoke(xlsconvert.clj:154) liftServlet$fn__29.invoke(liftServlet.clj:47) clojure.lang.MultiFn.invoke(MultiFn.java:165) liftServlet$_doGet__41.invoke(liftServlet.clj:54) liftServlet.doGet(Unknown Source) javax.servlet.http.HttpServlet.service(HttpServlet.java:690) liftServlet.service(Unknown Source) javax.servlet.http.HttpServlet.service(HttpServlet.java:803) liftServlet.service(Unknown Source) root cause org.apache.poi.hssf.record.RecordFormatException: expected 449 but got 49409 org.apache.poi.hssf.record.RecalcIdRecord.<init>(RecalcIdRecord.java:46) sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) java.lang.reflect.Constructor.newInstance(Constructor.java:513) org.apache.poi.hssf.record.RecordFactory$ReflectionRecordCreator.create(RecordFactory.java:56) org.apache.poi.hssf.record.RecordFactory.createSingleRecord(RecordFactory.java:263) org.apache.poi.hssf.record.RecordFactoryInputStream.readNextRecord(RecordFactoryInputStream.java:270) org.apache.poi.hssf.record.RecordFactoryInputStream.nextRecord(RecordFactoryInputStream.java:236) org.apache.poi.hssf.eventusermodel.HSSFEventFactory.genericProcessEvents(HSSFEventFactory.java:122) org.apache.poi.hssf.eventusermodel.HSSFEventFactory.processEvents(HSSFEventFactory.java:85) org.apache.poi.hssf.eventusermodel.HSSFEventFactory.processWorkbookEvents(HSSFEventFactory.java:56) xlsconvert$to_xml__7.invoke(xlsconvert.clj:154) liftServlet$fn__29.invoke(liftServlet.clj:47) clojure.lang.MultiFn.invoke(MultiFn.java:165) liftServlet$_doGet__41.invoke(liftServlet.clj:54) liftServlet.doGet(Unknown Source) javax.servlet.http.HttpServlet.service(HttpServlet.java:690) liftServlet.service(Unknown Source) javax.servlet.http.HttpServlet.service(HttpServlet.java:803) liftServlet.service(Unknown Source)
Fixed in svn r832536 junit added The deserialization code was made more strict during svn r718810 . This check has been removed since Excel(2007) seems to tolerate the incorrect field value.