Bug 53985 - FileNotFoundException: no such entry: "Workbook" while reading data from Excel file
Summary: FileNotFoundException: no such entry: "Workbook" while reading data from Exce...
Status: RESOLVED WONTFIX
Alias: None
Product: POI
Classification: Unclassified
Component: HSSF (show other bugs)
Version: 3.9-FINAL
Hardware: PC All
: P2 normal with 1 vote (vote)
Target Milestone: ---
Assignee: POI Developers List
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2012-10-09 13:21 UTC by emergency.shower
Modified: 2015-06-01 21:17 UTC (History)
0 users



Attachments
The file which produces FileNotFound Exception (missing Workbook entry) (11.50 KB, application/vnd.ms-excel)
2013-04-16 11:02 UTC, Szymon Wilkołazki
Details

Note You need to log in before you can comment on or make changes to this bug.
Description emergency.shower 2012-10-09 13:21:12 UTC
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
Comment 1 Nick Burch 2012-10-09 13:23:32 UTC
Do you know where the file comes from? Normal excel files use "Workbook" not "Book" as the POIFS entry holding the data
Comment 2 Szymon Wilkołazki 2013-04-16 10:18:48 UTC
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?
Comment 3 Szymon Wilkołazki 2013-04-16 11:02:35 UTC
Created attachment 30202 [details]
The file which produces FileNotFound Exception (missing Workbook entry)
Comment 4 Szymon Wilkołazki 2013-04-16 11:04:18 UTC
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?
Comment 5 Nick Burch 2013-05-26 17:38:28 UTC
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)
Comment 6 Dominik Stadler 2015-06-01 21:17:18 UTC
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.