java Excel中的數據兼容 2003及2007

java解析Excel(兼容2003及2007)


剛開始從網上找了個例子使用new HSSFWorkbook(new FileInputStream(excelFile))來讀取Workbook,
對Excel2003以前(包括2003)的版本沒有問題,但讀取Excel2007時發生如下異常:
org.apache.poi.poifs.filesystem.OfficeXmlFileException: The supplied data appears to be in the Office 2007+ XML. You are calling the part of POI that deals with OLE2 Office Documents. You need to call a different part of POI to process this data (eg XSSF instead of HSSF)

        該錯誤意思是說,文件中的數據是用Office2007+XML保存的,而現在卻調用OLE2 Office文檔處理,應該使用POI不同的部分來處理這些數據,比如使用XSSF來代替HSSF。

        於是按提示使用XSSF代替HSSF,用new XSSFWorkbook(excelFile)來讀取Workbook,對Excel2007沒有問題了,可是在讀取Excel2003以前(包括2003)的版本時卻發生瞭如下新異常:
org.apache.poi.openxml4j.exceptions.InvalidOperationException: Can't open the specified file: '*.xls'
        該錯誤是說,操作無效,不能打開指定的xls文件。

        到網上查了下,原來是XSSF不能讀取Excel2003以前(包括2003)的版本,這樣的話,就需要在讀取前判斷文件是2003前的版本還是2007的版本,然後對應調用HSSF或XSSF來讀取。
        這種做法比較麻煩,看了下API,發現XSSF和HSSF雖然在不同的包裏,但卻引用了同一接口Workbook,於是想到了這樣的讀取方法:
        Workbook book = null;
        try {
            book = new XSSFWorkbook(excelFile);
        } catch (Exception ex) {
            book = new HSSFWorkbook(new FileInputStream(excelFile));
        }
       
本認爲程序應該沒錯了吧,但一運行還是報錯(當時用得是poi3.6的zip包):

java.lang.ClassNotFoundException: org.openxmlformats.schemas.spreadsheetml.x2006.main.CTSheet

網上搜了下,是少poi-ooxml-schemas-xxx.jar包,根據提示在Apache網站上(http://labs.renren.com/apache-mirror//poi/release/bin/)下載了3.7的zip文件(poi-bin-3.7-20101029.zip),解壓後將poi相關的包和xml相關的包都放上去。

在各版本的Excel中測試,沒有發生異常,問題解決。

下面是POI的API網址,不過是英文的:
POI API Documentation

http://poi.apache.org/apidocs/index.html


轉自:http://feitian0127.iteye.com/blog/1152524

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章