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

2023-12-22 13:58:58

在这里插入图片描述

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:

/**
     * @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;
    }

文章来源:https://blog.csdn.net/weixin_45817985/article/details/135150511
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。