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版本即可不需要調整源碼。很無奈需要找到源碼的問題,但是也有這樣的機會可以多看看源碼實現,雖然看完還是一臉懵~~~~