如何解决JXL错误:jxl.read.biff.BiffException:无法识别OLE流

时间:2012-03-21 05:27:58

标签: java jexcelapi

我正在尝试从我的.csv文件中获取单元格数据,但它会出错: jxl.read.biff.BiffException:无法识别OLE流

我不明白如何解决这个问题,请给我一些解决方案 这段代码适用于jxl 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();
    }

}

8 个答案:

答案 0 :(得分:46)

我之前也遇到过这个问题。我用谷歌搜索并阅读了这篇帖子和其他许多要求解决这个BiffException的帖子。我没有确切的解决方案但是当我解决了我的问题时,你也可以这样做。

我试图从 MS Office 2010 中保存的Excel文件中读取数据,但我收到此错误。我将文件保存为 Excel 2003-7 ,然后没有任何问题地阅读它。可能是 Office 10 中出现此问题,但 Office 2003-7 中未出现此问题。

我希望这适用于您的情况。

答案 1 :(得分:17)

将文件保存为“Excel 97-2003工作簿”类型解决了我的问题。

答案 2 :(得分:8)

JXL库不支持.csv.xslx格式,这是Excel-2010使用的格式。因此,使用Excel .xls提供的Excel 97-2003,并由JXL库支持。 或者如果你想使用excel-2010,请使用APACHE POI(XSSFWorkbooks)而不是JXL。 要使用.csv格式,请使用google for CSVReader库。

答案 3 :(得分:2)

将Excel文件类型另存为Excel 97-2003工作表和扩展名类型为xls

答案 4 :(得分:1)

实际上您使用的是不同版本的csv文件。请将其保存在确切版本中。

例如:我们应该将excel表单保存为单词9

答案 5 :(得分:0)

将文件另存为Excel 97-2003,并在代码中(文件名中)将文件格式从xlsx更改为xlx

答案 6 :(得分:0)

我试图从MS Office 2010中保存的Excel文件中读取数据,但是我收到了此错误。我将文件保存为Excel 2003-7,然后没有任何问题地阅读它。可能是Office 10中出现此问题但Office 2003-7中未出现此问题

答案 7 :(得分:0)

JXL是一个简单的API(因此受到限制)。如果显示

  

无法识别OLE流

就是这样。它不太了解您的Excel XLS文件。确信该错误是合法的。该API仅支持<table> <tr th:each="cust: ${customer}"> <td th:text="${cust.accno}" /> <td th:text="${cust.reasons}" /> </tr> </table> 文件;它不支持*.xls*.csv文件。显然,仅将文件重命名为*.xlsx是不够的。它也必须是Excel 97-2003格式。

  • 复制*.xls*.csv文件中的所有单元格。
  • 打开MS Excel并粘贴复制的单元格。
  • 将文件另存为MS Excel 97-2003(*.xlsx)文件。

该错误肯定不会再出现。

另一方面,如果要直接处理其他格式(xlsx,csv),请寻找其他工具,例如Apache POI。