JAVA EasyExcel自定义合并单元格
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自定义合并单元格相关推荐
- easyexcel 列头合并_2020-05-19:EasyExcel自定义合并单元格
public static void writeExcelWithHeadAndData(OutputStream outputStream, List> head, List> body ...
- EasyExcel导出自定义合并单元格文件
目标 需要使用阿里的EasyExcel库来导出excel,并要自定义合并单元格. 思路 这里自定义的CellWriteHandler需要将数据进行如下处理: 1.Excel每一行数据必须对应一个对象: ...
- Web中的EasyExcel导出Excel(不创建对象且自定义合并单元格策略)
Web中的EasyExcel导出Excel(不创建对象且自定义合并单元格策略) 适用于多张表(只查单表数据就用创建对象那种方法) Controller @RequestMapping(value = ...
- easyexcel读取合并单元格
easyexcel读取合并单元格 文章目录 easyexcel读取合并单元格 一.设置读取额外信息 二.重写Listener中的extra()方法,获取合并单元格的信息 三.遍历合并单元格的信息 四. ...
- easyexcel处理合并单元格数据
一.背景 一次工作任务是要解析excel数据,采用阿里的 easyexcel 工具进行解析,由于表格有合并单元格,但是 easyexcel 读取合并单元格只会读取一次,导致下面单元格数据为空,这样会影 ...
- easyexcel 动态合并单元格
easyexcel 动态合并单元格 目前操作excel文档的底层都是用poi来进行的,在早期工作开发过程中,是基于poi,然后对每一个数据单元格进行操作代码编写,后面有一些比较好的开源项目,像easy ...
- easyexcel导出excel自定义合并单元格【动态表头和动态数据均可以自由合并】
网上合并单元格的博客还是很多的,大家自行舍取吧.本文主要讲解固定与不固定的表头和内容如何合并 参考官网 https://easyexcel.opensource.alibaba.com/docs/cu ...
- JAVA EXCEL导出合并单元格自定义封装方法
转载在C站上面看到一个大神写的自定义封装方法 转载地址:springboot 使用Poi 自定义封装方法 合并excel中的单元格_Tongyao-CSDN博客_springboot合并单元格 之前都 ...
- easyExcel中合并单元格文件读取实现方案
1.需求场景描述 2.问题分析与实现方案 1.需求场景描述 现在有个业务需要按照指定模板上传选择题,并进行入表处理,使用easyExcel进行文件上传并读取数据,其中涉及合并单元数据读取问题,这里简单 ...
最新文章
- 再次学习基础爬虫,爬取大学排名。
- 只有14秒,假老黄才是假的!黄仁勋没有骗了全世界,英伟达「元宇宙」验明正身...
- winsever 2008 r2 管理员账号没有权限_钉钉管理员攻略—主管理员①
- Happy Number 十进制转特殊三进制
- ffmpeg本地编译没有ffplay解决方案
- 11-对象的常用方法
- 年度总结文章的抽奖结果公布
- 忙碌的三月,小感慨下~
- 我的一个朋友加班猝死了,我很恐慌
- 五分钟实现网站安全 创新工场“安全宝”吸引大量用户
- linux编译后 空间不足,Linux系统/run/systemd空间不足问题解决
- 大学计算机第一学期期末考试试题,《大学计算机基础》期末考试试题(A卷)..doc...
- 矩阵理论及其应用课后习题作业:第三章 第四章
- Super odometry:以IMU为核心的激光雷达视觉惯性融合框架(ICRA2021)
- css3优惠卷上方锯齿_CSS不规则卡片,纯CSS制作优惠券样式,CSS实现锯齿样式
- oracle g1 gc,G1 GC日志分析
- 查看链接文件的最终目标的多种方法
- 使用代码的当前SVN版本构建项目build版号
- Windows64位操作环境下,eclipse使用32位JDK
- python sys stdout_Python-如何将sys.stdout复制到日志文件?