EasyExcel多sheet页和表头样式生成

需求背景:需要导出的excel为两个sheet页,并且对表头的样式做特殊设置

1.具体代码

    public byte[] writeGoodsFieldsTemplate(Map<String,List<String>> goodsFieldsHeader,ExportTaskDto exportTaskDto) {
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        ExcelWriter excelWriter = EasyExcel.write(outputStream).build();

        // 必填字段红色
        WriteCellStyle requiredCellStyle = new WriteCellStyle();
        WriteFont headWriteFont1 = new WriteFont();
        headWriteFont1.setColor(IndexedColors.RED.getIndex());
        requiredCellStyle.setWriteFont(headWriteFont1);

        // 非必填字段黑色
        WriteCellStyle notRequiredCellStyle = new WriteCellStyle();
        WriteFont headWriteFont2 = new WriteFont();
        headWriteFont2.setColor(IndexedColors.BLACK.getIndex());
        notRequiredCellStyle.setWriteFont(headWriteFont2);

        // 合并表头
        List<List<String>> mergedHead = new ArrayList<>();
        mergedHead.addAll(convertHead(goodsFieldsHeader.get("required")));
        mergedHead.addAll(convertHead(goodsFieldsHeader.get("notRequired")));

        // 商品资料sheet页
        WriteSheet productInformationSheet = EasyExcel.writerSheet("商品资料").
                head(mergedHead)
                .registerWriteHandler(new GoodsFieldsWriteHandler(requiredCellStyle,notRequiredCellStyle,goodsFieldsHeader.get("required").size()))
                .build();

        excelWriter.write(Collections.emptyList(),productInformationSheet);

        // 字段定义说明Sheet页
        WriteSheet fieldsDescribeSheet = EasyExcel.writerSheet("字段定义说明").head(exportTaskDto.getClazz()).build();
        excelWriter.write(exportTaskDto.getData(),fieldsDescribeSheet);

        excelWriter.finish();
        return outputStream.toByteArray();
    }
class GoodsFieldsWriteHandler extends AbstractVerticalCellStyleStrategy {

    private final WriteCellStyle headWriteCellStyle1;
    private final WriteCellStyle headWriteCellStyle2;
    private final int headerListSize;

    public GoodsFieldsWriteHandler(WriteCellStyle headWriteCellStyle1, WriteCellStyle headWriteCellStyle2, int headerList1Size) {
        this.headWriteCellStyle1 = headWriteCellStyle1;
        this.headWriteCellStyle2 = headWriteCellStyle2;
        this.headerListSize = headerList1Size;
    }

    @Override
    protected WriteCellStyle headCellStyle(CellWriteHandlerContext context) {
        Integer columnIndex = context.getColumnIndex();
        // 当列数小于必填字段的数量时,使用样式1,否则使用样式2
        if (columnIndex < headerListSize) {
            return headWriteCellStyle1;
        } else {
            return headWriteCellStyle2;
        }
    }
}
  1. 生成文件效果
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值