Summary: | FileNotFoundException: no such entry: "Workbook" while reading data from Excel file | ||
---|---|---|---|
Product: | POI | Reporter: | emergency.shower |
Component: | HSSF | Assignee: | POI Developers List <dev> |
Status: | RESOLVED WONTFIX | ||
Severity: | normal | ||
Priority: | P2 | ||
Version: | 3.9-FINAL | ||
Target Milestone: | --- | ||
Hardware: | PC | ||
OS: | All | ||
Attachments: | The file which produces FileNotFound Exception (missing Workbook entry) |
Description
emergency.shower
2012-10-09 13:21:12 UTC
Do you know where the file comes from? Normal excel files use "Workbook" not "Book" as the POIFS entry holding the data Hi, I have the same issue. I have two different excel files from which cannot be read. Both have the "Book" entry and do not have "Workbook". If I open them in Excel 2007 and 'save as => excel 97-2003', then the files successfully open in POI. I have altered my code to try to read 'Book' entry instead of 'Workbook'. Both files produce following exception: org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.apache.poi.hssf.record.RecordFormatException: Unable to construct record instance org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:894) org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:789) javax.servlet.http.HttpServlet.service(HttpServlet.java:647) javax.servlet.http.HttpServlet.service(HttpServlet.java:728) org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393) root cause org.apache.poi.hssf.record.RecordFormatException: Unable to construct record instance org.apache.poi.hssf.record.RecordFactory$ReflectionConstructorRecordCreator.create(RecordFactory.java:65) org.apache.poi.hssf.record.RecordFactory.createSingleRecord(RecordFactory.java:301) org.apache.poi.hssf.record.RecordFactoryInputStream$StreamEncryptionInfo.<init>(RecordFactoryInputStream.java:65) org.apache.poi.hssf.record.RecordFactoryInputStream.<init>(RecordFactoryInputStream.java:182) org.apache.poi.hssf.eventusermodel.HSSFEventFactory.genericProcessEvents(HSSFEventFactory.java:139) org.apache.poi.hssf.eventusermodel.HSSFEventFactory.processEvents(HSSFEventFactory.java:106) pl.veracomp.service.SpreadsheetImportService.process(SpreadsheetImportService.java:369) pl.veracomp.controller.uploadController.onSubmit(uploadController.java:57) org.springframework.web.servlet.mvc.SimpleFormController.processFormSubmission(SimpleFormController.java:272) org.springframework.web.servlet.mvc.AbstractFormController.handleRequestInternal(AbstractFormController.java:268) org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:153) org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:48) org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:923) org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852) org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882) org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:789) javax.servlet.http.HttpServlet.service(HttpServlet.java:647) javax.servlet.http.HttpServlet.service(HttpServlet.java:728) org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393) root cause org.apache.poi.hssf.record.RecordFormatException: Not enough data (0) to read requested (2) bytes org.apache.poi.hssf.record.RecordInputStream.checkRecordPosition(RecordInputStream.java:216) org.apache.poi.hssf.record.RecordInputStream.readShort(RecordInputStream.java:233) org.apache.poi.hssf.record.InterfaceHdrRecord.<init>(InterfaceHdrRecord.java:43) 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$ReflectionConstructorRecordCreator.create(RecordFactory.java:57) org.apache.poi.hssf.record.RecordFactory.createSingleRecord(RecordFactory.java:301) org.apache.poi.hssf.record.RecordFactoryInputStream$StreamEncryptionInfo.<init>(RecordFactoryInputStream.java:65) org.apache.poi.hssf.record.RecordFactoryInputStream.<init>(RecordFactoryInputStream.java:182) org.apache.poi.hssf.eventusermodel.HSSFEventFactory.genericProcessEvents(HSSFEventFactory.java:139) org.apache.poi.hssf.eventusermodel.HSSFEventFactory.processEvents(HSSFEventFactory.java:106) pl.veracomp.service.SpreadsheetImportService.process(SpreadsheetImportService.java:369) pl.veracomp.controller.uploadController.onSubmit(uploadController.java:57) org.springframework.web.servlet.mvc.SimpleFormController.processFormSubmission(SimpleFormController.java:272) org.springframework.web.servlet.mvc.AbstractFormController.handleRequestInternal(AbstractFormController.java:268) org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:153) org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:48) org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:923) org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852) org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882) org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:789) javax.servlet.http.HttpServlet.service(HttpServlet.java:647) javax.servlet.http.HttpServlet.service(HttpServlet.java:728) org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393) Unfortunatelly I cannot attach the files. They contain confidential data, which I cannot remove without correcting the files. Any ideas? How can I help resolve this issue? Created attachment 30202 [details]
The file which produces FileNotFound Exception (missing Workbook entry)
I have attached the file which helps reproduce the issue. It seems that the problem is with Excel 5.0/95 file format. Is this format supported, or do I need to force users to update the file format and resubmit to my app? As listed on the POI site <http://poi.apache.org/spreadsheet/index.html> only Excel 97+ formats are supported, Excel 95 (and before) are between a little and a lot too different, and are not handled by POI, sorry. (POI can give you the parts of the OLE2 document using POIFS, but not parse the records) I think based on the last comment this bug should be resolved WONTFIX, please note that the Text-Extraction functionality (https://poi.apache.org/text-extraction.html) can read some parts of older formats, please try the latest version as the support has improved in the last releases. |