Skip to content
This repository was archived by the owner on Sep 4, 2025. It is now read-only.
This repository was archived by the owner on Sep 4, 2025. It is now read-only.

使用模版导出,拦截器afterCellDispose指定cell,最终却对全局cell生效 #4050

@ryan-sgy

Description

@ryan-sgy

建议先去看文档

快速开始常见问题

触发场景描述

使用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();
    }

提示的异常或者没有达到的效果

所有的单元格都被渲染了灰色背景色

EXPORT_OFFERING_INSTANCE20241117021055_2471.xlsx

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions