无法使用Apache-Poi API读取特定类型的Excel文件

时间:2011-11-19 09:16:24

标签: java apache-poi

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。 我从不同的源获取这些文件,因此我无法手动更改文件扩展名。如果我下载并更改它们,那么问题就解决了。 但我不能每次都这样做,因为它应该作为调度程序运行。

所以有人可以建议解决这个问题。

谢谢。

2 个答案:

答案 0 :(得分:1)

您应该从使用HSSF用户模型切换到POI中的SS用户模型。它能够读/写XLS和XLSX文件。我不认为你可以在POIFileSystem中使用它,但你仍然可以在不使用该类的情况下读取excel文件。

答案 1 :(得分:1)

两种可能的解决方案:

  • 如果您的Excel文件为.xls,请尝试org.apache.poi.hssf package
  • 如果您的Excel文件为.xlsx,请尝试org.apache.poi.xssf package

hssf用于.xls格式文件,xssf用于.xlsx