异常信息:
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 abstractat 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 abstractat 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 classCaseTempMode{
@ColumnWidth(13)
@ExcelProperty(value= {"模块","模块一"}, index = 0)privateString model1 ;
@ColumnWidth(13)
@ExcelProperty(value= {"模块二"}, index = 1)privateString model2;
....
....
}
版本信息:
该版本是目前我使用时最新的版本,百度上的案例基本上都是 1.x 的,我能遇到这个问题,很有可能与版本有关系。该框架开发团队应该优化过,若要开启复杂表头,可能需要配置一些东西。
com.alibaba
easyexcel
2.1.4
解决方案:
替换 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 多个参数问题 也就解决了。