EasyExcel 自定义表头颜色

 public void export(ObjectDTO dto, HttpServletResponse response) {
        try {
            if (ObjectUtils.isEmpty(dto.getObjNumberList())) {
                throw new BusinessException("编号不允许为空");
            }
            ListResp result = objectService.getListResp(dto);
            if (ObjectUtils.isEmpty(result) || ObjectUtils.isEmpty(result.getList())) {
                return;
            }
            dto.getColumnList().addAll(getRequiredColumnList());
            String encodedFileName = URLEncoder.encode(LocalDate.now().toString() + "-" + dto.getSheetName() + ".xlsx", "UTF-8");
            List<T> writeList = convertMapToList(result.getList(), this.entityClass);
            response.setContentType("application/vnd.ms-excel");
            response.setCharacterEncoding("UTF-8");
            response.setHeader("Access-Control-Expose-Headers", "Content-disposition");
            response.setHeader("Content-disposition", "attachment;filename=" + encodedFileName + "");
            // 自定义策略
            Set<Integer> yellowRowsSet = new HashSet<>(getRequiredColumnIndex());
            ObjCellWriteHandler seedDemandCellWriteHandler = new ObjCellWriteHandler(yellowRowsSet);
            // 导出 Excel 文件
            EasyExcel.write(response.getOutputStream(), this.entityClass)
                    .sheet(dto.getSheetName())
                    .includeColumnFiledNames(dto.getColumnList())
                    .registerWriteHandler(new CustomCellWriteWidthHandle()) /*自适应列宽*/
                    .registerWriteHandler(seedDemandCellWriteHandler)
                    .doWrite(writeList);
        } catch (Exception e) {
            e.printStackTrace();
            log.error("对象导出异常,{}", e);
        }
    }
public class ObjCellWriteHandler  implements CellWriteHandler {

    /**
     * 导出字段索引
     */
    private final Set<Integer> rowIndex;

    public ObjCellWriteHandler(Set<Integer> rowIndex) {
        this.rowIndex = rowIndex;
    }

    @Override
    public void afterCellDispose(CellWriteHandlerContext context) {
        // 判断当前行是否在yellowRowIndex's中
        if (context.getHead() && rowIndex.contains(context.getColumnIndex())) {
            // 设置背景颜色,也可以设置字体等其它元素
            WriteCellData<?> cellData = context.getFirstCellData();
            WriteCellStyle writeCellStyle = cellData.getOrCreateStyle();
            writeCellStyle.setFillForegroundColor(IndexedColors.YELLOW.getIndex());
            writeCellStyle.setFillPatternType(FillPatternType.SOLID_FOREGROUND);
        }
    }
}

 

posted @ 2024-07-01 17:20  八英里  阅读(21)  评论(0编辑  收藏  举报