異常信息:
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 多個參數問題 也就解決了。