使用POIparsingExcel,但得到exception“无效的标头签名”

我正在尝试使用Apache POI(版本3.6)来parsingExcel .xls文件,但只有exception:

java.io.IOException:无效的头部签名; 读取0x07B1FD124BEDF108,预计0xE11AB1A1E011CFD0

我google了一些结果,基本上说,“该文件实际上不是一个有效的Excel文件(即.csv等),但以后缀.xls结尾”。 但我很确定,我的Excel文件是有效的(在Excel97-2003格式)。

为了保密的考虑,我无法发布我的excel,但是当我使用emacs hexl-mode来查看这个二进制excel文件时,头是:

D0CF 11E0 A1B1 1AE1

我认为这只是POI的预期(E11AB1A1E011CFD0,但是在大端)。 但为什么我得到了例外?

顺便说一句,如果我用命令%!xxd查看相同的excel文件,我有一个不同于eamcs的头:

C390 C38F 11C3 A0C2

整个二进制文件看起来完全不同。 我不明白。

感谢您的帮助!

如果你得到这个exception,那么你的文件真的不是一个真正的.xls文件。 它会改为其他文件,重命名为扩展名为.xls,或文件已损坏。

我build议你尝试在Excel中打开文件,并执行另存为。 这可能会给你一个关于文件types的提示。 如果没有,请执行保存(如Excel .xls),然后您将能够打开该文件

我不知道你的文件是什么(我不认识头),但我可以向你保证,它不是一个有效的.xls文件的OLE2头。

Apache Tika有可能能够确定它是什么样的二进制文件,所以你可以随时使用Tika-App的jar文件

只是一个idee,如果你使用maven确保在资源标记过滤设置为false。 否则,maven往往会在pom.xml的复制阶段损坏xls文件