Easyexcel 将指定单元格的文字设置成指定的颜色

java 复制代码
byte[] bytes = EasyExcelUtil.writeByBytes(HCExceptionExcelDTO.class, hcExceptionExcelDTOList, new AbstractColumnWidthStyleStrategy() {
            @Override
            protected void setColumnWidth(WriteSheetHolder writeSheetHolder, List<WriteCellData<?>> cellDataList, Cell cell, Head head, Integer integer, Boolean isHead) {
                boolean needSetWidth = isHead || !CollectionUtils.isEmpty(cellDataList);
                if (needSetWidth) {
                    Sheet sheet = writeSheetHolder.getSheet();
                    sheet.setColumnWidth(0, 8000);
                }
            }

            @Override
            public void afterCellDispose(CellWriteHandlerContext context) {
                if (BooleanUtils.isNotTrue(context.getHead())) {
                    //获取表头信息
                    List<String> headNameList = context.getHeadData().getHeadNameList();
                    String headName = headNameList.get(0);
                    //判断表头信息是否是  1~12月
                    if (!ArrayUtil.containsAny(MonthUtil.getStringMonthArray(), headName)) {
                        return;
                    }
                    // 单元格
                    Cell cell = context.getCell();

                    try {
                        // 获取单元格的值
                        String stringCellValue = cell.getStringCellValue();
                        if (!CheckUtil.isNumber(stringCellValue)) {
                            return;
                        }
                        Number number = NumberUtil.parseNumber(stringCellValue);
                        int i = number.intValue();
                        // 如果大于等于0就不处理,小于零才设置样式
                        if (i >= 0) {
                            return;
                        }
                    } catch (NumberFormatException e) {
                        // 正常情况下,这儿不会解析失败,如果解析失败了, 就不进行样式渲染,直接返回false
                        log.error("参数解释失败 : ", e);
                        return;
                    }

                    Workbook workbook = context.getWriteWorkbookHolder().getWorkbook();
                    // 这里千万记住 想办法能复用的地方把他缓存起来 一个表格最多创建6W个样式 , 不同单元格尽量传同一个 cellStyle
                    CellStyle cellStyle = workbook.createCellStyle();
                    Font writeFont = workbook.createFont();
                    //字体设置成红色
                    writeFont.setColor(IndexedColors.RED.getIndex());
                    cellStyle.setFont(writeFont);
                    cell.setCellStyle(cellStyle);
                    // 由于这里没有指定dataformat 最后展示的数据 格式可能会不太正确
                    // 这里要把 WriteCellData的样式清空, 不然后面还有一个拦截器 FillStyleCellWriteHandler 默认会将 WriteCellStyle 设置到
                    // cell里面去 会导致自己设置的不一样
                    context.getFirstCellData().setWriteCellStyle(null);
                }
            }
        });

EasyExcelUtil:

java 复制代码
/**
     * @param clazz        EasyExcel实体类的class
     * @param dataList     使用默认样式
     * @param writeHandler 组定义样式
     */

    public static byte[] writeByBytes(Class clazz, List dataList, AbstractColumnWidthStyleStrategy writeHandler) {
        byte[] bytes;
        try (ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();) {
            ExcelWriterBuilder write = EasyExcel.write(byteArrayOutputStream, clazz);
            if (CheckUtil.isNotNull(writeHandler)) {
                write.registerWriteHandler(writeHandler);
            }
            write.sheet("Sheet1").doWrite(dataList);

            bytes = byteArrayOutputStream.toByteArray();
        } catch (IOException e) {
            log.error("writeByBytes 报错: ", e);
            throw new RuntimeException("系统异常");
        }
        return bytes;
    }
相关推荐
Hello Dam19 小时前
基于 FastExcel 与消息队列高效生成及导入机构用户数据
java·数据库·spring boot·excel·easyexcel·fastexcel
啊烨疯狂学java10 天前
EasyExcel监听器详解
java·easyexcel
Tulipes11 天前
Excel导出功能:vue2+SpringBoot
java·vue·excel·springboot·easyexcel
S-X-S15 天前
EasyExcel(环境搭建以及常用写入操作)
java·开发语言·easyexcel
一只小小翠21 天前
EasyExcel 模板+公式填充
java·easyexcel
谈谈的心情1 个月前
EasyExcel 动态设置表格的背景颜色和排列
java·easyexcel·导出表格
weixin_446707742 个月前
使用easyexcel导出复杂模板,同时使用bean,map,list填充
java·excel·easyexcel
pingzhuyan2 个月前
EasyExcel: 结合springboot实现表格导出入(单/多sheet), 全字段校验,批次等操作(全)
java·spring boot·servlet·threadlocal·easyexcel
Funky_oaNiu2 个月前
如何使用EasyExcel生成多列表组合填充的复杂Excel示例
java·excel·easyexcel
智汇探长2 个月前
EasyExcel自定义设置Excel表格宽高
java·excel·easyexcel