From f381ce3fe1dc281b49bbaaa4d4a5d496630eae5d Mon Sep 17 00:00:00 2001
From: RuoYi <yzz_ivy@163.com>
Date: 星期四, 07 十一月 2024 22:15:39 +0800
Subject: [PATCH] 支持自定义显示Excel属性列
---
src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java | 108 ++++++++++++++++++++++++++++++++++++++++-------------
1 files changed, 81 insertions(+), 27 deletions(-)
diff --git a/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java b/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java
index b22307d..d22f582 100644
--- a/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java
+++ b/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java
@@ -195,6 +195,11 @@
public Class<T> clazz;
/**
+ * 闇�瑕佹樉绀哄垪灞炴��
+ */
+ public String[] includeFields;
+
+ /**
* 闇�瑕佹帓闄ゅ垪灞炴��
*/
public String[] excludeFields;
@@ -205,10 +210,19 @@
}
/**
+ * 浠呭湪Excel涓樉绀哄垪灞炴��
+ *
+ * @param fields 鍒楀睘鎬у悕 绀轰緥[鍗曚釜"name"/澶氫釜"id","name"]
+ */
+ public void showColumn(String... fields)
+ {
+ this.includeFields = fields;
+ }
+
+ /**
* 闅愯棌Excel涓垪灞炴��
*
* @param fields 鍒楀睘鎬у悕 绀轰緥[鍗曚釜"name"/澶氫釜"id","name"]
- * @throws Exception
*/
public void hideColumn(String... fields)
{
@@ -1488,46 +1502,86 @@
List<Field> tempFields = new ArrayList<>();
tempFields.addAll(Arrays.asList(clazz.getSuperclass().getDeclaredFields()));
tempFields.addAll(Arrays.asList(clazz.getDeclaredFields()));
- for (Field field : tempFields)
+ if (StringUtils.isNotEmpty(includeFields))
{
- if (!ArrayUtils.contains(this.excludeFields, field.getName()))
+ for (Field field : tempFields)
{
- // 鍗曟敞瑙�
- if (field.isAnnotationPresent(Excel.class))
+ if (ArrayUtils.contains(this.includeFields, field.getName()) || field.isAnnotationPresent(Excels.class))
{
- Excel attr = field.getAnnotation(Excel.class);
- if (attr != null && (attr.type() == Type.ALL || attr.type() == type))
+ addField(fields, field);
+ }
+ }
+ }
+ else if (StringUtils.isNotEmpty(excludeFields))
+ {
+ for (Field field : tempFields)
+ {
+ if (!ArrayUtils.contains(this.excludeFields, field.getName()))
+ {
+ addField(fields, field);
+ }
+ }
+ }
+ else
+ {
+ for (Field field : tempFields)
+ {
+ addField(fields, field);
+ }
+ }
+ return fields;
+ }
+
+ /**
+ * 娣诲姞瀛楁淇℃伅
+ */
+ public void addField(List<Object[]> fields, Field field)
+ {
+ // 鍗曟敞瑙�
+ if (field.isAnnotationPresent(Excel.class))
+ {
+ Excel attr = field.getAnnotation(Excel.class);
+ if (attr != null && (attr.type() == Type.ALL || attr.type() == type))
+ {
+ field.setAccessible(true);
+ fields.add(new Object[] { field, attr });
+ }
+ if (Collection.class.isAssignableFrom(field.getType()))
+ {
+ subMethod = getSubMethod(field.getName(), clazz);
+ ParameterizedType pt = (ParameterizedType) field.getGenericType();
+ Class<?> subClass = (Class<?>) pt.getActualTypeArguments()[0];
+ this.subFields = FieldUtils.getFieldsListWithAnnotation(subClass, Excel.class);
+ }
+ }
+
+ // 澶氭敞瑙�
+ if (field.isAnnotationPresent(Excels.class))
+ {
+ Excels attrs = field.getAnnotation(Excels.class);
+ Excel[] excels = attrs.value();
+ for (Excel attr : excels)
+ {
+ if (StringUtils.isNotEmpty(includeFields))
+ {
+ if (ArrayUtils.contains(this.includeFields, field.getName() + "." + attr.targetAttr())
+ && (attr != null && (attr.type() == Type.ALL || attr.type() == type)))
{
field.setAccessible(true);
fields.add(new Object[] { field, attr });
}
- if (Collection.class.isAssignableFrom(field.getType()))
- {
- subMethod = getSubMethod(field.getName(), clazz);
- ParameterizedType pt = (ParameterizedType) field.getGenericType();
- Class<?> subClass = (Class<?>) pt.getActualTypeArguments()[0];
- this.subFields = FieldUtils.getFieldsListWithAnnotation(subClass, Excel.class);
- }
}
-
- // 澶氭敞瑙�
- if (field.isAnnotationPresent(Excels.class))
+ else
{
- Excels attrs = field.getAnnotation(Excels.class);
- Excel[] excels = attrs.value();
- for (Excel attr : excels)
+ if (!ArrayUtils.contains(this.excludeFields, field.getName() + "." + attr.targetAttr())
+ && (attr != null && (attr.type() == Type.ALL || attr.type() == type)))
{
- if (!ArrayUtils.contains(this.excludeFields, field.getName() + "." + attr.targetAttr())
- && (attr != null && (attr.type() == Type.ALL || attr.type() == type)))
- {
- field.setAccessible(true);
- fields.add(new Object[] { field, attr });
- }
+ field.setAccessible(true);
+ fields.add(new Object[] { field, attr });
}
}
}
}
- return fields;
}
/**
--
Gitblit v1.9.3