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

This commit is contained in:
YunaiV 2025-06-15 15:22:19 +08:00
parent 4dca326081
commit 62e83eaef5

View File

@ -3,6 +3,7 @@ package cn.iocoder.yudao.framework.excel.core.handler;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.ReflectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.extra.spring.SpringUtil;
import cn.hutool.poi.excel.ExcelUtil;
@ -61,15 +62,18 @@ public class SelectSheetWriteHandler implements SheetWriteHandler {
int colIndex = 0;
boolean ignoreUnannotated = head.isAnnotationPresent(ExcelIgnoreUnannotated.class);
for (Field field : head.getDeclaredFields()) {
// 忽略 static final transient 的字段
if(isStaticFinalOrTransient(field) ) {
// 关联 https://github.com/YunaiV/ruoyi-vue-pro/pull/853
// 1.1 忽略 static final transient 的字段
if (isStaticFinalOrTransient(field) ) {
continue;
}
// 忽略的字段跳过
if((ignoreUnannotated && !field.isAnnotationPresent(ExcelProperty.class))
|| field.isAnnotationPresent(ExcelIgnore.class)){
// 1.2 忽略的字段跳过
if ((ignoreUnannotated && !field.isAnnotationPresent(ExcelProperty.class))
|| field.isAnnotationPresent(ExcelIgnore.class)) {
continue;
}
// 2. 核心处理有 ExcelColumnSelect 注解的字段
if (field.isAnnotationPresent(ExcelColumnSelect.class)) {
ExcelProperty excelProperty = field.getAnnotation(ExcelProperty.class);
if (excelProperty != null && excelProperty.index() != -1) {
@ -83,13 +87,14 @@ public class SelectSheetWriteHandler implements SheetWriteHandler {
/**
* 判断字段是否是静态的最终的 transient
* EasyExcel 默认是忽略 static final transient 的字段所以需要判断
* 原因EasyExcel 默认是忽略 static final transient 的字段所以需要判断
*
* @param field 字段
* @return 是否是静态的最终的 transient
* @return 是否是静态的最终的transient
*/
private boolean isStaticFinalOrTransient(Field field) {
return (Modifier.isStatic(field.getModifiers()) && Modifier.isFinal(field.getModifiers()))
|| Modifier.isTransient(field.getModifiers());
return (Modifier.isStatic(field.getModifiers()) && Modifier.isFinal(field.getModifiers()))
|| Modifier.isTransient(field.getModifiers());
}