alibaba/easyexcel

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

Open

#3,811 opened on 2024年5月27日

GitHub で見る
 (0 comments) (0 reactions) (0 assignees)Java (7,599 forks)batch import
help wanted

Repository metrics

Stars
 (33,728 stars)
PR merge metrics
 (30d に merged PR はありません)

説明

写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);
}

}

コントリビューターガイド