easyexcel 3.1.0+,设置RBG背景颜色!!!
在网上找到的大部分资料,基于3.1.0+版本都不生效,官网也没有设置RBG的示例
由于WriteCellStyle,不支持直接自定义RBG,只有固定的颜色,只能通过拦截器实现,可以继承AbstractCellStyleStrategy
重写setContentCellStyle
方法
关键代码
@Override
protected void setContentCellStyle(CellWriteHandlerContext context) {
// 获取和创建CellStyle
WriteCellData<?> cellData = context.getFirstCellData();
CellStyle originCellStyle = cellData.getOriginCellStyle();
if (Objects.isNull(originCellStyle)) {
originCellStyle = context.getWriteWorkbookHolder().getWorkbook().createCellStyle();
}
// 设置背景颜色
((XSSFCellStyle) originCellStyle).setFillForegroundColor(new XSSFColor(new java.awt.Color(198, 224, 180), new DefaultIndexedColorMap()));
originCellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
// 重点!!! 由于在FillStyleCellWriteHandler,会把OriginCellStyle和WriteCellStyle合并,会已WriteCellStyle样式为主,所有必须把WriteCellStyle设置的背景色清空
// 具体合并规则请看WriteWorkbookHolder.createCellStyle方法
WriteCellStyle writeCellStyle = cellData.getWriteCellStyle();
writeCellStyle.setFillForegroundColor(null);
// 重点!!! 必须设置OriginCellStyle
cellData.setOriginCellStyle(originCellStyle);
}
结论
设置颜色生效,但是单元格没样式,可以在WriteCellStyle里面重新设置样式就行!!!