Commit 62e83eaef5e247777970ec971ce3fa2cc7e161f2

Authored by YunaiV
1 parent 4dca3260

Excel导出时,下拉选择列错位问题修改 #853

yudao-framework/yudao-spring-boot-starter-excel/src/main/java/cn/iocoder/yudao/framework/excel/core/handler/SelectSheetWriteHandler.java
@@ -3,6 +3,7 @@ package cn.iocoder.yudao.framework.excel.core.handler; @@ -3,6 +3,7 @@ package cn.iocoder.yudao.framework.excel.core.handler;
3 import cn.hutool.core.collection.CollUtil; 3 import cn.hutool.core.collection.CollUtil;
4 import cn.hutool.core.lang.Assert; 4 import cn.hutool.core.lang.Assert;
5 import cn.hutool.core.util.ObjectUtil; 5 import cn.hutool.core.util.ObjectUtil;
  6 +import cn.hutool.core.util.ReflectUtil;
6 import cn.hutool.core.util.StrUtil; 7 import cn.hutool.core.util.StrUtil;
7 import cn.hutool.extra.spring.SpringUtil; 8 import cn.hutool.extra.spring.SpringUtil;
8 import cn.hutool.poi.excel.ExcelUtil; 9 import cn.hutool.poi.excel.ExcelUtil;
@@ -61,15 +62,18 @@ public class SelectSheetWriteHandler implements SheetWriteHandler { @@ -61,15 +62,18 @@ public class SelectSheetWriteHandler implements SheetWriteHandler {
61 int colIndex = 0; 62 int colIndex = 0;
62 boolean ignoreUnannotated = head.isAnnotationPresent(ExcelIgnoreUnannotated.class); 63 boolean ignoreUnannotated = head.isAnnotationPresent(ExcelIgnoreUnannotated.class);
63 for (Field field : head.getDeclaredFields()) { 64 for (Field field : head.getDeclaredFields()) {
64 - // 忽略 static final 或 transient 的字段  
65 - if(isStaticFinalOrTransient(field) ) { 65 + // 关联 https://github.com/YunaiV/ruoyi-vue-pro/pull/853
  66 + // 1.1 忽略 static final 或 transient 的字段
  67 + if (isStaticFinalOrTransient(field) ) {
66 continue; 68 continue;
67 } 69 }
68 - // 忽略的字段跳过  
69 - if((ignoreUnannotated && !field.isAnnotationPresent(ExcelProperty.class))  
70 - || field.isAnnotationPresent(ExcelIgnore.class)){ 70 + // 1.2 忽略的字段跳过
  71 + if ((ignoreUnannotated && !field.isAnnotationPresent(ExcelProperty.class))
  72 + || field.isAnnotationPresent(ExcelIgnore.class)) {
71 continue; 73 continue;
72 } 74 }
  75 +
  76 + // 2. 核心:处理有 ExcelColumnSelect 注解的字段
73 if (field.isAnnotationPresent(ExcelColumnSelect.class)) { 77 if (field.isAnnotationPresent(ExcelColumnSelect.class)) {
74 ExcelProperty excelProperty = field.getAnnotation(ExcelProperty.class); 78 ExcelProperty excelProperty = field.getAnnotation(ExcelProperty.class);
75 if (excelProperty != null && excelProperty.index() != -1) { 79 if (excelProperty != null && excelProperty.index() != -1) {
@@ -83,13 +87,14 @@ public class SelectSheetWriteHandler implements SheetWriteHandler { @@ -83,13 +87,14 @@ public class SelectSheetWriteHandler implements SheetWriteHandler {
83 87
84 /** 88 /**
85 * 判断字段是否是静态的、最终的、 transient 的 89 * 判断字段是否是静态的、最终的、 transient 的
86 - * EasyExcel 默认是忽略 static final 或 transient 的字段,所以需要判断 90 + * 原因:EasyExcel 默认是忽略 static final 或 transient 的字段,所以需要判断
  91 + *
87 * @param field 字段 92 * @param field 字段
88 - * @return 是否是静态的、最终的、 transient 的 93 + * @return 是否是静态的、最终的、transient 的
89 */ 94 */
90 private boolean isStaticFinalOrTransient(Field field) { 95 private boolean isStaticFinalOrTransient(Field field) {
91 - return (Modifier.isStatic(field.getModifiers()) && Modifier.isFinal(field.getModifiers()))  
92 - || Modifier.isTransient(field.getModifiers()); 96 + return (Modifier.isStatic(field.getModifiers()) && Modifier.isFinal(field.getModifiers()))
  97 + || Modifier.isTransient(field.getModifiers());
93 } 98 }
94 99
95 100