alibaba-easyexcel ExcelGenerateException: 异常问题

异常信息:

Exception in thread "main" com.alibaba.excel.exception.ExcelGenerateException: java.lang.AbstractMethodError: 
Method org/apache/poi/xssf/streaming/SXSSFSheet.addMergedRegionUnsafe(Lorg/apache/poi/ss/util/CellRangeAddress;)I is abstract at com.alibaba.excel.write.ExcelBuilderImpl.addContent(ExcelBuilderImpl.java:67) at com.alibaba.excel.ExcelWriter.write(ExcelWriter.java:161) at com.alibaba.excel.ExcelWriter.write(ExcelWriter.java:146) at com.guoll.modules.utils.easyexcel.write.factory.CustomWriteFactory.write(CustomWriteFactory.java:147) at com.guoll.modules.utils.easyexcel.EasyExcelBase.core(EasyExcelBase.java:65) at com.guoll.modules.utils.easyexcel.EasyExcelBase.main(EasyExcelBase.java:53) Caused by: java.lang.AbstractMethodError: Method org/apache/poi/xssf/streaming/SXSSFSheet.addMergedRegionUnsafe(Lorg/apache/poi/ss/util/CellRangeAddress;)I is abstract at org.apache.poi.xssf.streaming.SXSSFSheet.addMergedRegionUnsafe(SXSSFSheet.java) at com.alibaba.excel.context.WriteContextImpl.addMergedRegionToCurrentSheet(WriteContextImpl.java:188) at com.alibaba.excel.context.WriteContextImpl.initHead(WriteContextImpl.java:173) at com.alibaba.excel.context.WriteContextImpl.initSheet(WriteContextImpl.java:161) at com.alibaba.excel.context.WriteContextImpl.currentSheet(WriteContextImpl.java:131) at com.alibaba.excel.write.ExcelBuilderImpl.addContent(ExcelBuilderImpl.java:56) ... 5 more

产生原因:

 @ExcelProperty value 字段 存在 多个
在这个版本中
BaseRowModel 已经被定义成了失效,所以我并没在 mode 中 继承它。但是这样使用下面的这些注解 是没有问题。意思就是 我只要将 value 只给定一个参数,是没有问题。
@Data
@ContentRowHeight(34)
@HeadRowHeight(34)
public class CaseTempMode{
    @ColumnWidth(13)
    @ExcelProperty(value = {"模块","模块一"}, index = 0)
    private String model1 ;
    @ColumnWidth(13)
    @ExcelProperty(value = {"模块二"}, index = 1)
    private String model2;
    ....
    ....
}    

版本信息:

  该版本是目前我使用时最新的版本,百度上的案例基本上都是 1.x 的,我能遇到这个问题,很有可能与版本有关系。该框架开发团队应该优化过,若要开启复杂表头,可能需要配置一些东西。

 <dependency>
  <groupId>com.alibaba</groupId>
  <artifactId>easyexcel</artifactId>
  <version>2.1.4</version>
</dependency>

解决方案:

 替换 apache.poi 的版本 为该  easyexcel pom.xml 中版本(这句话优点绕,我都这么觉得)

 首先我们在maven 中 找到  该项目的 easyexcel 的pom.xml

 

 

 

 我发现 阿里 用的版本已经是 3.17 的了,最开始项目并不是 用的  easyexcel  而就是用的 apache.poi  在我项目中 该apache.poi 版本 是 3.14  所以就报了这个错。

让我注意到这一点的 是这段异常。

Caused by: java.lang.AbstractMethodError: Method org/apache/poi/xssf/streaming/SXSSFSheet.addMergedRegionUnsafe(Lorg/apache/poi/ss/util/CellRangeAddress;)I is abstract

最后 我将项目的中 apache.poi 版本升级到了 3.17 也就解决了这个问题。如果最开始 选择用 easyexcel 的话,应该不会出现这个问题,毕竟版本会根据阿里的来。

成功后的结果:

  使用 @ExcelProperty value 多个参数问题 也就解决了。

 

 

 

posted @ 2019-12-11 10:49  不朽_张  阅读(28219)  评论(0编辑  收藏  举报