poi導出兼容xls和xlsx時報錯XmlValueDisconnectedException

poi版本:3.9

xlsx: 在導出多sheet頁時、即使用cloneSheet方法在設置sheetName就會報錯:

org.apache.xmlbeans.impl.values.XmlValueDisconnectedException

代碼:

            // 寫樣式信息
            wb.cloneSheet(0);
            wb.setSheetName(2, "<style>");

由於我們項目中直接更換poi版本需要代碼改動量過大、所以只能找源碼處理。於是翻了官方文檔、各種資料後,解決方案如下:

這段代碼是XSSFWorkBook中cloneSheet()方法   左邊是3.9版本的源碼  右側是修改後的

至於替換源碼

從 poi官網 下載對應版本的源碼 根據上圖路徑找到XSSFWorkBook

在idea裏面項目中新建一個包和路徑同名、把XSSFWorkBook複製過去、然後修改代碼保存   然後clean  install 即可以得到編譯好的class文件  然後去jar包裏面替換掉相應的class文件

----------------------------------------------------------------------------------------

以上是上週遇到的一個問題,但是昨天又遇到這個神奇的異常  XmlValueDisconnectedException

是在sheet.createRow()時出現的問題

解決方案:

XSSFSheet.createRow()方法中有一段代碼如下:

if(prev!= null){
    CTRow ctRow = prev.getCTRow();
   / ctRow.set(CTRow.Factory.newInstance()); * / <---將被刪除
   Iterator it = prev.iterator();
   while(it.hasNext()){
      it.next();
      it.remove();
   }

}

刪除註釋掉的代碼即可

 

以上問題都是從此網站找到的解決方案

如果大家不是必須使用3.9版本的poi  儘量更新poi版本即可不需要調整源碼。很無奈需要找到源碼的問題,但是也有這樣的機會可以多看看源碼實現,雖然看完還是一臉懵~~~~

 

 

 

 

 

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