最近需要在项目里集成一个excel检错的功能,对excel里的数据校验错误的单元格数据标记背景色,去年年初做大数据量excel操作的时候选用了easyexcel, 研究了一下里面对单元格的样式定义支持不太友好,但是这个工具用起来个人感觉挺爽,所以又去研究了下easyexcel的新功能,看了下支持的功能已经很丰富,已经可以操作自定义样式了,应该是从19年10月份更新的2.1.0版本开始支持,附上easyexcel的git地址:https://github.com/alibaba/easyexcel

我这里是选用的版本是2.1.6,附上语雀参考说明:https://www.yuque.com/easyexcel/doc/write#591ee418:

里面功能挺丰富的,自定义格式转换、自定义样式、图片、插入批注、注解操作等,这里只把这次用的自定义样式做为记录:

<dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.1.6</version>
</dependency>

import com.alibaba.excel.metadata.CellData;
import com.alibaba.excel.metadata.Head;
import com.alibaba.excel.write.handler.CellWriteHandler;
import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
import com.alibaba.excel.write.metadata.holder.WriteTableHolder;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.*;import java.util.List;/*** @Desc 自定义拦截器操作单元格样式* @Author wadu* @Date 2020/3/27* @Version 1.0**/
@Slf4j
public class CustomCellWriteHandle implements CellWriteHandler {int[][] checks = {};public CustomCellWriteHandle() {}public CustomCellWriteHandle(int[][] checks ) {this.checks = checks;}@Overridepublic void beforeCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row, Head head, Integer integer, Integer integer1, Boolean aBoolean) {}@Overridepublic void afterCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Cell cell, Head head, Integer integer, Boolean aBoolean) {}@Overridepublic void afterCellDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, List<CellData> list, Cell cell, Head head, Integer integer, Boolean aBoolean) {
//        log.info("第{}行每{}列!" , cell.getRowIndex(), cell.getColumnIndex());Workbook workbook = writeSheetHolder.getSheet().getWorkbook();CellStyle cellStyle = CellStyleUtil.cellStyle(workbook);//根据校验结果设置单元格文字颜色if(checks[cell.getRowIndex()][cell.getColumnIndex()] == 1){//设置单元格背景色
//            cellStyle.setFillForegroundColor(IndexedColors.RED.getIndex());Font font = workbook.createFont();font.setColor(IndexedColors.RED.getIndex());//设置背景色cellStyle.setFont(font);}cell.setCellStyle(cellStyle);}}
public class CellStyleUtil {/***  通用样式* @param workbook* @return*/public static CellStyle cellStyle(Workbook workbook) {CellStyle cellStyle = workbook.createCellStyle();//居中cellStyle.setAlignment(HorizontalAlignment.LEFT);cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);cellStyle.setFillForegroundColor(IndexedColors.WHITE.getIndex());//设置边框cellStyle.setBorderBottom(BorderStyle.THIN);cellStyle.setBorderLeft(BorderStyle.THIN);cellStyle.setBorderRight(BorderStyle.THIN);cellStyle.setBorderTop(BorderStyle.THIN);return cellStyle;}}
@Testpublic void test2(){String fileName= "D:\\tmp\\"+ System.currentTimeMillis()+".xlsx";int[][] ints = new int[11][11];ints[2][3] = 1;ints[1][2] = 1;ints[3][7] = 1;EasyExcel.write(fileName, CheckDictDTO.class).registerWriteHandler(new CustomCellWriteHandle(ints)).sheet("check1").doWrite(data());}private List data() {List<CheckDictDTO> responses = new ArrayList<>();for (int i = 1; i <= 5; i++) {
//            CheckDictDTO response = CheckDictDTO.builder().word("abc" + i)
//                    .ipa("test1")
//                    .kk("test2").build();
//            responses.add(response);}return responses;}

easyexcel自定义拦截器,实现自定义单元格样式相关推荐

  1. easyExcel实现动态表头设置以及单元格样式设置

    easyexcel实现文件导入导出请看上篇博客:springboot集成easyExcel实现文件导入导出 上篇文章已经知道如何使用easyExcel实现简单的文件导入导出,但是导出的表头和格式都是固 ...

  2. EasyExcel——采用自定义拦截器设置单元格列宽

    文章目录 前言 EasyExcel 版本 自定义拦截器 使用 前言 在EasyExcel的官方文档中,有一个自定义拦截器的配置与使用讲解. 自定义拦截器(上面几点都不符合但是要对单元格进行操作的参照这 ...

  3. flume拦截器及自定义拦截器

    拦截器做什么呢? 时间拦截器 以时间拦截器为例.会在Event的header中添加一个属性进去,属性的key叫做timestamp, value是当前的毫秒值. 问题是写到header然后呢?有啥用呢 ...

  4. EasyExcel:自定义拦截器 ,对特定单元格设定格式

    要求导出的excel按照百分比区间分配不同的颜色,上网找了很多都是对全局进行格式改变,那么如何对特定的某个单元格施加样式呢,参考easyExcel官方文档,这里使用自定义拦截器(文档原地址:https ...

  5. Hadoop生态圈-Flume的组件之自定义拦截器(interceptor)

    Hadoop生态圈-Flume的组件之自定义拦截器(interceptor) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客只是举例了一个自定义拦截器的方法,测试字节传输速 ...

  6. web开发(二十一)之自定义拦截器的使用

    转自博客:http://blog.csdn.net/pkgk2013/article/details/51985817 拦截器的作用 拦截器,在AOP(Aspect-Oriented Programm ...

  7. SpringMVC——自定义拦截器、异常处理以及父子容器配置

    SpringMVC--自定义拦截器.异常处理以及父子容器配置 参考文章: (1)SpringMVC--自定义拦截器.异常处理以及父子容器配置 (2)https://www.cnblogs.com/so ...

  8. Struts2自定义类型转换器、自定义拦截器和用户输入数据的验证

    一.自定义类型转换器 1.编写一个类,继承com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter 2.覆盖掉其中的public Obj ...

  9. WebServices中使用cxf开发日志拦截器以及自定义拦截器

    首先下载一个cxf实例,里面包含cxf的jar包.我下的是apache-cxf-2.5.9 1.为什么要设置拦截器? 为了在webservice请求过程中,能动态操作请求和响应数据, CXF设计了拦截 ...

  10. 自定义拦截器和提供的拦截器

    在访问struts2中某个action之后或者之前,会自动调用的类,就是struts2中的拦截器 一,怎样自定义拦截器 自定义一个拦截器需要三步: 1 ,自定义一个实现Interceptor接口(或者 ...

最新文章

  1. Windows下部署最新版青龙、诺兰、傻妞入门保姆级教程
  2. DJANGO用户名认证一例
  3. 李宏毅深度学习——优化方法
  4. Linux网络流量监控Iftop安装
  5. LeakCanary——直白的展现Android中的内存泄露
  6. 北语19秋计算机应用基础作业答案,北语18秋《计算机应用基础》练习1满分答案...
  7. 对称加密和非对称加密的理解
  8. 字符串与数组之间的相互转化
  9. Hp服务器 iLO3 使用方法
  10. 计算机网络网络层之IP协议(5)——IP子网划分与子网掩码
  11. FP Tree算法原理总结
  12. Elipse中发布一个Maven项目到Tomcat
  13. 在一起计时器_拥有计时器的四个怪兽,一个从杰克身上拿的,一个差点打死赛罗...
  14. Web应用小案例:猜数小游戏
  15. 1型错误和2型错误_沈阳地铁1号线太原街站导向牌出现错误!
  16. J2EE:赛迪网J2EE视频总结
  17. 关于sungard和博彦的笔试
  18. C1模拟试卷的一个算法题
  19. ffmpeg如何实现MP3转码g711a,
  20. 解决[W pthreadpool-cpp.cc:90] Warning: Leaking Caffe2 thread-pool after fork. (function pthreadpool)

热门文章

  1. 深信服设备电源键关机
  2. bp神经网络python源代码_python构建bp神经网络_曲线拟合(一个隐藏层)__2.代码实现...
  3. SEERC 2017 J Cunning Friends
  4. Unity脚本组件勾选框的存在的意义
  5. 公告抄袭我文章的掘金账号:[freesan44](https://juejin.cn/user/1063982986970984) 和公众号:小集
  6. win10无限重启_系统更新后无限重启怎么办?
  7. 关于使用实验室服务器的GPU以及跑上TensorFlow代码
  8. bzoj1189: [HNOI2007]紧急疏散evacuate
  9. 截图及录屏工具ShareX
  10. Java每日算法--罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。