Please take a look at the file sample.xls clcik here
我使用Apache-Poi
来阅读xls
个文件并将其转换为HTML
表格格式。
对于少数文件,POIFSFileSystem(inputStream)无法获取inputStream
。
有一个例外,它是:
java.io.IOException: Unable to read entire header; 36 bytes read; expected 512 bytes
at org.apache.poi.poifs.storage.HeaderBlock.alertShortRead(HeaderBlock.java:226)
at org.apache.poi.poifs.storage.HeaderBlock.readFirst512(HeaderBlock.java:207)
at org.apache.poi.poifs.storage.HeaderBlock.<init>(HeaderBlock.java:104)
at org.apache.poi.poifs.filesystem.POIFSFileSystem.<init>(POIFSFileSystem.java:138)
at openReports.ReadExcelSheet.readExcelFile(ReadExcelSheet.java:24)
at openReports.ReadFolderInMail.getDetailsOfMail(ReadFolderInMail.java:109)
at openReports.ReadFolderInMail.getDetailsOfMail(ReadFolderInMail.java:104)
at openReports.OpenReportsProject.main(OpenReportsProject.java:55)
我注意到,这是因为文件保存为xls
文件,但文件格式不是2003。
我从不同的源获取这些文件,因此我无法手动更改文件扩展名。如果我下载并更改它们,那么问题就解决了。
但我不能每次都这样做,因为它应该作为调度程序运行。
所以有人可以建议解决这个问题。
谢谢。
答案 0 :(得分:1)
您应该从使用HSSF用户模型切换到POI中的SS用户模型。它能够读/写XLS和XLSX文件。我不认为你可以在POIFileSystem中使用它,但你仍然可以在不使用该类的情况下读取excel文件。
答案 1 :(得分:1)
两种可能的解决方案:
.xls
,请尝试org.apache.poi.hssf
package .xlsx
,请尝试org.apache.poi.xssf
package hssf
用于.xls
格式文件,xssf
用于.xlsx