古い形式(97-2003)のExcelシートから読み取るコードがあります。データにいくつか変更を加えて、2007形式のExcelシートに仕上げました。 xlsシートの代わりにこのxlsxシートを使用すると、次のようになります。
jxl.read.biff.BiffException: Unable to recognize OLE stream
at jxl.read.biff.CompoundFile.<init>(CompoundFile.Java:116)
at jxl.read.biff.File.<init>(File.Java:127)
at jxl.Workbook.getWorkbook(Workbook.Java:268)
at readexcel.ReadExcel.readContent(ReadExcel.Java:50)
at readexcel.ReadExcel.init(ReadExcel.Java:25)
at readexcel.ReadExcel.main(ReadExcel.Java:183)
Xls形式(<Excel 2007)は、OLEコンテナー内のバイナリBIFFデータで構成されます。xlsx形式(> = Excel 2007)は、Zipコンテナー内のXMLファイルで構成されます。
Java Excel APIは最初の形式のみを処理するため、OLEコンテナに遭遇しない場合は例外をスローします。
入力をxlsファイルのみに制限するか、両方の形式を処理する別のツールを見つける必要があります。
ワークブックを「Excel97-2003ワークブック」(オプションはMicrosoft Excel 2007に付属)として「名前を付けて保存」すると、ファイルがOLEコンテナに保存されます。
私も同じ問題を抱えています。プロジェクトはMavenベースであり、次のディレクティブの副作用はXLSファイルをフィルタリングすることでした。
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
クリーンな回避策は、サブフォルダー "config"を定義し、この特定のフォルダーでのフィルタリングを許可する一方で、他のサブフォルダーでのフィルタリングは含めないことでした。
私はEclipse/Seleniumで同じ問題に直面していて、「名前を付けて保存」97-2000(.xls)を試みましたが、問題は解決しました。