2011-03-25 60 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),它解決了我的問題。