Java 解析excel2003和2007區別和兼容性問題(POI操作)


最近在使用POI對excel操作中發現一些問題,2003和2007的區別還是蠻大的:

2007相關的包:

poi-3.9.jar

poi-examples-3.8.jar

poi-excelant-3.9.jar

poi-ooxml-3.9.jar

poi-ooxml-schemas-3.9.jar

poi-scratchpad-3.9.jar

xmlbeans-2.5.0.jar

 


使用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)); 
        } 
        

問題解決


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM