最近在做需求的时候用到了EasyExcel使用的版本是2.2.3 ,对照着 EasyExcel v2.1.6单元格样式设置 这篇博客实现了我想要的功能,并且测试都没问题,完美实现了我想要的效果,
在后续的自定义合并策略中 参考的是 EasyExcel -- easyexcel的下载和自定义单元格合并 这篇博客,也满足了我的需求。
但是在两个需求结合起来测试的时候发现了问题,由于实现自定义合并策略,所以我把版本降低到了2.1.6,这个时候我发现设置自定义样式的时候 setContentCellStyle 这个方法不执行了,这就导致我只能自定义表头样式,没办法实现自定义内容样式。
在后续的测试过程中,我发现只要把版本升级到2.2.3就可以执行 setContentCellStyle,但是这个时候有个问题,自定义合并策略实现方式中关键点在于要继承AbstractMergeStrategy 然后重写其中的 merge方法,但是把版本升级到2.2.3以后这个抽象类就没了,导致我引入不了这个类
在网上找了很久,试了一个把版本降低成2.1.6,然后实现CellWriteHandler接口 然后重写其中的afterCellCreate等方法来实现自定义样式,后来发现这样有BUG,不能实现我想要的效果
BUG具体如下:
这个时候Head对象中的fieldName是空的,不能像上面博客中那样取到filedName(下图所示),后续测试中发现这个filedName是2.2.3才有值,2.1.6是没有的,这不是写法的问题,是版本的问题
这样我就没办法判断具体导出的哪一列来自定义对应的样式了
解决方案:
在经过三四个小时的苦苦挣扎后,最后突然想到了一个方案。就是把2.1.6的AbstractMergeStrategy这个抽象类复制到2.2.3版本中,按照上面两个博客的写法去写,只是在自定义合并策略中引入的AbstractMergeStrategy类是从2.1.6复制来的,经过初步测试,发现是我想要实现的效果,为了让后来的人少走弯路,特此写下博客,希望可以帮到大家