alibaba/easyexcel

初始化ExcelWriterBuilder时指定表头类自动生成表头,自定义的单元格格式不生效

Open

#3,811 opened on May 27, 2024

View on GitHub
 (0 comments) (0 reactions) (0 assignees)Java (7,599 forks)batch import
help wanted

Repository metrics

Stars
 (33,728 stars)
PR merge metrics
 (No merged PRs in 30d)

Description

写Excel,初始化ExcelWriterBuilder的时候指定了使用UserForExcel.class生成表头,自己写了UserCellStyle来指定非表头的单元格样式,在指定了表头类的时候样式不会生效,如果不指定的话,即使用EasyExcel.write(fileName)获取writer,样式就可以生效。怀疑是生成表头时使用了默认格式把我指定的样式覆盖了,因此使用useDefaultStyle(false)关闭了默认样式,结果还是一样。求教一下,这个问题的原因是什么,该怎么解决。

写excel:

try (ExcelWriter excelWriter = EasyExcel.write(fileName,UserForExcel.class) .useDefaultStyle(false)//不使用默认样式 .registerWriteHandler(new UserCellStyle()) .useDefaultStyle(false) .build()) { WriteSheet writeSheet = EasyExcel.writerSheet("Sheet2").build(); excelWriter.write(writeList,writeSheet); }

UserForExcel类表头字段:

@ExcelProperty(value = "Age",index = 0)
private String age;
@ExcelProperty(value = "No. of Customer",index = 2)
private String number;
@ExcelProperty(value = "(%)",index = 3)
private String rate;
@ExcelProperty(value = " ",index = 1)
private String date;

CellWriteHandler指定单元格格式:

public class UserCellStyle implements CellWriteHandler {

@Override
public void afterCellDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, List<WriteCellData<?>> cellDataList, Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) {
    Workbook workbook = writeSheetHolder.getSheet().getWorkbook();
    CellStyle cellStyle = workbook.createCellStyle();
    cellStyle.setBorderBottom(BorderStyle.MEDIUM);
    cellStyle.setBorderTop(BorderStyle.MEDIUM);
    cellStyle.setBorderLeft(BorderStyle.MEDIUM);
    cellStyle.setBorderRight(BorderStyle.MEDIUM);

    int cellColumn = cell.getColumnIndex();
    String cellValue = cell.getStringCellValue();
    if (!isHead) {
        if("YTD".equals(cellValue) || "Since Inception".equals(cellValue)){
            Font font = workbook.createFont();
            font.setFontName("等线");
            cellStyle.setFont(font);
            cellStyle.setFillForegroundColor(IndexedColors.TAN.getIndex());
            cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
        } else if (cellColumn == 1) {
            Font font = workbook.createFont();
            font.setFontName("等线");
            cellStyle.setFont(font);
            cellStyle.setFillForegroundColor(IndexedColors.LIGHT_GREEN.getIndex());
            cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
        }
    }
    cell.setCellStyle(cellStyle);
}

}

Contributor guide