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)
4

4 回答 4

17

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

Java Excel API 只处理第一种格式,因此当它没有遇到 OLE 容器时会引发异常。

您需要将输入限制为仅 xls 文件或找到另一个可以处理这两种格式的工具。

于 2011-03-28T10:58:21.593 回答
4

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

于 2013-01-10T08:02:18.097 回答
3

我只是遇到了同样的麻烦。项目是基于 Maven 的,以下指令的副作用是过滤 XLS 文件。

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

干净的解决方法是定义子文件夹“config”并允许过滤此特定文件夹,同时包括但不过滤其他子文件夹。

于 2013-08-02T08:52:27.183 回答
0

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

于 2017-01-18T03:29:45.883 回答