2011-03-25 104 views
12

我有一个代码可以从旧格式(97-2003)的Excel表中读取。我对数据进行了一些更改,最终形成了2007年的Excel格式表格。当我用这个XLSX片代替XLS片的,我正在此:BiffException在阅读excel表时

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格式 – 2011-03-25 12:05:51

回答

17

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

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

您只需要将输入限制为xls文件或找到处理两种格式的其他工具。

+0

那么......那个是非常有见识的....你能给我一个关于处理格式 – nowfal 2011-03-31 09:34:24

+1

的任何API的想法Apache POI处理Java中的两种文件类型:http://poi.apache.org/spreadsheet/index.html – jmcnamara 2011-03-31 15:59:16

4

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

3

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

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

清洁的解决方法的解决方案是限定子文件夹“配置”,并允许在此特定的文件夹过滤,同时包括但其他的子文件夹不滤波。

+1

我有同样的问题。我正在使用maven通过一些Excel工作簿来启动SoapUI。当你用maven过滤这些Excel文件时,它会在内部改变它们,使它们不可用。所以解决方案不是过滤它们。 – CHiRo79 2014-12-16 14:14:21

0

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