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

 

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值