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版本即可不需要调整源码。很无奈需要找到源码的问题,但是也有这样的机会可以多看看源码实现,虽然看完还是一脸懵~~~~