前言

导出excel,介绍如何使用LoopMergeStrategy实现简单的合并

效果

每隔2行,合并一次

横向合并

横向和纵向合并

实现

导入依赖

 <!-- https://mvnrepository.com/artifact/com.alibaba/easyexcel --><dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.2.7</version></dependency><!-- https://mvnrepository.com/artifact/com.google.guava/guava --><dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>30.1-jre</version></dependency><!-- springboot test启动器 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId></dependency>

单元测试

/*** 合并单元格* @date 01/31/2021 03:11*/
public class Demo {/*** 合并单元格*/@Testpublic void testMyMergeWrite() {String fileName = "/Users/quanlinglong/Downloads/mergeDemo/" + "mymergeWrite" + System.currentTimeMillis() + ".xlsx";System.out.println("fileName = " + fileName);// 每隔2行合并一次,横向合并1列,从第0列开始
//        LoopMergeStrategy loopMergeStrategy = new LoopMergeStrategy(2, 1, 0);// 上面的等价于
//        LoopMergeStrategy loopMergeStrategy = new LoopMergeStrategy(2, 0);// 从第columnIndex列开始,向右合并(columnExtend-1)列
//        LoopMergeStrategy loopMergeStrategy = new LoopMergeStrategy(1, 2, 0);// 合并2行2列LoopMergeStrategy loopMergeStrategy = new LoopMergeStrategy(2, 2, 0);EasyExcel.write(fileName, WriteDemo.DemoData.class).registerWriteHandler(loopMergeStrategy).sheet("aaa").doWrite(data());}private List<List<Object>> data() {List<List<Object>> result = new ArrayList<>();for (int i = 0; i < 3; i++) {result.add(Lists.newArrayList("标题" + i, new Date(), i * 0.1));}return result;}
}

分析LoopMergeStrategy类,它继承AbstractRowWriteHandler,在afterRowDispose方法里对每行做了处理,LoopMergeStrategy的构造函数传参是用来设置合并范围CellRangeAddress,再添加到当前sheet。

public void afterRowDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row, Integer relativeRowIndex, Boolean isHead) {if (!isHead) {if (relativeRowIndex % this.eachRow == 0) {CellRangeAddress cellRangeAddress = new CellRangeAddress(row.getRowNum(), row.getRowNum() + this.eachRow - 1, this.columnIndex, this.columnIndex + this.columnExtend - 1);writeSheetHolder.getSheet().addMergedRegionUnsafe(cellRangeAddress);}}}

CellRangeAddress构造函数有4个参数
参数
0:合并起始行
1:合并终止行
2:合并起始列
3:合并终止列

 CellRangeAddress cellRangeAddress = new CellRangeAddress(row.getRowNum(), row.getRowNum() + this.eachRow - 1, this.columnIndex, this.columnIndex + this.columnExtend - 1);writeSheetHolder.getSheet().addMergedRegionUnsafe(cellRangeAddress);

构造函数传进来的eachRow, columnExtend, columnIndex,都用在这里了

相关链接
easyexcel 动态合并单元格

EasyExcel合并单元格(一)相关推荐

  1. EasyExcel合并单元格策略样例

    EasyExcel合并单元格策略样例 运行示例 处理前: 处理后: 说明 本次使用的是一次性绝对合并策略: List<OnceAbsoluteMergeStrategy> mergeStr ...

  2. easyexcel 合并单元格

    easyexcel 合并单元格 ********************* 相关注解 ContentLoopMerge:标注在字段上 @Target({ElementType.FIELD}) @Ret ...

  3. EasyExcel合并单元格,通过注解方式实现自定义合并策略

    EasyExcel合并单元格,通过注解方式实现自定义合并策略 简介 今天博主探讨如何实现EasyExcel自定义实现单元格合并策略,考虑需要抽象代码.适用于更多的业务场景,提供了两个工具类,参考过很多 ...

  4. EasyExcel合并单元格(同列相同数据合并)

    合并后效果如下: 合并策略代码: public class CustomMergeStrategy extends AbstractMergeStrategy {/*** 分组,每几行合并一次*/pr ...

  5. EasyExcel合并单元格

    文章目录 需求 思考 实现 需求 EasyExcel默认情况下写Excel是一行一行的,单元格不会自动合并,现在需求是合并这几列中相同的数据 思考 开始自己也不想做过多改动代码,经过阅读EasyExc ...

  6. easyExcel合并单元格策略

    合并行: import com.alibaba.excel.metadata.CellData; import com.alibaba.excel.metadata.Head; import com. ...

  7. 阿里开源 Easy-Excel合并单元格数据

    最终效果图 废话不多说,直接上代码 导入阿里云依赖jar包 封装实体类: 开始编写合并单元格: 组装数据的方法: 打完收工...欢迎大家来交流

  8. 解决easyexcel填充图片后合并单元格没有占满的问题

    解决easyexcel合并单元格图片没有拉伸的问题 package com.demo.server.excel.handle;import com.alibaba.excel.enums.CellDa ...

  9. easyExcel导出表格及合并单元格

    easyExcel导出表格及合并单元格 前言 废话不多说,直接上效果图. 效果图 合并之前导出的: 合并之后导出的: 代码的实现主要是合并之后的,为了更好的分清数据之间的关系. 二.代码 目录 < ...

最新文章

  1. c++成员函数可以将this传递给普通函数
  2. 科大星云诗社动态20210509
  3. Django框架搭建
  4. python 石头剪刀布,Python石头剪刀布完整代码
  5. django配置随时执行的脚本,使用运行时的manage环境执行程序
  6. 力扣面试题16.05.阶乘尾数
  7. python怎么矩阵的秩_python – 从numpy或matlab中的满秩非矩形矩阵中获取可逆方阵...
  8. efs解密-Advanced EFS Data Recovery2.1-含注册KEY
  9. php错误日志分析_php错误日志
  10. 《Go语言实战》摘录:7.2 并发模式 - pool
  11. mysql+文章显示_jsp+mysql文章内容分页显示
  12. 冲刺阶段站立会议每天任务6
  13. 【跌倒检测】基于matlab中值滤波+二值化跌倒检测【含Matlab源码 344期】
  14. python模块的分类有哪些_整理了一份清单,常见Python问题的快速解答包
  15. Java 多线程编程
  16. cisco服务器桌面命令行窗口,WLC调试和显示命令
  17. CH3 HTML基础 1
  18. 如何将华为云服务器重做系统并保留其中的指定数据
  19. 信息学奥赛一本通(c++):2024:【例4.10】末两位数
  20. 懂你的心 愿您的笑颜永在阳光下挥洒

热门文章

  1. matlab查找鞍点的位置,找出一个二维数组中的鞍点,即该位置上的元素在该行上最大、在该...
  2. 多方安全计算-隐私信息检索(PIR)
  3. java.net.ConnectException: Connection timed out
  4. 开发过程中的一下异常
  5. 《The Pragmatic Programmer: From Journeymen to Master》
  6. 智能空开让用电更安全、管理更智能——电脑APP远程控制开合闸
  7. 【Linux后台开发系列】Nginx源码从模块开发开始,不再对nginx源码陌生丨源码分析
  8. Windows Update失败 还原更改。请勿关闭计算机
  9. 麒麟linux装软件源,中标麒麟6.5添加yum源安装软件
  10. Classloader和线程