diff --git a/pom.xml b/pom.xml index 22fe38e..c75fbdb 100644 --- a/pom.xml +++ b/pom.xml @@ -38,7 +38,7 @@ 4.2.0 2.12.0 4.1.1 - 1.3 + 5.2.3 1.11.842 2.17.2 5.7.22 @@ -281,6 +281,12 @@ ${easyexcel.version} + + org.apache.poi + poi-ooxml + 5.2.3 + + com.aliyun.oss aliyun-sdk-oss diff --git a/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/caseplatformcase/controller/CaseplatformCaseController.java b/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/caseplatformcase/controller/CaseplatformCaseController.java index 71a1f2f..86b0a51 100644 --- a/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/caseplatformcase/controller/CaseplatformCaseController.java +++ b/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/caseplatformcase/controller/CaseplatformCaseController.java @@ -106,5 +106,4 @@ public class CaseplatformCaseController { e.printStackTrace(); } } - } diff --git a/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/caseplatformcase/controller/CaseplatformCaseExcelController.java b/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/caseplatformcase/controller/CaseplatformCaseExcelController.java index 9ee5d29..58229f9 100644 --- a/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/caseplatformcase/controller/CaseplatformCaseExcelController.java +++ b/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/caseplatformcase/controller/CaseplatformCaseExcelController.java @@ -17,8 +17,8 @@ import net.lab1024.sa.common.common.domain.ResponseDTO; import net.lab1024.sa.common.common.exception.BusinessException; import net.lab1024.sa.common.module.support.operatelog.annoation.OperateLog; import org.apache.poi.ss.formula.functions.T; -import org.apache.poi.ss.usermodel.HorizontalAlignment; -import org.apache.poi.ss.usermodel.VerticalAlignment; +import org.apache.poi.ss.usermodel.*; +import org.apache.poi.ss.util.CellRangeAddress; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; @@ -28,9 +28,11 @@ import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; +import java.io.FileOutputStream; import java.net.URLEncoder; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; import java.util.List; /** @@ -99,60 +101,72 @@ public class CaseplatformCaseExcelController { public void exportExpertCaseExcel(HttpServletResponse response, @Valid CaseplatformCaseQueryForm queryForm) { try { List list = caseplatformCaseService.exportExpertCaseExcel(queryForm); - - // 处理数据 List processedList = caseplatformCaseService.exportExpertCaseExcelProcess(list); - // 1. 构建合并的第一行标题 - List> head = new ArrayList<>(); - List titleRow = new ArrayList<>(); - titleRow.add("人工肝诊疗病例征集项目专家劳务费表"); - for (int i = 0; i < 13; i++) { // 假设你总共有 13 列(从"序号"到"身份证号") - if (i > 0) titleRow.add(""); - } - head.add(titleRow); - - // 2. 添加第二行字段标题(正常列头) - List headerRow = Arrays.asList( - "序号", "银行", "账号所在省份", "账户所在地市", - "卡号", "姓名", "实发", "备注", "个税", "应发", "单位", "电话", "身份证号", "关联病例" + // 字段标题 + List> head = Arrays.asList( + Collections.singletonList("序号"), + Collections.singletonList("银行"), + Collections.singletonList("账号所在省份"), + Collections.singletonList("账户所在地市"), + Collections.singletonList("卡号"), + Collections.singletonList("姓名"), + Collections.singletonList("实发"), + Collections.singletonList("备注"), + Collections.singletonList("个税"), + Collections.singletonList("应发"), + Collections.singletonList("单位"), + Collections.singletonList("电话"), + Collections.singletonList("身份证号"), + Collections.singletonList("关联病例") ); - head.add(headerRow); - // 1设置表头样式 + // 表头样式 WriteCellStyle headStyle = new WriteCellStyle(); - // 1.1设置表头数据居中 headStyle.setHorizontalAlignment(HorizontalAlignment.CENTER); + headStyle.setVerticalAlignment(VerticalAlignment.CENTER); - // 2设置表格内容样式 - WriteCellStyle bodyStyle = new WriteCellStyle(); - // 2.1设置表格内容水平居中 - bodyStyle.setHorizontalAlignment(HorizontalAlignment.CENTER); - // 2.2设置表格内容垂直居中 - bodyStyle.setVerticalAlignment(VerticalAlignment.CENTER); - + // 内容样式 WriteCellStyle contentStyle = new WriteCellStyle(); - contentStyle.setHorizontalAlignment(org.apache.poi.ss.usermodel.HorizontalAlignment.CENTER); + contentStyle.setHorizontalAlignment(HorizontalAlignment.CENTER); + contentStyle.setVerticalAlignment(VerticalAlignment.CENTER); - // 4拿到表格处理对象 - ExcelWriter writer = EasyExcel.write(response.getOutputStream()) - .head(head) - .excelType(ExcelTypeEnum.XLSX) - .registerWriteHandler(new HorizontalCellStyleStrategy(headStyle, contentStyle)) - .build(); + // 1. 创建ExcelWriter,注册自定义合并handler + ExcelWriter writer = EasyExcel.write(response.getOutputStream(), ExportExpertCaseExcelVo.class) + .head(head) + .excelType(ExcelTypeEnum.XLSX) + .registerWriteHandler(new HorizontalCellStyleStrategy(headStyle, contentStyle)) + .build(); - WriteSheet writeSheet = EasyExcel.writerSheet("劳务费明细").needHead(true).build(); + WriteSheet writeSheet = EasyExcel.writerSheet("劳务费明细") + .needHead(true) + .relativeHeadRowIndex(2) // 数据从第三行开始 + .build(); - // 5写入excel数据 + // 2. 用 POI 操作 sheet,合并第一行并写入大标题 + Workbook workbook = (Workbook) writer.writeContext().writeWorkbookHolder().getWorkbook(); + Sheet sheet = workbook.getSheetAt(0); + sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, head.size() - 1)); + Row row = sheet.getRow(0); + if (row == null) { + row = sheet.createRow(0); + } + Cell cell = row.createCell(0); + cell.setCellValue("人工肝诊疗病例征集项目专家劳务费表"); + + // 2. 写入数据 writer.write(processedList, writeSheet); + writer.finish(); + + // 6通知浏览器以附件的形式下载处理,设置返回头要注意文件名有中文 - String fileName = URLEncoder.encode("人工肝专家劳务费明细表", "UTF-8").replaceAll("\\+", "%20"); + String fileName = URLEncoder.encode("病例数据", "UTF-8").replaceAll("\\+", "%20"); response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx"); response.setContentType("multipart/form-data"); response.setCharacterEncoding("utf-8"); writer.finish(); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); } }