Spring Boot使用EasyExecl自定义颜色填充指定单元格背景
最近,业务提了一个有意思的需要,要求根据他自定的标识,来给指定单元格填充他指定的颜色,我问他,为何要这般处理?他曰:便于用户识别重要指标值。行吧,那就弄呗。
EasyExecl是基于Apache POI开发的,并没有对颜色进行扩展。如果要新增颜色表,则只能新增XSSFColor对了,另外,目前只支持xlsx格式的自定义颜色。由于不同版本的EasyExecl其提供的方法及API会有差异,在使用的时候一定要注意引用的版本,这里,我用的是EasyExecl 2.2.8。单元格要指定的颜色,在EasyExecl有详细的样例,但是按照逻辑来标识颜色,就只有自己来处理了,这里需要注意两点:
- 需要自己创建一个
CellWriteHandler实现类; Apache POI中的颜色索引都是固定的放在IndexedColors这个枚举,他肯定满足不了我们的颜色需求,我们需要通过RBG去实例化一个XSSFColor的颜色对象。
这里,新建一个CustomCellStyleWriteHandler类并继承CellWriteHandler接口,
1 | public class CustomCellStyleWriteHandler implements CellWriteHandler { |
由于需要按指定的标识来填充单元格,这里,我把单元格索引放在Map中,key的格式为行索引_列索引,然后,并通过构造函数传进来,再在afterCellDispose方法中来判断单元格是否要填充。下面附上CustomCellStyleWriteHandler的完整代码
1 | public class CustomCellStyleWriteHandler implements CellWriteHandler { |
这里需要注意的有一下几点:
CellStyle需要通过Workbook来创建,直接通过cell.getCellStyle()无效。- 需要用
setFillForegroundColor,而不是setFillBackgroundColor,另外,还需要setFillPattern(FillPatternType.SOLID_FOREGROUND),是否无效; - 自定义颜色目前只支持
xlsx,所以,在设置setFillForegroundColor需要把CellStyle对象转为XSSFCellStyle类型。默认是不支持XSSFColor参数的。
最后导出的时候,直接调用registerWriteHandler方法注册即可,示例如下:
1 | Map<String,String> cellFlags=new HashMap<>(); |
最终效果如下:
用EasyExcel来处理Execl 的导入导出确实很方便,用它提供的方法和API就能快速处理日常所需。针对上面的场景,如果大家有更好的方式,还请告知。
Spring Boot使用EasyExecl自定义颜色填充指定单元格背景


