作者 RuoYi

支持自定义显示Excel属性列

@@ -195,6 +195,11 @@ public class ExcelUtil<T> @@ -195,6 +195,11 @@ public class ExcelUtil<T>
195 public Class<T> clazz; 195 public Class<T> clazz;
196 196
197 /** 197 /**
  198 + * 需要显示列属性
  199 + */
  200 + public String[] includeFields;
  201 +
  202 + /**
198 * 需要排除列属性 203 * 需要排除列属性
199 */ 204 */
200 public String[] excludeFields; 205 public String[] excludeFields;
@@ -205,10 +210,19 @@ public class ExcelUtil<T> @@ -205,10 +210,19 @@ public class ExcelUtil<T>
205 } 210 }
206 211
207 /** 212 /**
  213 + * 仅在Excel中显示列属性
  214 + *
  215 + * @param fields 列属性名 示例[单个"name"/多个"id","name"]
  216 + */
  217 + public void showColumn(String... fields)
  218 + {
  219 + this.includeFields = fields;
  220 + }
  221 +
  222 + /**
208 * 隐藏Excel中列属性 223 * 隐藏Excel中列属性
209 * 224 *
210 * @param fields 列属性名 示例[单个"name"/多个"id","name"] 225 * @param fields 列属性名 示例[单个"name"/多个"id","name"]
211 - * @throws Exception  
212 */ 226 */
213 public void hideColumn(String... fields) 227 public void hideColumn(String... fields)
214 { 228 {
@@ -1488,10 +1502,41 @@ public class ExcelUtil<T> @@ -1488,10 +1502,41 @@ public class ExcelUtil<T>
1488 List<Field> tempFields = new ArrayList<>(); 1502 List<Field> tempFields = new ArrayList<>();
1489 tempFields.addAll(Arrays.asList(clazz.getSuperclass().getDeclaredFields())); 1503 tempFields.addAll(Arrays.asList(clazz.getSuperclass().getDeclaredFields()));
1490 tempFields.addAll(Arrays.asList(clazz.getDeclaredFields())); 1504 tempFields.addAll(Arrays.asList(clazz.getDeclaredFields()));
  1505 + if (StringUtils.isNotEmpty(includeFields))
  1506 + {
  1507 + for (Field field : tempFields)
  1508 + {
  1509 + if (ArrayUtils.contains(this.includeFields, field.getName()) || field.isAnnotationPresent(Excels.class))
  1510 + {
  1511 + addField(fields, field);
  1512 + }
  1513 + }
  1514 + }
  1515 + else if (StringUtils.isNotEmpty(excludeFields))
  1516 + {
1491 for (Field field : tempFields) 1517 for (Field field : tempFields)
1492 { 1518 {
1493 if (!ArrayUtils.contains(this.excludeFields, field.getName())) 1519 if (!ArrayUtils.contains(this.excludeFields, field.getName()))
1494 { 1520 {
  1521 + addField(fields, field);
  1522 + }
  1523 + }
  1524 + }
  1525 + else
  1526 + {
  1527 + for (Field field : tempFields)
  1528 + {
  1529 + addField(fields, field);
  1530 + }
  1531 + }
  1532 + return fields;
  1533 + }
  1534 +
  1535 + /**
  1536 + * 添加字段信息
  1537 + */
  1538 + public void addField(List<Object[]> fields, Field field)
  1539 + {
1495 // 单注解 1540 // 单注解
1496 if (field.isAnnotationPresent(Excel.class)) 1541 if (field.isAnnotationPresent(Excel.class))
1497 { 1542 {
@@ -1517,17 +1562,26 @@ public class ExcelUtil<T> @@ -1517,17 +1562,26 @@ public class ExcelUtil<T>
1517 Excel[] excels = attrs.value(); 1562 Excel[] excels = attrs.value();
1518 for (Excel attr : excels) 1563 for (Excel attr : excels)
1519 { 1564 {
1520 - if (!ArrayUtils.contains(this.excludeFields, field.getName() + "." + attr.targetAttr()) 1565 + if (StringUtils.isNotEmpty(includeFields))
  1566 + {
  1567 + if (ArrayUtils.contains(this.includeFields, field.getName() + "." + attr.targetAttr())
1521 && (attr != null && (attr.type() == Type.ALL || attr.type() == type))) 1568 && (attr != null && (attr.type() == Type.ALL || attr.type() == type)))
1522 { 1569 {
1523 field.setAccessible(true); 1570 field.setAccessible(true);
1524 fields.add(new Object[] { field, attr }); 1571 fields.add(new Object[] { field, attr });
1525 } 1572 }
1526 } 1573 }
  1574 + else
  1575 + {
  1576 + if (!ArrayUtils.contains(this.excludeFields, field.getName() + "." + attr.targetAttr())
  1577 + && (attr != null && (attr.type() == Type.ALL || attr.type() == type)))
  1578 + {
  1579 + field.setAccessible(true);
  1580 + fields.add(new Object[] { field, attr });
  1581 + }
1527 } 1582 }
1528 } 1583 }
1529 } 1584 }
1530 - return fields;  
1531 } 1585 }
1532 1586
1533 /** 1587 /**