读取Excel表格时出现BiffException异常

12

我有一个用于读取旧格式(97-2003)Excel表格的代码。我对数据进行了一些更改,最终得到了一个2007格式的Excel表格。当我使用这个xlsx表格代替xls表格时,我遇到了以下问题:

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)

1
似乎jxl仍在使用旧的xls读取器来尝试读取您的新xlsx文件 - 为什么不直接从MS Excel中“另存为”,以将其保存为较旧的97-2003格式? - Mark Baker
5个回答

17

xls格式(< Excel 2007)由OLE容器中的二进制BIFF数据组成。xlsx格式(≥Excel 2007)由zip容器中的XML文件组成。

Java Excel API只处理第一种格式,所以当它没有遇到OLE容器时会抛出异常。

您需要仅限于xls文件或找到另一个可处理两种格式的工具。


嗯...那很有见地....你能给我一个处理两种格式的API的想法吗? - nowfal
1
Apache POI 可以在 Java 中处理这两种文件类型:http://poi.apache.org/spreadsheet/index.html - jmcnamara

4
将工作簿保存为“Excel 97-2003工作簿”(该选项适用于Microsoft Excel 2007),它将您的文件保存在OLE容器中。

3

我刚遇到了同样的问题。项目基于Maven,并且按照指令的副作用会过滤XLS文件。

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

一种简洁的解决方案是定义"config"子文件夹并允许对该特定文件夹进行筛选,同时包含但不对其他子文件夹进行筛选。


1
我曾经遇到过同样的问题。我使用Maven启动SoapUI并使用一些Excel工作簿。当你用Maven过滤这些Excel文件时,它会在内部对它们进行更改,使它们无法使用。因此,解决方案就是不要对它们进行过滤。 - CHiRo79

0

我在Eclipse/Selenium中遇到了同样的问题,尝试使用“另存为”97-2000 (.xls)格式,解决了我的问题。


0

我也曾经遇到过同样的问题。

这是因为你使用的Excel文件扩展名为(.xlsx),而该格式无法被你所使用的加载工具正确读取。

因此,建议你使用旧版本的Excel文件扩展名(.xls),因为这些可能与你正在使用的工具兼容。

这样,工具就能够成功地理解和读取了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接