From b20fd29dc3864405af4afa0aeb99d13d74fbfcdc Mon Sep 17 00:00:00 2001
From: 13693261870 <252740454@qq.com>
Date: 星期四, 21 三月 2024 15:07:44 +0800
Subject: [PATCH] 解决导出xls异常

---
 src/main/java/com/lf/server/helper/ExcelHelper.java |  120 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 119 insertions(+), 1 deletions(-)

diff --git a/src/main/java/com/lf/server/helper/ExcelHelper.java b/src/main/java/com/lf/server/helper/ExcelHelper.java
index cd93f3e..5589cdd 100644
--- a/src/main/java/com/lf/server/helper/ExcelHelper.java
+++ b/src/main/java/com/lf/server/helper/ExcelHelper.java
@@ -1,9 +1,127 @@
 package com.lf.server.helper;
 
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.ExcelReader;
+import com.alibaba.excel.ExcelWriter;
+import com.alibaba.excel.context.AnalysisContext;
+import com.alibaba.excel.enums.WriteDirectionEnum;
+import com.alibaba.excel.event.AnalysisEventListener;
+import com.alibaba.excel.read.metadata.ReadSheet;
+import com.alibaba.excel.write.metadata.WriteSheet;
+import com.alibaba.excel.write.metadata.fill.FillConfig;
+import com.alibaba.excel.write.metadata.fill.FillWrapper;
+import com.lf.server.annotation.ExcelHead;
+
+import java.util.*;
+
 /**
  * Excel甯姪绫�
  * @author WWW
  */
 public class ExcelHelper {
-    //
+    /**
+     * 璇诲彇Excel
+     *
+     * @param pathName 鏂囦欢璺緞
+     * @param <T>      娉涘瀷绫�
+     * @return 娉涘瀷绫婚泦鍚�
+     */
+    public static <T> List<T> readExcel(Class<?> clazz, String pathName) {
+        ExcelHead head = getExcelHead(clazz);
+        int headRowNumber = head == null ? 1 : head.headRows();
+        String[] strs = null == head || StringHelper.isEmpty(head.excludeSheets()) ? null : head.excludeSheets().split(",");
+        List<String> excludeSheets = null == strs ? null : Arrays.asList(strs);
+
+        List<T> list = new ArrayList<T>();
+        ExcelReader reader = EasyExcel.read(pathName, clazz, new AnalysisEventListener<T>() {
+            @Override
+            public void invoke(T t, AnalysisContext context) {
+                list.add(t);
+            }
+
+            @Override
+            public void doAfterAllAnalysed(AnalysisContext analysisContext) {
+                //
+            }
+        }).headRowNumber(headRowNumber).build();
+
+        List<ReadSheet> sheets = reader.excelExecutor().sheetList();
+        for (ReadSheet sheet : sheets) {
+            if (strs != null && excludeSheets.contains(sheet.getSheetName())) {
+                continue;
+            }
+
+            reader.read(sheet);
+        }
+        reader.finish();
+
+        return list;
+    }
+
+    /**
+     * 鑾峰彇Excel澶存敞瑙g被
+     *
+     * @param clazz Class
+     * @param <T>   娉涘瀷绫�
+     * @return 澶磋鏁�
+     */
+    public static <T> ExcelHead getExcelHead(Class<?> clazz) {
+        ExcelHead head = clazz.getAnnotation(ExcelHead.class);
+
+        return head;
+    }
+
+    /**
+     * 鍐欏叆Excel妯℃澘
+     *
+     * @param source  婧愭枃浠讹紙妯℃澘锛�
+     * @param target  鐩綍鏂囦欢
+     * @param map     閿�煎Map
+     * @param listMap 鍒楄〃Map
+     */
+    public static <T> void writeToTemplate(String source, String target, Map<String, Object> map, Map<String, List<T>> listMap) {
+        // 鏍规嵁妯℃澘鍐欏叆鏁版嵁锛屽鏋滅洰鏍囨枃浠朵笉瀛樺湪锛屽垯鑷姩鍒涘缓鏂囦欢
+        ExcelWriter excelWriter = EasyExcel.write(target).withTemplate(source).build();
+
+        // 鍦ㄥ伐浣滅翱0涓啓鍏ユ暟鎹紝濡傛灉妯℃澘涓笉瀛樺湪缁冧範宸ヤ綔绨匡紝鍒欎細鍦ㄧ洰鏍囨枃浠朵腑鑷姩鍒涘缓
+        WriteSheet writeSheet = EasyExcel.writerSheet(0).build();
+
+        // 鍨傜洿鍐欏叆鏁版嵁锛屽鏋滆姘村钩鍐欏叆锛屽皢VERTICAL鏇挎崲涓篐ORIZONTAL
+        FillConfig fillConfig = FillConfig.builder().direction(WriteDirectionEnum.VERTICAL).build();
+
+        // 鍐欏叆鏁版嵁
+        if (null != map && map.size() > 0) {
+            excelWriter.fill(map, writeSheet);
+        }
+        if (null != listMap && listMap.size() > 0) {
+            listMap.forEach((k, v) -> excelWriter.fill(new FillWrapper(k, v), fillConfig, writeSheet));
+        }
+
+        // 缁撴潫鍐欏叆
+        excelWriter.finish();
+    }
+
+    /**
+     * 鍐欏叆Excel妯℃澘
+     *
+     * @param source 婧愭枃浠讹紙妯℃澘锛�
+     * @param target 鐩綍鏂囦欢
+     * @param map    鏁版嵁婧�
+     */
+    public static <T> void writeToTemplate(String source, String target, Map<String, List<T>> map) {
+        // 鏍规嵁妯℃澘鍐欏叆鏁版嵁锛屽鏋滅洰鏍囨枃浠朵笉瀛樺湪锛屽垯鑷姩鍒涘缓鏂囦欢
+        ExcelWriter excelWriter = EasyExcel.write(target).withTemplate(source).build();
+
+        // 鍦ㄥ伐浣滅翱0涓啓鍏ユ暟鎹紝濡傛灉妯℃澘涓笉瀛樺湪缁冧範宸ヤ綔绨匡紝鍒欎細鍦ㄧ洰鏍囨枃浠朵腑鑷姩鍒涘缓
+        WriteSheet writeSheet = EasyExcel.writerSheet(0).build();
+
+        // 鍨傜洿鍐欏叆鏁版嵁锛屽鏋滆姘村钩鍐欏叆锛屽皢VERTICAL鏇挎崲涓篐ORIZONTAL
+        FillConfig fillConfig = FillConfig.builder().direction(WriteDirectionEnum.VERTICAL).build();
+
+        // 鍐欏叆鏁版嵁
+        map.forEach((k, v) -> excelWriter.fill(new FillWrapper(k, v), fillConfig, writeSheet));
+
+        // 缁撴潫鍐欏叆
+        excelWriter.finish();
+    }
 }

--
Gitblit v1.9.3