1,需求:

因为项目需要所以要按要求合并excel表数据

2,实现方法,java的easyExcel

因为实现合并需继承AbstractMergeStrategy类重写merge方法,在merger中按自己的需要去合并数据

package com.ironge.yangtse.server.handler;import com.alibaba.excel.metadata.Head;
import com.alibaba.excel.write.merge.AbstractMergeStrategy;
import com.ironge.yangtse.server.modules.dto.resp.ExportExamPlanResp;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.util.CellRangeAddress;import java.util.ArrayList;
import java.util.List;
import java.util.Map;public class ExamPlanExportMergeHandler extends AbstractMergeStrategy {//分组 用于记录多少组合并private List<Integer> exportFieldGroupCountList = new ArrayList<>();public ExamPlanExportMergeHandler(List<ExportExamPlanResp> list, Map<Integer,List<ExportExamPlanResp>> groupByResult){Integer firstCol = 1;
//如果只合并一行/一列会报错,所以合并数据只有一的时候跳过,不合并if(list != null && list.size() > 0) {for(Integer planIds : groupByResult.keySet()) {//计算每次合并几列exportFieldGroupCountList.add(groupByResult.get(planIds).size());}}else{exportFieldGroupCountList = new ArrayList<Integer>();}}@Overrideprotected void merge(Sheet sheet, Cell cell, Head head, Integer integer) {Integer lastRow = 1;for (Integer indexCount : exportFieldGroupCountList) {//计算每次合并几列// int firstRow, int lastRow, int firstCol, int lastCol//CellRangeAddress cellRangeAddress = new CellRangeAddress(0,0,1,lastCol);if(indexCount > 1) {
// int firstRow, int lastRow, int firstCol, int lastColCellRangeAddress cellRangeAddress = new CellRangeAddress(lastRow, lastRow + indexCount - 1, 0, 0);CellRangeAddress cellRangeAddress1 = new CellRangeAddress(lastRow, lastRow+indexCount-1, 1, 1);CellRangeAddress cellRangeAddress2 = new CellRangeAddress(lastRow, lastRow+indexCount-1, 10, 10);CellRangeAddress cellRangeAddress3 = new CellRangeAddress(lastRow, lastRow+indexCount-1, 11, 11);CellRangeAddress cellRangeAddress4 = new CellRangeAddress(lastRow, lastRow+indexCount-1, 12, 12);sheet.addMergedRegionUnsafe(cellRangeAddress);sheet.addMergedRegionUnsafe(cellRangeAddress1);sheet.addMergedRegionUnsafe(cellRangeAddress2);sheet.addMergedRegionUnsafe(cellRangeAddress3);sheet.addMergedRegionUnsafe(cellRangeAddress4);lastRow += indexCount;}}}
}
    @PostMapping("/exportGetList")@ApiOperation("导出计划")public void exportGetList(@RequestBody GetExamPlanReq req,HttpServletResponse response) {req.setCurrent(0);req.setSize(1000000);PageDto<ExamPlanResp> dto = examPlanService.getList(req);List<ExportExamPlanResp> list = dto.getList().stream().map(e->{return examPlanConvert.toExport(e);}).collect(Collectors.toList());Map<Integer,List<ExportExamPlanResp>> groupByResult = list.stream().collect(Collectors.groupingBy(ExportExamPlanResp::getId));String fileName = "考试计划";try (OutputStream out = response.getOutputStream()) {response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");response.setCharacterEncoding("utf-8");// 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系fileName = URLEncoder.encode(fileName, "UTF-8").replaceAll("\\+", "%20");response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName +".xlsx");
//这里是重点,这里要实例化上面的处理类,并传递参数,list为要写入的集合,groupBuresult为分组后的写入数据,用于区分多少行合并EasyExcel.write(out, ExportExamPlanResp.class).registerWriteHandler(new ExamPlanExportMergeHandler(list,groupByResult)).sheet("sheet").doWrite(list);} catch (IOException e) {log.error("文件导出异常", e);throw new BusinessException(YangErrorCodeEnum.FILE_DOWNLOAD_FAILED);}}

JAVA EasyExcel自定义合并单元格相关推荐

  1. easyexcel 列头合并_2020-05-19:EasyExcel自定义合并单元格

    public static void writeExcelWithHeadAndData(OutputStream outputStream, List> head, List> body ...

  2. EasyExcel导出自定义合并单元格文件

    目标 需要使用阿里的EasyExcel库来导出excel,并要自定义合并单元格. 思路 这里自定义的CellWriteHandler需要将数据进行如下处理: 1.Excel每一行数据必须对应一个对象: ...

  3. Web中的EasyExcel导出Excel(不创建对象且自定义合并单元格策略)

    Web中的EasyExcel导出Excel(不创建对象且自定义合并单元格策略) 适用于多张表(只查单表数据就用创建对象那种方法) Controller @RequestMapping(value = ...

  4. easyexcel读取合并单元格

    easyexcel读取合并单元格 文章目录 easyexcel读取合并单元格 一.设置读取额外信息 二.重写Listener中的extra()方法,获取合并单元格的信息 三.遍历合并单元格的信息 四. ...

  5. easyexcel处理合并单元格数据

    一.背景 一次工作任务是要解析excel数据,采用阿里的 easyexcel 工具进行解析,由于表格有合并单元格,但是 easyexcel 读取合并单元格只会读取一次,导致下面单元格数据为空,这样会影 ...

  6. easyexcel 动态合并单元格

    easyexcel 动态合并单元格 目前操作excel文档的底层都是用poi来进行的,在早期工作开发过程中,是基于poi,然后对每一个数据单元格进行操作代码编写,后面有一些比较好的开源项目,像easy ...

  7. easyexcel导出excel自定义合并单元格【动态表头和动态数据均可以自由合并】

    网上合并单元格的博客还是很多的,大家自行舍取吧.本文主要讲解固定与不固定的表头和内容如何合并 参考官网 https://easyexcel.opensource.alibaba.com/docs/cu ...

  8. JAVA EXCEL导出合并单元格自定义封装方法

    转载在C站上面看到一个大神写的自定义封装方法 转载地址:springboot 使用Poi 自定义封装方法 合并excel中的单元格_Tongyao-CSDN博客_springboot合并单元格 之前都 ...

  9. easyExcel中合并单元格文件读取实现方案

    1.需求场景描述 2.问题分析与实现方案 1.需求场景描述 现在有个业务需要按照指定模板上传选择题,并进行入表处理,使用easyExcel进行文件上传并读取数据,其中涉及合并单元数据读取问题,这里简单 ...

最新文章

  1. 再次学习基础爬虫,爬取大学排名。
  2. 只有14秒,假老黄才是假的!黄仁勋没有骗了全世界,英伟达「元宇宙」验明正身...
  3. winsever 2008 r2 管理员账号没有权限_钉钉管理员攻略—主管理员①
  4. Happy Number 十进制转特殊三进制
  5. ffmpeg本地编译没有ffplay解决方案
  6. 11-对象的常用方法
  7. 年度总结文章的抽奖结果公布
  8. 忙碌的三月,小感慨下~
  9. 我的一个朋友加班猝死了,我很恐慌
  10. 五分钟实现网站安全 创新工场“安全宝”吸引大量用户
  11. linux编译后 空间不足,Linux系统/run/systemd空间不足问题解决
  12. 大学计算机第一学期期末考试试题,《大学计算机基础》期末考试试题(A卷)..doc...
  13. 矩阵理论及其应用课后习题作业:第三章 第四章
  14. Super odometry:以IMU为核心的激光雷达视觉惯性融合框架(ICRA2021)
  15. css3优惠卷上方锯齿_CSS不规则卡片,纯CSS制作优惠券样式,CSS实现锯齿样式
  16. oracle g1 gc,G1 GC日志分析
  17. 查看链接文件的最终目标的多种方法
  18. 使用代码的当前SVN版本构建项目build版号
  19. Windows64位操作环境下,eclipse使用32位JDK
  20. python sys stdout_Python-如何将sys.stdout复制到日志文件?

热门文章

  1. 【script】一个打包应用的脚本
  2. 自助式BI分析有哪些优势?
  3. Android 权限设置大全
  4. 自媒体、电商、网赚是否过了红利期?你常见的网赚是不是骗局?
  5. 首先下载安装data.table包_自从用了这个表情包制作工具,斗图再也没输过
  6. c语言宏函数返回值,C++宏定义方法的返回值
  7. 产品建议:留言板OR私信,哪个更好一点?
  8. 华为设备配置的常用命令
  9. 苹果手机软件升级密码_免编程软件开发平台,可视化手机软件开发
  10. 流程管理精益--价值流程图讲解及构造(一)