EasyExcel设置行中单个单元格的样式

1. 前言

在近期的工作中遇到一个导出Excel的需求:
用户通过Excel导入信息,校验用户导入的信息是否合法;如果导入的信息不合法,则保存失败;并且需要精确到行的字段设置标识,然后再将用户导入的信息以文件的方式返回给用户。如果导入的信息合法则保存成功内容存储到库中。
其实并不难看出来,如果导入的数据有误,那么就转换成有样式导出了。
导出Excel文件的技术使用的是阿里巴巴提供的一个EasyExcel工具,有关easyExcel相关的单个单元格样式设置的资料比较少,自己也是查阅了大量的资料,最后也是在尝试的过程中实现了功能,借此记录一下。

2.最终的效果图

在这里插入图片描述

3.实现

EasyExcel在写出文件的时候是以行为单位对外写出的(详细来说先是第i行,然后是这行中的第i个单元格依次写出),EasyExcel在写出的时候提供了一个写出时的拦截器CellWriteHandler接口,拦截处理单元格创建,我们可以在这个拦截器中对行中的每个或者单个指定的单元格设置样式。

第一步:我们需要写一个类来实现CellWriteHandler接口

CellColorSheetWriteHandler.java

package com.scholartang.util.excel;

import com.alibaba.excel.metadata.CellData;
import com.alibaba.excel.metadata.Head;
import com.alibaba.excel.util.StyleUtil;
import com.alibaba.excel.write.handler.CellWriteHandler;
import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
import com.alibaba.excel.write.metadata.holder.WriteTableHolder;
import com.alibaba.excel.write.metadata.style.WriteCellStyle;
import com.alibaba.excel.write.metadata.style.WriteFont;
import org.apache.poi.ss.usermodel.*;
import java.util.HashMap;
import java.util.List;

/**
 * @Author ScholarTang
 * @Date 2020/8/14 5:10 下午
 * @Desc 拦截处理单元格创建
 */
public class CellColorSheetWriteHandler implements CellWriteHandler {
   
   
    /**
     * map
     * key:第i行
     * value:第i行中单元格索引集合
     */
    private HashMap<Integer,List<Integer>> map;
    
    /**
     * 颜色
     */
    private Short colorIndex;

    /**
     * 有参构造
     */
    public CellColorSheetWriteHandler(HashMap<Integer, List<Integer>> map, Short colorIndex) {
   
   
        this.map = map;
        this.colorIndex = colorIndex;
    }

    /**
     * 无参构造
     */
    public CellColorSheetWriteHandler() {
   
   

    }

    /**
     * 在创建单元格之前调用
     */
    @Override
    public void beforeCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row, Head head, Integer columnIndex, Integer relativeRowIndex, Boolean isHead) {
   
   
    }

    /**
     * 在单元格创建后调用
     */
    @Override
    public void afterCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) {
   
   
    }

    /**
     * 在单元上的所有操作完成后调用
     */
    @Override
   
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值