In fact the xls-File (opened with 7-zip) contained the following entries: [5]SummaryInformation Book [1]CompObj [5]DocumentSummaryInformation The Excel version read from CompObj was Microsoft Office Excel 2003 Excel.Sheet.8 java.lang.RuntimeException: java.io.FileNotFoundException: no such entry: "Workbook" at org.apache.poi.hssf.extractor.EventBasedExcelExtractor.getText(EventBasedExcelExtractor.java:141) at ... Caused by: java.io.FileNotFoundException: no such entry: "Workbook" at org.apache.poi.poifs.filesystem.DirectoryNode.getEntry(DirectoryNode.java:375) at org.apache.poi.poifs.filesystem.DirectoryNode.createDocumentInputStream(DirectoryNode.java:177) at org.apache.poi.hssf.eventusermodel.HSSFEventFactory.processWorkbookEvents(HSSFEventFactory.java:63) at org.apache.poi.hssf.extractor.EventBasedExcelExtractor.triggerExtraction(EventBasedExcelExtractor.java:157) at org.apache.poi.hssf.extractor.EventBasedExcelExtractor.getText(EventBasedExcelExtractor.java:134) ... 6 more
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.