EasyExcel对列同类项进行单元格合并

<dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.2.6</version><scope>compile</scope>
</dependency>
  1. 返回类型
public class DownDeptResDTO extends BaseModel {@ExcelProperty(value = "序号" ,index = 0)@ApiModelProperty(value = "序号")private Integer number;@ExcelIgnore@ApiModelProperty(value = "部门id")private Long deptId;@ExcelProperty(value = "部门名称" ,index = 1)@ColumnWidth(20)@ApiModelProperty(value = "部门名称")private String deptName;@ExcelIgnore@ApiModelProperty(value = "资源id")private Long resId;@ExcelProperty(value = "资源名称" ,index = 2)@ColumnWidth(40)@ApiModelProperty(value = "资源名称")private String resName;@ExcelProperty(value = "资源类型" ,index = 3)@ColumnWidth(20)@ApiModelProperty(value = "资源类型")private String resTypeStr;@ExcelProperty(value = "资源权限" ,index = 4)@ColumnWidth(10)@ApiModelProperty(value = "资源权限")private String resPowerStr;@ExcelProperty(value = "资源层级" ,index = 5)@ColumnWidth(10)@ApiModelProperty(value = "资源层级")private String resLevelStr;@ExcelIgnore@ApiModelProperty(value = "资源提供部门")private Long resSourceDeptId;@ExcelProperty(value = "归集情况" ,index = 6)@ColumnWidth(10)@ApiModelProperty(value = "归集情况(1.已归集 2.未归集)")private String collectionSituationStr;
}
  1. 实现调用
@ApiOperation(value = "数源单位下资源下载")@GetMapping("/downLoadCollectDeptRes")@ApiImplicitParams(value = {@ApiImplicitParam(name = "collectionSituation", value = "资源是否上线:1-已归集 2-未归集")})public void downLoadCollectDeptRes(HttpServletResponse response, Integer collectionSituation) throws BizException {Assert.isNull(collectionSituation, "归集状态不可为空!");try {SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmm");String date = sdf.format(new Date());// 返回需要导出的数据List<DownDeptResDTO> downCollectDeptRes = rdResourceDirService.getDownCollectDeptRes(collectionSituation);// 根据数据返回部门分类统计的条数信息,即每个部门下的数据条数,注意对应downCollectDeptRes 的排序List<Integer> deptGroup = rdResourceDirService.getDownCollectDeptResGroup(collectionSituation);// 自定义的合并方法MyMergeStrategy myMergeStrategy = new MyMergeStrategy(downCollectDeptRes, deptGroup);String fileName = "资源列表-" + date + ".xlsx";response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8").replace("+", " "));EasyExcel.write(response.getOutputStream(), DownDeptResDTO.class).registerWriteHandler(myMergeStrategy).sheet("资源数据导出").doWrite(downCollectDeptRes);log.info("资源数据导出成功");} catch (Exception e) {log.error("系统数据导出失败" + e.getMessage(), e);}}
  1. 自定义的MyMergeStrategy合并方法
public class MyMergeStrategy extends AbstractMergeStrategy {private List<DownDeptResDTO> downCollectDeptResList;private List<Integer> deptGroupCount;private Sheet sheet;public MyMergeStrategy(List<DownDeptResDTO> downCollectDeptResList, List<Integer> deptGroupCount) {this.downCollectDeptResList = downCollectDeptResList;this.deptGroupCount = deptGroupCount;}// 将该列全部合并成一个单元格,此处并未使用private void mergeCommonColumn(Integer index) {CellRangeAddress cellRangeAddress = new CellRangeAddress(1, downCollectDeptResList.size(), index, index);sheet.addMergedRegionUnsafe(cellRangeAddress);}// 按照分组将各种类别分别合并成一个单元格private void mergeGroupColumn(Integer index) {Integer rowCnt = 1;for (Integer count : deptGroupCount) {CellRangeAddress cellRangeAddress = new CellRangeAddress(rowCnt, rowCnt + count - 1, index, index);// 读取到的同类相只有一个时不合并if (count > 1) {sheet.addMergedRegionUnsafe(cellRangeAddress);}rowCnt += count;}}@Overrideprotected void merge(org.apache.poi.ss.usermodel.Sheet sheet, Cell cell, Head head, Integer integer) {this.sheet = sheet;if (cell.getRowIndex() == 1) {switch (cell.getColumnIndex()) {case 0:// this.mergeCommonColumn(0);break;// 对第二列进行同类项合并,即对部门名称相同的数据进行合并同类相case 1:this.mergeGroupColumn(1);break;case 2:break;case 3:// this.mergeCommonColumn(3);break;default:break;}}}
}
  1. 结果

EasyExcel对列同类项进行单元格合并相关推荐

  1. EasyExcel -- easyexcel的下载和自定义单元格合并

    向导 1. 介绍 2.需求 3.代码 3.1 pom 3.2 Controller 3.3 ExcelUtil代码 3.4 BizMergeStrategy代码 3.5 ExcelDto代码 3.6 ...

  2. JXL 对excle 操作(单元格合并,列宽,格式等)《二》

    一. 数据格式化 在Excel中不涉及复杂的数据类型,能够比较好的处理字串.数字和日期已经能够满足一般的应用. 1. 字串格式化 字符串的格式化涉及到的是字体.粗细.字号等元素,这些功能主要由Writ ...

  3. Layui之表格单元格合并

    前言 layui是一个不错的后台UI框架,最近一直在学习.但是它原来的表格不支持单元格合并.比如项目这一列,有相同的行,我们就需要合并一下. 就像是这样: 一.实现 我们需要在表格实例化之后再对其样式 ...

  4. Layui table表格单元格合并问题

    Layui table表格单元格合并 人丑话不多, 直接上方法: /*** * @param fieldName 要合并列的field属性值* @param index 表格的索引值 从1开始* @d ...

  5. 关于使用EasyExcel进行单元格合并的问题

    关于使用EasyExcel进行单元格合并的问题 1.项目场景: 简介:报销单导出要根据指定的excel模板去自动替换对应,然后重新生成一份新的excel.在给定的excel模板中,有部分字段进行了单元 ...

  6. easyexcel内容追加与单元格合并

    这里的需求是,如果表格不存在,则新建表格,并填入数据,如果表格存在,那么就追加内容,并且支持单元格合并. 内容追加,需要分两种方式插入,第一种就是没有表格,需要生成表头,并且插入内容,第二种就是已经有 ...

  7. 【EasyExcel】EasyExcel列表填充数据时指定单元格合并

    EasyExcel列表填充数据时指定单元格合并 package com.susing.security.handler;import com.alibaba.excel.metadata.CellDa ...

  8. EasyExcel:利用模板进行填充字段,生成公式处理,监听单元格填充后触发事件,相同日期单元格合并

    EasyExcel EasyExcel是一个基于Java的简单.省内存的读写Excel的开源项目.在尽可能节约内存的情况下支持读写百M的Excel. github地址:https://github.c ...

  9. 阿里 easyExcel 动态写入数据,多级表头,单元格合并示例

    excel写入流程 public static void main(String[] args) throws Exception {//标题List<List<String>> ...

最新文章

  1. 人工智能“上位”会让程序员消失吗?
  2. “躲避球”体育游戏《Sparc》登陆Rift和Vive,可以和PS用户一起玩了【附游戏视频】
  3. 趣链 BitXHub跨链平台 (1)技术架构
  4. VTK:Animation用法实战
  5. Spring jdbc Template和Spring 事务管理
  6. python find函数_Python 装饰器填坑指南 | 最常见的报错信息、原因和解决方案
  7. 【canvas】blackboard 黑板
  8. async和await用法
  9. OneProxy中间件生产使用经验视频分享
  10. Linux多线程编程-线程间参数传递
  11. 印象笔记三级目录_如何建立印象笔记的三层目录构架
  12. 模拟器打开开发者模式
  13. 科研过程中Linux相关问题
  14. Manjaro安装配置指南
  15. 思考12. 口说无凭,眼见为实。
  16. 机器学习中的归纳偏置
  17. 小米10Pro手机相机特性分析
  18. 电脑无法登陆百度知道和百度文库解决办法
  19. Navicat Premium 12 安装使用
  20. 目前流行的分形软件一览

热门文章

  1. 河南大学计算机考研群2021,河南大学2021年统考生拟录取名单公示
  2. 图案设计灵感怎么写_服装设计灵感来源怎么写_服装设计理念怎么写
  3. win7笔记本外接显示器html,详解笔记本电脑连接外部显示器的操作流程
  4. 20221218-19英语学习
  5. 943数据结构勘误表
  6. 寻找市场中的Alpha(上):WorldQuant的阿尔法设计理念
  7. SEVERE: Could not contact localhost:8005. Tomcat may not be running.
  8. 关于视频变速播放软件
  9. python计算歌手得分
  10. 灌篮高手怎么找回原来的服务器,灌篮高手手游异常登陆、封号补偿及领取方式介绍...