關於POI解析Excel文件(03和07版本不同)的問題


問題描述:在使用poi包進行excel解析時,發現對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)。

原因分析:XSSF不能讀取Excel2003以前(包括2003)的版本,如果遇到2007版本的Excel文件就需要在讀取前判斷文件是2003前的版本還是2007的版本,然后對應調用HSSF或XSSF來讀取。

解決方式:目前只能通過后綴名來判斷文件版本,代碼如下:(如果有高手知道別的解決方法,請告知,謝謝!)

1 public static boolean isExcel2003(String filePath)  
2 {  
3   
4     return filePath.matches("^.+\\.(?i)(xls)$");  
5 
6 }  

獲得版本號之后,根據版本號的不同創建不同的對象,代碼如下:

 1 /** 根據版本選擇創建Workbook的方式 */  
 2   
 3 Workbook wb = null;  
 4   
 5 if (isExcel2003)  
 6 {  
 7    wb = new HSSFWorkbook(inputStream);  
 8 }  
 9 else  
10 {  
11    wb = new XSSFWorkbook(inputStream);  
12 }  

 


免責聲明!

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



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