导出大表

This commit is contained in:
haomingming 2026-01-04 12:18:35 +08:00
parent f66f6ce0ab
commit 64506eaa69

View File

@ -146,29 +146,65 @@ public class CaseplatformCaseExcelController {
contentStyle.setBorderRight(BorderStyle.THIN); contentStyle.setBorderRight(BorderStyle.THIN);
// ExcelWriter writer = EasyExcel.write(outputStream, ExportExpertCaseExcelVo.class) // ExcelWriter writer = EasyExcel.write(outputStream, ExportExpertCaseExcelVo.class)
// 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)
// .relativeHeadRowIndex(1) // 数据从第3行开始前2行为标题
// .build();
//
// // 写数据
// writer.write(processedList, writeSheet);
//
// // 合并大标题
// Workbook workbook = (Workbook) writer.writeContext().writeWorkbookHolder().getWorkbook();
// Sheet sheet = workbook.getSheetAt(0);
// sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, head.size() - 1));
// //Row titleRow = sheet.createRow(0);
// Row titleRow = sheet.getRow(0);
// if (titleRow == null) {
// titleRow = sheet.createRow(0);
// }
// 1. 构建ExcelWriter先不写入数据先处理大标题行
ExcelWriter writer = EasyExcel.write(response.getOutputStream(), ExportExpertCaseExcelVo.class) ExcelWriter writer = EasyExcel.write(response.getOutputStream(), ExportExpertCaseExcelVo.class)
.head(head) .head(head)
.excelType(ExcelTypeEnum.XLSX) .excelType(ExcelTypeEnum.XLSX)
.registerWriteHandler(new HorizontalCellStyleStrategy(headStyle, contentStyle)) .registerWriteHandler(new HorizontalCellStyleStrategy(headStyle, contentStyle))
// 关键禁用EasyExcel自动创建表头行后续手动控制行号
.needHead(false)
.build(); .build();
WriteSheet writeSheet = EasyExcel.writerSheet("劳务费明细") // 2. 先获取Workbook和Sheet手动创建大标题行行0此时行未刷盘
.needHead(true)
.relativeHeadRowIndex(1) // 数据从第3行开始前2行为标题
.build();
// 写数据
writer.write(processedList, writeSheet);
// 合并大标题
Workbook workbook = (Workbook) writer.writeContext().writeWorkbookHolder().getWorkbook(); Workbook workbook = (Workbook) writer.writeContext().writeWorkbookHolder().getWorkbook();
Sheet sheet = workbook.getSheetAt(0); Sheet sheet = workbook.getSheetAt(0);
sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, head.size() - 1)); if (sheet == null) {
//Row titleRow = sheet.createRow(0); sheet = workbook.createSheet("劳务费明细");
}
// 3. 手动创建行0大标题行此时行在内存中未刷盘
Row titleRow = sheet.getRow(0); Row titleRow = sheet.getRow(0);
if (titleRow == null) { if (titleRow == null) {
titleRow = sheet.createRow(0); titleRow = sheet.createRow(0);
} }
// 合并大标题行0行0列 0行最后一列
sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, head.size() - 1));
// 4. 构建WriteSheet表头从行1开始数据从行2开始对应relativeHeadRowIndex(1)
WriteSheet writeSheet = EasyExcel.writerSheet("劳务费明细")
.needHead(true) // 重新开启表头表头写入行1
.relativeHeadRowIndex(1) // 数据从行2开始表头行1 + 1
.build();
// 5. 最后写入数据行号递增行0行1行2+无回头修改
writer.write(processedList, writeSheet);
titleRow.setHeightInPoints(30); // 设置标题行高 titleRow.setHeightInPoints(30); // 设置标题行高
Cell titleCell = titleRow.createCell(0); Cell titleCell = titleRow.createCell(0);
titleCell.setCellValue("人工肝诊疗病例征集项目专家劳务费表"); titleCell.setCellValue("人工肝诊疗病例征集项目专家劳务费表");
@ -251,7 +287,7 @@ public class CaseplatformCaseExcelController {
response.setContentType("multipart/form-data"); response.setContentType("multipart/form-data");
response.setCharacterEncoding("utf-8"); response.setCharacterEncoding("utf-8");
writer.finish(); writer.finish();
response.getOutputStream().flush();
outputStream.close(); outputStream.close();
} catch (Exception e) { } catch (Exception e) {