[alibaba/easyexcel]单元格设置颜色不生效

2024-05-16 684 views
9

建议先去看文档 快速开始常见问题 异常代码

public class AppStarter {

    public static void main(String[] args) {
        SparkUserExcelRequest request = new SparkUserExcelRequest();
        request.setNickname("test");
        String writePathName = "/Users/dolphin/source/dabai/microservice/soa-zhuolian-org/";
        String fullPathName = writePathName  + "a.xlsx";
        if (!new File(writePathName).exists()) {
            new File(writePathName).mkdirs();
        }
        ExcelWriterBuilder writerBuilder = EasyExcel.write(fullPathName, SparkUserExcelRequest.class);
        writerBuilder.excelType(ExcelTypeEnum.XLSX);
        writerBuilder.registerWriteHandler(new CellStyleWriteHandler());
        ExcelWriter writer = writerBuilder.build();
        WriteSheet writeSheet = new WriteSheet();
        writeSheet.setSheetName("mark");
        writer.write(Arrays.asList(request), writeSheet);
        writer.finish();
    }
}
  public class CellStyleWriteHandler extends AbstractCellStyleStrategy {

    @Override
    protected void setContentCellStyle(Cell cell, Head head, Integer relativeRowIndex) {
        Workbook workbook = cell.getSheet().getWorkbook();
        CellStyle cellStyle = workbook.createCellStyle();
        cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
        cellStyle.setFillForegroundColor(IndexedColors.LIGHT_BLUE.getIndex());
        cell.setCellStyle(cellStyle);
    }
}
@Data
@ExcelIgnoreUnannotated
public class SparkUserExcelRequest implements Serializable {

    @ExcelProperty("姓名")
    private String nickname;
}

异常提示

https://stackoverflow.com/questions/71111037/why-the-easy-excel-set-cell-style-did-not-work

回答

4

初步推测3.0.3版本存在这个问题

2

我也遇到了相同的问题,在 EasyExcel 的文档 语雀文档地址 【快速开始】>【写excel】>【自定义样式】> 【代码】的示例中有这么一行注释(倒数第三行)

if (BooleanUtils.isNotTrue(context.getHead())) {
    Cell cell = context.getCell();
    // 拿到poi的workbook
    Workbook workbook = context.getWriteWorkbookHolder().getWorkbook();
    // 这里千万记住 想办法能复用的地方把他缓存起来 一个表格最多创建6W个样式
    // 不同单元格尽量传同一个 cellStyle
    CellStyle cellStyle = workbook.createCellStyle();
    cellStyle.setFillForegroundColor(IndexedColors.RED.getIndex());
    // 这里需要指定 FillPatternType 为FillPatternType.SOLID_FOREGROUND
    cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
    cell.setCellStyle(cellStyle);

    // 由于这里没有指定dataformat 最后展示的数据 格式可能会不太正确

    // 这里要把 WriteCellData的样式清空, 不然后面还有一个拦截器 FillStyleCellWriteHandler 默认会将 WriteCellStyle 设置到
    // cell里面去 会导致自己设置的不一样
    context.getFirstCellData().setWriteCellStyle(null);
}

我添加了代码context.getFirstCellData().setWriteCellStyle(null);之后解决了我的问题。