web-dev-qa-db-ja.com

JXLエラーの解決方法:jxl.read.biff.BiffException:認識できませんOLE stream

.csvファイルからセルデータを取得しようとしていますが、エラーが発生します:jxl.read.biff.BiffException:認識できませんOLE stream

私はこれを解決する方法を理解していません、このコードはjxl api用であり、そのapiは.csvをサポートしていますか?

参照用のコード:

public void read() throws IOException, BiffException  {

    File inputWorkbook = new File(inputFile);

    try
    {
        w = Workbook.getWorkbook(inputWorkbook.getAbsoluteFile());
        // Get the first sheet
        Sheet sheet = w.getSheet(0);
        // Loop over first 10 column and lines

        for (row = 1; row < sheet.getRows(); row++) 
        {
            ReadExcelLotSizeEntity readExcelLotSizeEntity =new ReadExcelLotSizeEntity();

                cell = sheet.getCell(1,row);
                type= cell.getType();
                if (cell.getType() == CellType.LABEL)
                {

                    symbol=cell.getContents();
                    System.out.println(":::::::::::::::::"+symbol);
                    readExcelLotSizeEntity.setSymbol(symbol);
                }   

                int col=2;
                cell = sheet.getCell(col,row);
                while(!cell.getContents().equals("")||cell.getContents()!=null)
                {
                    System.out.println("||||||||||||||||"+cell.getContents());
                    cell=sheet.getCell(col,row);
                    col++;
                }
                lotSize= new Double(cell.getContents());
                readExcelLotSizeEntity.setLotSize(lotSize);
                readExcelLotSizeEntity.setCreateUserId(1L);
                readExcelLotSizeEntity.setCreateDtTm(new Date());
                readExcelLotSizeHome.persist(readExcelLotSizeEntity);
            }

    } catch (BiffException e) {
        e.printStackTrace();
    }

}
17
user1263633

私も以前この問題に直面していました。このBiffExceptionに対する解決策を求めていたこの投稿と他の多くの投稿をGoogleで読みました。正確な解決策はありませんが、問題を修正したので、おそらくそれもできます。

MS Office 201に保存されたExcelファイルからデータを読み取ろうとしていましたが、このエラーが発生していました。ファイルをExcel 2003-7として保存し、問題なく読み取りました。この問題はOffice 1で発生するが、Office 2003-7では発生しない場合があります。

これがあなたのケースでうまくいくことを願っています。

48

「Excel 97-2003 Workbook」タイプとしてファイルを保存すると、問題が解決しました。

19
user2839342

JXLライブラリは、Excel 2010で使用される.csvおよび.xslx形式をサポートしていません。したがって、.xlsでフォーマットされ、JXLライブラリでサポートされているExcel 97-2003を使用してください。または、Excel-2010を使用する場合は、JXLの代わりにApache POI(XSSFWorkbooks)を使用します。 .csv形式を使用する場合は、GoogleでCSVReaderライブラリを探します。

9
prasad vsv

ExcelファイルタイプをExcel 97-2003ワークシートとして、拡張子タイプをxlsとして保存します。

2
Prashant1992

[〜#〜] jxl [〜#〜] はシンプルな(したがって制限された)APIです。それが言うなら

OLEストリームを認識できません

それが現実さ。 Excel XLSファイルを完全には理解していません。エラーが正当なものであることを確信してください。このAPIは*.xlsファイルのみをサポートします。たとえば、*.csvまたは*.xlsxファイルはサポートしていません。明らかに、ファイル名を*.xlsに変更するだけでは不十分です。 Excel 97-2003形式でもある必要があります。

  • *.csvまたは*.xlsxファイルからすべてのセルをコピーします。
  • MS Excelを開き、コピーしたセルを貼り付けます。
  • ファイルをMS Excel 97-2003(*.xls)ファイルとして保存します。

このエラーは再び表示されることはありません。

一方、他の形式(xlsx、csv)を直接処理する場合は、Apache POIなどの他のツールを探してください。

2
VHS

実際には、異なるバージョンのcsvファイルを使用しています。正確なバージョンで保存してください。

例:ExcelシートをWordで9として保存する必要があります

1
user1251551

MS Office 2010に保存されたExcelファイルからデータを読み取ろうとしましたが、このエラーが発生していました。ファイルをExcel 2003-7として保存し、問題なく読みました。この問題は、Office 2003-7ではなくOffice 10で発生する場合があります

0
Kishor Ambare

ファイルをExcel 97-2003として保存し、コード内のファイル形式をxlsxからxlxに変更します(ファイル名で)

0
Sreekanth