19

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

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

}
4

8 回答 8

53

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

我试图从保存在MS Office 2010中的 Excel 文件中读取数据,但出现此错误。我将文件保存为Excel 2003-7,然后毫无问题地读取它。在Office 10中可能会出现此问题,但在Office 2003-7中可能不会出现此问题。

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

于 2012-09-05T05:01:59.427 回答
21

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

于 2013-10-02T15:46:18.947 回答
11

JXL 库不支持 .csv.xslx格式,这是 Excel-2010 使用的格式。因此,请使用已.xls格式化并受 JXL 库支持的 Excel 97-2003。否则,如果您想使用 excel-2010,请使用 APACHE POI(XSSFWorkbooks) 而不是 JXL。对于使用 .csv 格式,谷歌 CSVReader 库。

于 2015-02-20T15:17:38.367 回答
3

JXL是一个简单(因此有限)的 API。如果它说

无法识别 OLE 流

就是这样。它不太了解您的 Excel XLS 文件。确信错误是合法的。此 API 仅支持*.xls文件;例如,它不支持*.csv*.xlsx文件。显然,将文件重命名为*.xls单独是不够的。它也必须是 Excel 97-2003 格式。

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

这个错误肯定不会再出现了。

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

于 2018-09-16T17:43:01.677 回答
2

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

于 2018-03-15T11:18:52.907 回答
1

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

例如:我们应该将word中的excel表保存为9

于 2012-03-21T06:17:36.407 回答
0

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

于 2014-11-29T18:56:05.657 回答
0

我试图从保存在 MS Office 2010 中的 Excel 文件中读取数据,但出现此错误。我将文件保存为 Excel 2003-7,然后毫无问题地读取它。此问题可能出现在 Office 10 而不是 Office 2003-7

于 2016-05-04T13:19:00.630 回答