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