2

我试图使用 Apache POI(版本 3.6)来解析 Excel .xls 文件,但只有异常:

java.io.IOException: Invalid header signature; read 0x07B1FD124BEDF108, expected 0xE11AB1A1E011CFD0

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

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

D0CF 11E0 A1B1 1AE1

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

顺便说一句,如果我使用带有命令 %!xxd 的 vim 来查看相同的 excel 文件,我会得到一个与 eamcs 不同的标题:

C390 C38F 11C3 A0C2

整个二进制文件似乎完全不同。我无法理解。

感谢您的任何帮助!

4

2 回答 2

8

如果您遇到该异常,那么您的文件确实不是真正的 .xls 文件。相反,它将是其他文件,重命名为具有 .xls 扩展名,或者是损坏的文件。

我建议您尝试在 Excel 中打开文件,然后另存为。这可能会给您有关文件类型的提示。如果没有,请另存为 Excel .xls,然后您就可以打开该文件

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

Apache Tika可能能够确定它是哪种二进制文件,因此您可以随时尝试使用 Tika-App jar

于 2012-08-07T15:20:53.683 回答
1

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

于 2013-10-01T11:05:08.273 回答