当前位置: 首页 > news >正文

alibaba的EasyExcel导出合并单元格,超简单

首先一点哈.我们需要把数据分好组

比如像我的这种

画红框的都是需要合并的.数据是一样的

    mergeCarrierRecordExportsCarrierCells(writer, writeSheet, exports);/*** 合并承运商单元格方法*/private void mergeCarrierRecordExportsCarrierCells(ExcelWriter writer, WriteSheet writeSheet, List<RouteInquiryRecordExport> exportDataLists) {//============================List<RouteInquiryRecordExport> exportDataList = new ArrayList<>();RouteInquiryRecordExport export = new RouteInquiryRecordExport();export.setInquiryName("InquiryName");export.setCarrierName("CarrierName");exportDataList.add(export);exportDataList.addAll(exportDataLists);//==========================这里是因为老是把第一行表头给合并了.所以新建了一行空的数据==// 记录需要合并的起始行号和结束行号int startRow = 0;//需要合并的字段的信息,多个可以拼接在一起String currentName = null;for (int i = 0; i < exportDataList.size(); i++) {RouteInquiryRecordExport currentExport = exportDataList.get(i);if (!(currentExport.getInquiryName() + currentExport.getCarrierName()).equals(currentName) ) {// 如果当前询价单名称加承运商名称与之前的名称不同,则处理上一组的合并if (currentName != null) {// 合并totalVehicle列(第10列,索引从0开始)if (startRow != i - 1) {//合并第二列writer.merge(startRow, i - 1, 1, 1);//合并第三列writer.merge(startRow, i - 1, 2, 2);//合并第16列writer.merge(startRow, i - 1, 15, 15);//合并第17列writer.merge(startRow, i - 1, 16, 16);}}// 更新当前名称和起始行号currentName = currentExport.getInquiryName() + currentExport.getCarrierName();startRow = i;}// 最后一行特殊处理if (i == exportDataList.size() - 1) {writer.merge(startRow, i, 1, 1);writer.merge(startRow, i, 2, 2);writer.merge(startRow, i, 15, 15);writer.merge(startRow, i, 16, 16);}}}

效果

导出的代码


// 使用EasyExcel导出
String fileName = getPreFileName("询价记录导出.xlsx");
ExcelWriter writer = EasyExcel.write(fileName, RouteInquiryRecordExport.class).build();
// 创建WriteSheet并设置表头
WriteSheet writeSheet = EasyExcel.writerSheet("询价记录导出")
.build();

// 添加数据
writer.write(exports, writeSheet);

// 合并逻辑:按照routeInquiryName相同的数据对totalVehicle所在列进行合并
mergeCarrierRecordExportsInquiryNameCells(writer, writeSheet, exports);
mergeCarrierRecordExportsCarrierCells(writer, writeSheet, exports);

// 关闭writer
writer.finish();
File file = new File(fileName);

//这里是我自己的上传文件的公用方法
String fileUrl = getUploadFileUrl(file, "询价记录导出");
log.info("文件上传服务器 false file -{}", JSON.toJSONString(fileUrl));
// 删除本地临时文件
FileUtil.del(file);

相关文章:

  • 深度相机(一)——深度相机模型及用途介绍
  • 天梯——算式拆分
  • 在g2o图优化框架中,顶点(Vertex)和边(Edge)的定义与功能的区别
  • SAP-ABAP:ABAP内存:SAP开发中的数据暂存利器解析
  • V Rising 夜族崛起 [DLC 解锁] [Steam] [Windows SteamOS]
  • C语言学习路线
  • TypeScript中的函数类型定义与类型约束
  • web服务与Nginx
  • MySQL 主从复制
  • 二叉树的所有路径(回溯算法基础)
  • 蓝牙耳机开发--TWS蓝牙耳机双向通信充电盒设计
  • 滑动窗口模板
  • 《系统分析师-第三阶段—总结(六)》
  • Android Studio学习记录1
  • 软件测试全流程与主流测试方法详解:从理论到实战
  • Rabbitmq下载和安装(Windows系统,百度网盘)
  • 云服务器被黑客攻击应急响应与加固指南(上)
  • Swiper 在 Vue 中的使用指南
  • 用Python做有趣的AI项目5:AI 画画机器人(图像风格迁移)
  • Atcoder Help 有关Atcoder 的介绍-1 涨分规则
  • 牛市早报|国家发改委:将推出做好稳就业稳经济推动高质量发展若干举措
  • 三位成功女性,如何应对失败
  • 日中友好议员联盟代表团访问中国人民对外友好协会
  • “90后”樊鑫履新乌兰察布市察右中旗副旗长人选
  • 扎克伯格怕“错过风口”?Meta AI数字伴侣被允许与未成年人讨论不当话题
  • “富卫保险冠军赛马日”创双纪录,打造赛马旅游盛宴,印证香港联通国际优势