From 3f1e5702a293f31c5b70255c888f8ebc68fe49be Mon Sep 17 00:00:00 2001
From: May <1742057357@qq.com>
Date: 星期一, 27 十一月 2023 10:52:59 +0800
Subject: [PATCH] !454 添加excel多sheet页导出 * add 添加excel多sheet导出

---
 ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/TestExcelController.java |   35 +++++++++++++++++
 ruoyi-modules/ruoyi-demo/src/main/resources/excel/多sheet列表.xlsx                             |    0 
 ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/utils/ExcelUtil.java |   56 ++++++++++++++++++++++++++++
 3 files changed, 91 insertions(+), 0 deletions(-)

diff --git a/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/utils/ExcelUtil.java b/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/utils/ExcelUtil.java
index 329911d..a6c14ad 100644
--- a/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/utils/ExcelUtil.java
+++ b/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/utils/ExcelUtil.java
@@ -270,6 +270,26 @@
     }
 
     /**
+     * 澶歴heet妯℃澘瀵煎嚭 妯℃澘鏍煎紡涓� {key.灞炴�
+     *
+     * @param filename     鏂囦欢鍚�
+     * @param templatePath 妯℃澘璺緞 resource 鐩綍涓嬬殑璺緞鍖呮嫭妯℃澘鏂囦欢鍚�
+     *                     渚嬪: excel/temp.xlsx
+     *                     閲嶇偣: 妯℃澘鏂囦欢蹇呴』鏀剧疆鍒板惎鍔ㄧ被瀵瑰簲鐨� resource 鐩綍涓�
+     * @param data         妯℃澘闇�瑕佺殑鏁版嵁
+     * @param response     鍝嶅簲浣�
+     */
+    public static void exportTemplateMultiSheet(List<Map<String, Object>> data, String filename, String templatePath, HttpServletResponse response) {
+        try {
+            resetResponse(filename, response);
+            ServletOutputStream os = response.getOutputStream();
+            exportTemplateMultiSheet(data, templatePath, os);
+        } catch (IOException e) {
+            throw new RuntimeException("瀵煎嚭Excel寮傚父");
+        }
+    }
+
+    /**
      * 澶氳〃澶氭暟鎹ā鏉垮鍑� 妯℃澘鏍煎紡涓� {key.灞炴�
      *
      * @param templatePath 妯℃澘璺緞 resource 鐩綍涓嬬殑璺緞鍖呮嫭妯℃澘鏂囦欢鍚�
@@ -304,6 +324,42 @@
     }
 
     /**
+     * 澶歴heet妯℃澘瀵煎嚭 妯℃澘鏍煎紡涓� {key.灞炴�
+     *
+     * @param templatePath 妯℃澘璺緞 resource 鐩綍涓嬬殑璺緞鍖呮嫭妯℃澘鏂囦欢鍚�
+     *                     渚嬪: excel/temp.xlsx
+     *                     閲嶇偣: 妯℃澘鏂囦欢蹇呴』鏀剧疆鍒板惎鍔ㄧ被瀵瑰簲鐨� resource 鐩綍涓�
+     * @param data         妯℃澘闇�瑕佺殑鏁版嵁
+     * @param os           杈撳嚭娴�
+     */
+    public static void exportTemplateMultiSheet(List<Map<String, Object>> data, String templatePath, OutputStream os) {
+        ClassPathResource templateResource = new ClassPathResource(templatePath);
+        ExcelWriter excelWriter = EasyExcel.write(os)
+            .withTemplate(templateResource.getStream())
+            .autoCloseStream(false)
+            // 澶ф暟鍊艰嚜鍔ㄨ浆鎹� 闃叉澶辩湡
+            .registerConverter(new ExcelBigNumberConvert())
+            .build();
+        if (CollUtil.isEmpty(data)) {
+            throw new IllegalArgumentException("鏁版嵁涓虹┖");
+        }
+        for (int i = 0; i < data.size(); i++) {
+            WriteSheet writeSheet = EasyExcel.writerSheet(i).build();
+            for (Map.Entry<String, Object> map : data.get(i).entrySet()) {
+                // 璁剧疆鍒楄〃鍚庣画杩樻湁鏁版嵁
+                FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build();
+                if (map.getValue() instanceof Collection) {
+                    // 澶氳〃瀵煎嚭蹇呴』浣跨敤 FillWrapper
+                    excelWriter.fill(new FillWrapper(map.getKey(), (Collection<?>) map.getValue()), fillConfig, writeSheet);
+                } else {
+                    excelWriter.fill(map.getValue(), writeSheet);
+                }
+            }
+        }
+        excelWriter.finish();
+    }
+
+    /**
      * 閲嶇疆鍝嶅簲浣�
      */
     private static void resetResponse(String sheetName, HttpServletResponse response) throws UnsupportedEncodingException {
diff --git a/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/TestExcelController.java b/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/TestExcelController.java
index 418f740..3fd124c 100644
--- a/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/TestExcelController.java
+++ b/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/TestExcelController.java
@@ -95,6 +95,41 @@
     }
 
     /**
+     * 澶氫釜sheet瀵煎嚭
+     */
+    @GetMapping("/exportTemplateMultiSheet")
+    public void exportTemplateMultiSheet(HttpServletResponse response) {
+        List<TestObj1> list1 = new ArrayList<>();
+        list1.add(new TestObj1("list1娴嬭瘯1", "list1娴嬭瘯2", "list1娴嬭瘯3"));
+        list1.add(new TestObj1("list1娴嬭瘯4", "list1娴嬭瘯5", "list1娴嬭瘯6"));
+        List<TestObj1> list2 = new ArrayList<>();
+        list2.add(new TestObj1("list2娴嬭瘯1", "list2娴嬭瘯2", "list2娴嬭瘯3"));
+        list2.add(new TestObj1("list2娴嬭瘯4", "list2娴嬭瘯5", "list2娴嬭瘯6"));
+        List<TestObj1> list3 = new ArrayList<>();
+        list3.add(new TestObj1("list3娴嬭瘯1", "list3娴嬭瘯2", "list3娴嬭瘯3"));
+        list3.add(new TestObj1("list3娴嬭瘯4", "list3娴嬭瘯5", "list3娴嬭瘯6"));
+        List<TestObj1> list4 = new ArrayList<>();
+        list4.add(new TestObj1("list4娴嬭瘯1", "list4娴嬭瘯2", "list4娴嬭瘯3"));
+        list4.add(new TestObj1("list4娴嬭瘯4", "list4娴嬭瘯5", "list4娴嬭瘯6"));
+
+        List<Map<String, Object>> list = new ArrayList<>();
+        Map<String, Object> sheetMap1 = new HashMap<>();
+        sheetMap1.put("data1", list1);
+        Map<String, Object> sheetMap2 = new HashMap<>();
+        sheetMap2.put("data2", list2);
+        Map<String, Object> sheetMap3 = new HashMap<>();
+        sheetMap3.put("data3", list3);
+        Map<String, Object> sheetMap4 = new HashMap<>();
+        sheetMap4.put("data4", list4);
+
+        list.add(sheetMap1);
+        list.add(sheetMap2);
+        list.add(sheetMap3);
+        list.add(sheetMap4);
+        ExcelUtil.exportTemplateMultiSheet(list, "澶歴heet鍒楄〃", "excel/澶歴heet鍒楄〃.xlsx", response);
+    }
+
+    /**
      * 瀵煎叆琛ㄦ牸
      */
     @PostMapping(value = "/importWithOptions", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
diff --git "a/ruoyi-modules/ruoyi-demo/src/main/resources/excel/\345\244\232sheet\345\210\227\350\241\250.xlsx" "b/ruoyi-modules/ruoyi-demo/src/main/resources/excel/\345\244\232sheet\345\210\227\350\241\250.xlsx"
new file mode 100644
index 0000000..5277f2e
--- /dev/null
+++ "b/ruoyi-modules/ruoyi-demo/src/main/resources/excel/\345\244\232sheet\345\210\227\350\241\250.xlsx"
Binary files differ

--
Gitblit v1.9.3