posts - 15, comments - 20, trackbacks - 0, articles - 6
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理
                 剛開始使用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文件。

                  下載POI的源碼后進行單步調試,發現剛開始的時候還是對的,但到ZipFile類后就找不到文件了,到網上查了下,原來是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));
                  }
                  在各版本的Excel中測試,沒有發生異常,問題解決。

          評論

          # re: 使用POI3.5時,為能兼容Excel2007而發生的異常[未登錄]  回復  更多評論   

          2015-10-15 11:46 by 小剛
          讀取PPT怎么辦

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 河东区| 商城县| 贞丰县| 娱乐| 类乌齐县| 陆川县| 元氏县| 赤壁市| 宁强县| 定襄县| 四平市| 葫芦岛市| 武宁县| 庐江县| 依安县| 蒙阴县| 湖口县| 遵化市| 南岸区| 荆门市| 乌审旗| 鹤庆县| 开远市| 浮梁县| 凤山市| 丽江市| 盖州市| 德昌县| 延吉市| 拉孜县| 宽城| 古丈县| 芷江| 池州市| 南溪县| 阿坝县| 昌都县| 大渡口区| 石渠县| 泸西县| 宁陕县|