web-dev-qa-db-ja.com

Excelシートの読み取り中のBiffException

古い形式(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)
12
nowfal

Xls形式(<Excel 2007)は、OLEコンテナー内のバイナリBIFFデータで構成されます。xlsx形式(> = Excel 2007)は、Zipコンテナー内のXMLファイルで構成されます。

Java Excel APIは最初の形式のみを処理するため、OLEコンテナに遭遇しない場合は例外をスローします。

入力をxlsファイルのみに制限するか、両方の形式を処理する別のツールを見つける必要があります。

17
jmcnamara

ワークブックを「Excel97-2003ワークブック」(オプションはMicrosoft Excel 2007に付属)として「名前を付けて保存」すると、ファイルがOLEコンテナに保存されます。

4
Shweta R

私も同じ問題を抱えています。プロジェクトはMavenベースであり、次のディレクティブの副作用はXLSファイルをフィルタリングすることでした。

<resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
        </resource>
</resources>

クリーンな回避策は、サブフォルダー "config"を定義し、この特定のフォルダーでのフィルタリングを許可する一方で、他のサブフォルダーでのフィルタリングは含めないことでした。

3
Olivier ROMAND

私はEclipse/Seleniumで同じ問題に直面していて、「名前を付けて保存」97-2000(.xls)を試みましたが、問題は解決しました。

0
Hiten