使用POI解析Excel但得到异常“无效的标题签名”

时间:2012-08-07 12:48:36

标签: java excel apache-poi

我试图使用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,但是在big-endian中)。但为什么我得到例外?

BTW,如果我使用命令%!xxd的vim来查看同一个excel文件,我得到的标题与eamcs不同:

C390 C38F 11C3 A0C2

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

感谢您的任何帮助!

2 个答案:

答案 0 :(得分:8)

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

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

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

Apache Tika可能能够计算出它是什么样的二进制文件,因此您可以随时尝试使用Tika-App jar

答案 1 :(得分:0)

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