使用模版导出,拦截器afterCellDispose指定cell,最终却对全局cell生效
Author: ryan-sgyCreated Nov 17, 2024Updated Jul 23, 2025
Labelsbug
建议先去看文档
触发场景描述
使用excel模版导出,需要使用拦截器afterCellDispose,根据业务逻辑判定,对指定的cell修改。最终需要修改的样式对全局cell生效。
触发Bug的代码
public class MyCellWriterHandler implements CellWriteHandler {
@Override
public void afterCellDispose(CellWriteHandlerContext context) {
Cell cell = context.getCell();
CellStyle cellStyle = cell.getCellStyle();
if (cellStyle == null) {
cellStyle = cell.getSheet().getWorkbook().createCellStyle(); // 创建新的样式
}
String sheetName = cell.getRow().getSheet().getSheetName();
// 这里的代码已经简化了,就是对指定sheet页的指定单元格上背景色
if (sheetName.equals("基础信息") && cell.getColumnIndex() == 0) {
cellStyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
}
cell.setCellStyle(cellStyle);
}
}这是我的写入代码:
public void write(ExcelWriter writer, W data) {
init();
for (Map.Entry<String, ExcelSheetAdapter<?>> entry : excelSheetMetaDataMap.entrySet()) {
String sheetName = entry.getKey();
WriteSheet writeSheet = EasyExcel.writerSheet(sheetName)
.needHead(true)
.registerWriteHandler(new MyCellWriterHandler())
.build();
writer.write(getData(data, classExcelSheetAdapterMap.getKey(entry.getValue())), writeSheet);
}
writer.finish();
}提示的异常或者没有达到的效果
所有的单元格都被渲染了灰色背景色
Source: alibaba/easyexcel