【问题标题】:Use POI to parse Excel but got exception "Invalid Header Signature"使用 POI 解析 Excel 但出现异常“Invalid Header Signature”
【发布时间】:2012-08-07 12:48:35
【问题描述】:

我试图使用 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

整个二进制文件似乎完全不同。看不懂。

感谢您的帮助!

【问题讨论】:

    标签: java excel apache-poi


    【解决方案1】:

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

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

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

    Apache Tika 有可能知道它是什么类型的二进制文件,所以您可以随时尝试使用 Tika-App jar

    【讨论】:

    • 我曾尝试在 Excel 中“将文件另存为 Excel97-2003 格式”,但没有任何改变。无论如何,谢谢你的帮助:)
    • 解决了!我的 excel 文件未加密,但读取为加密文件。谢谢你 Gagravarr!
    【解决方案2】:

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

    【讨论】:

    • 不知道为什么这有 2 票反对...这是给我的...非常感谢@PRAWIN :)
    猜你喜欢
    • 1970-01-01
    • 2015-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多