EasyExcel对列同类项进行单元格合并
EasyExcel对列同类项进行单元格合并
<dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.2.6</version><scope>compile</scope>
</dependency>
- 返回类型
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;
}
- 实现调用
@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);}}
- 自定义的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;}}}
}
- 结果
EasyExcel对列同类项进行单元格合并相关推荐
- EasyExcel -- easyexcel的下载和自定义单元格合并
向导 1. 介绍 2.需求 3.代码 3.1 pom 3.2 Controller 3.3 ExcelUtil代码 3.4 BizMergeStrategy代码 3.5 ExcelDto代码 3.6 ...
- JXL 对excle 操作(单元格合并,列宽,格式等)《二》
一. 数据格式化 在Excel中不涉及复杂的数据类型,能够比较好的处理字串.数字和日期已经能够满足一般的应用. 1. 字串格式化 字符串的格式化涉及到的是字体.粗细.字号等元素,这些功能主要由Writ ...
- Layui之表格单元格合并
前言 layui是一个不错的后台UI框架,最近一直在学习.但是它原来的表格不支持单元格合并.比如项目这一列,有相同的行,我们就需要合并一下. 就像是这样: 一.实现 我们需要在表格实例化之后再对其样式 ...
- Layui table表格单元格合并问题
Layui table表格单元格合并 人丑话不多, 直接上方法: /*** * @param fieldName 要合并列的field属性值* @param index 表格的索引值 从1开始* @d ...
- 关于使用EasyExcel进行单元格合并的问题
关于使用EasyExcel进行单元格合并的问题 1.项目场景: 简介:报销单导出要根据指定的excel模板去自动替换对应,然后重新生成一份新的excel.在给定的excel模板中,有部分字段进行了单元 ...
- easyexcel内容追加与单元格合并
这里的需求是,如果表格不存在,则新建表格,并填入数据,如果表格存在,那么就追加内容,并且支持单元格合并. 内容追加,需要分两种方式插入,第一种就是没有表格,需要生成表头,并且插入内容,第二种就是已经有 ...
- 【EasyExcel】EasyExcel列表填充数据时指定单元格合并
EasyExcel列表填充数据时指定单元格合并 package com.susing.security.handler;import com.alibaba.excel.metadata.CellDa ...
- EasyExcel:利用模板进行填充字段,生成公式处理,监听单元格填充后触发事件,相同日期单元格合并
EasyExcel EasyExcel是一个基于Java的简单.省内存的读写Excel的开源项目.在尽可能节约内存的情况下支持读写百M的Excel. github地址:https://github.c ...
- 阿里 easyExcel 动态写入数据,多级表头,单元格合并示例
excel写入流程 public static void main(String[] args) throws Exception {//标题List<List<String>> ...
最新文章
- 人工智能“上位”会让程序员消失吗?
- “躲避球”体育游戏《Sparc》登陆Rift和Vive,可以和PS用户一起玩了【附游戏视频】
- 趣链 BitXHub跨链平台 (1)技术架构
- VTK:Animation用法实战
- Spring jdbc Template和Spring 事务管理
- python find函数_Python 装饰器填坑指南 | 最常见的报错信息、原因和解决方案
- 【canvas】blackboard 黑板
- async和await用法
- OneProxy中间件生产使用经验视频分享
- Linux多线程编程-线程间参数传递
- 印象笔记三级目录_如何建立印象笔记的三层目录构架
- 模拟器打开开发者模式
- 科研过程中Linux相关问题
- Manjaro安装配置指南
- 思考12. 口说无凭,眼见为实。
- 机器学习中的归纳偏置
- 小米10Pro手机相机特性分析
- 电脑无法登陆百度知道和百度文库解决办法
- Navicat Premium 12 安装使用
- 目前流行的分形软件一览
热门文章
- 河南大学计算机考研群2021,河南大学2021年统考生拟录取名单公示
- 图案设计灵感怎么写_服装设计灵感来源怎么写_服装设计理念怎么写
- win7笔记本外接显示器html,详解笔记本电脑连接外部显示器的操作流程
- 20221218-19英语学习
- 943数据结构勘误表
- 寻找市场中的Alpha(上):WorldQuant的阿尔法设计理念
- SEVERE: Could not contact localhost:8005. Tomcat may not be running.
- 关于视频变速播放软件
- python计算歌手得分
- 灌篮高手怎么找回原来的服务器,灌篮高手手游异常登陆、封号补偿及领取方式介绍...