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-Appjarで試すことができます

于 2012-08-07T15:20:53.683 に答える
1

Mavenを使用している場合は、リソースタグのフィルタリングがfalseに設定されていることを確認してください。そうしないと、mavenはpom.xmlのコピーフェーズでxlsファイルを破損する傾向があります

于 2013-10-01T11:05:08.273 に答える