From 156428784d7dea41820a951af1d743443ef673e6 Mon Sep 17 00:00:00 2001 From: wangw <1594593906@qq.com> Date: Fri, 11 Oct 2024 09:51:11 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AF=BC=E5=87=BA=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/ysk/cashier/utils/FileUtil.java | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/eladmin-common/src/main/java/cn/ysk/cashier/utils/FileUtil.java b/eladmin-common/src/main/java/cn/ysk/cashier/utils/FileUtil.java index 18d344c9..8fd0a8b8 100644 --- a/eladmin-common/src/main/java/cn/ysk/cashier/utils/FileUtil.java +++ b/eladmin-common/src/main/java/cn/ysk/cashier/utils/FileUtil.java @@ -223,6 +223,51 @@ public class FileUtil extends cn.hutool.core.io.FileUtil { IoUtil.close(out); } + public static void downloadAndMergeExcel(List> list, List> mergeData, List keyList, HttpServletResponse response) throws IOException { + String tempPath = SYS_TEM_DIR + IdUtil.fastSimpleUUID() + ".xlsx"; + + // 创建工作簿 + Workbook workbook = new XSSFWorkbook(); + // 创建工作表 + Sheet sheet = workbook.createSheet("Sheet1"); + + // 合并单元格,从第 0 行第 0 列到第 0 行第 2 列 +// sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 2)); + + for (List mergeDatum : mergeData) { + sheet.addMergedRegion(new CellRangeAddress(mergeDatum.get(0), mergeDatum.get(1), mergeDatum.get(2), mergeDatum.get(3))); + } + + Row row0 = sheet.createRow(0); + for (int i = 0; i < keyList.size(); i++) { + Cell cell = row0.createCell(i); + cell.setCellValue(keyList.get(i)); + } + for (int i = 0; i < list.size(); i++) { + Map map = list.get(i); + Row row = sheet.createRow(i + 1); + for (int j = 0; j < keyList.size(); j++) { + Cell cell = row.createCell(j); + cell.setCellValue(map.get(keyList.get(j)) == null ? "" : map.get(keyList.get(j)).toString()); + } + } + + // response为HttpServletResponse对象 + response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8"); + response.setHeader("Content-Disposition", "attachment;filename=file.xlsx"); + + try (FileOutputStream outputStream = new FileOutputStream(tempPath); + ServletOutputStream out = response.getOutputStream()) { + + workbook.write(outputStream); + workbook.write(out); + } catch (IOException e) { + // 更详细的错误处理 + e.printStackTrace(); + // 可以考虑返回一个错误响应给客户端 + } + } + /** * 输入标题到excel *