From 352caa3e9386cf95c58fafa75a5c4d4bfa0d9a9b Mon Sep 17 00:00:00 2001
From: 疯狂的狮子Li <15040126243@163.com>
Date: 星期二, 01 八月 2023 13:14:26 +0800
Subject: [PATCH] update 优化 excel导出字典转下拉框 无需标记index自动处理(感谢一夏coco)

---
 ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/core/ExcelDownHandler.java |   26 ++++++++++++--------------
 1 files changed, 12 insertions(+), 14 deletions(-)

diff --git a/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/core/ExcelDownHandler.java b/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/core/ExcelDownHandler.java
index db4fecc..3b791ea 100644
--- a/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/core/ExcelDownHandler.java
+++ b/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/core/ExcelDownHandler.java
@@ -5,7 +5,9 @@
 import cn.hutool.core.util.EnumUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
-import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.metadata.FieldCache;
+import com.alibaba.excel.metadata.FieldWrapper;
+import com.alibaba.excel.util.ClassUtils;
 import com.alibaba.excel.write.handler.SheetWriteHandler;
 import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
 import com.alibaba.excel.write.metadata.holder.WriteWorkbookHolder;
@@ -83,16 +85,18 @@
         Sheet sheet = writeSheetHolder.getSheet();
         // 寮�濮嬭缃笅鎷夋 HSSFWorkbook
         DataValidationHelper helper = sheet.getDataValidationHelper();
-        Field[] fields = writeWorkbookHolder.getClazz().getDeclaredFields();
         Workbook workbook = writeWorkbookHolder.getWorkbook();
-        int length = fields.length;
-        for (int i = 0; i < length; i++) {
+        FieldCache fieldCache = ClassUtils.declaredFields(writeWorkbookHolder.getClazz(), writeWorkbookHolder);
+        for (Map.Entry<Integer, FieldWrapper> entry : fieldCache.getSortedFieldMap().entrySet()) {
+            Integer index = entry.getKey();
+            FieldWrapper wrapper = entry.getValue();
+            Field field = wrapper.getField();
             // 寰幆瀹炰綋涓殑姣忎釜灞炴��
             // 鍙�夌殑涓嬫媺鍊�
             List<String> options = new ArrayList<>();
-            if (fields[i].isAnnotationPresent(ExcelDictFormat.class)) {
+            if (field.isAnnotationPresent(ExcelDictFormat.class)) {
                 // 濡傛灉鎸囧畾浜咢ExcelDictFormat锛屽垯浣跨敤瀛楀吀鐨勯�昏緫
-                ExcelDictFormat format = fields[i].getDeclaredAnnotation(ExcelDictFormat.class);
+                ExcelDictFormat format = field.getDeclaredAnnotation(ExcelDictFormat.class);
                 String dictType = format.dictType();
                 String converterExp = format.readConverterExp();
                 if (StrUtil.isNotBlank(dictType)) {
@@ -105,20 +109,14 @@
                     // 濡傛灉鎸囧畾浜嗙‘鍒囩殑鍊硷紝鍒欑洿鎺ヨВ鏋愮‘鍒囩殑鍊�
                     options = StrUtil.split(converterExp, format.separator(), true, true);
                 }
-            } else if (fields[i].isAnnotationPresent(ExcelEnumFormat.class)) {
+            } else if (field.isAnnotationPresent(ExcelEnumFormat.class)) {
                 // 鍚﹀垯濡傛灉鎸囧畾浜咢ExcelEnumFormat锛屽垯浣跨敤鏋氫妇鐨勯�昏緫
-                ExcelEnumFormat format = fields[i].getDeclaredAnnotation(ExcelEnumFormat.class);
+                ExcelEnumFormat format = field.getDeclaredAnnotation(ExcelEnumFormat.class);
                 List<Object> values = EnumUtil.getFieldValues(format.enumClass(), format.textField());
                 options = StreamUtils.toList(values, String::valueOf);
             }
             if (ObjectUtil.isNotEmpty(options)) {
                 // 浠呭綋涓嬫媺鍙�夐」涓嶄负绌烘椂鎵ц
-                // 鑾峰彇鍒椾笅鏍囷紝榛樿涓哄綋鍓嶅惊鐜鏁�
-                int index = i;
-                if (fields[i].isAnnotationPresent(ExcelProperty.class)) {
-                    // 濡傛灉鎸囧畾浜嗗垪涓嬫爣锛屼互鎸囧畾鐨勪负涓�
-                    index = fields[i].getDeclaredAnnotation(ExcelProperty.class).index();
-                }
                 if (options.size() > 20) {
                     // 杩欓噷闄愬埗濡傛灉鍙�夐」澶т簬20锛屽垯浣跨敤棰濆琛ㄥ舰寮�
                     dropDownWithSheet(helper, workbook, sheet, index, options);

--
Gitblit v1.9.3