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


2万+

被折叠的 条评论
为什么被折叠?



