欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 锐评 > alibaba的EasyExcel导出合并单元格,超简单

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

2025/11/10 16:27:21 来源:https://blog.csdn.net/qq_32786139/article/details/147590977  浏览:    关键词: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);

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词