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);