利用EasyExcel实现表头动态导出
EasyExcel简单介绍文档(https://www.yuque.com/easyexcel/doc/easyexcel)
- 项目需要的依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.1.6</version>
</dependency>
- 动态导出表头工具类(利用反射)
public class EasyExcelUtils {
private EasyExcelUtils() {
}
//excel表头
public static final List<List<String>> head(List<ExportField> exportFields) {
List<List<String>> list = new ArrayList<>();
for (ExportField exportField : exportFields) {
List<String> head = new ArrayList<>();
head.add(exportField.getFieldDesc());
list.add(head);
}
return list;
}
//要导出的字段数据
public static final <T> List<List<T>> dataList(List<ExportField> exportFields, T obj) {
List<List<T>> list = new ArrayList<>();
List<T> data = new ArrayList<>();
for (ExportField exportField : exportFields) {
//先根据反射获取实体类的class对象
Class objClass = obj.getClass();
//设置实体类属性的集合
Field[] fields = ReflectUtil.getFields(objClass);
//循环实体类对象集合
for (Field field : fields) {
field.setAccessible(true);
//判断实体类属性跟特定字段集合名是否一样
if (field.getName().equals(exportField.getFieldName())) {
try {
T object = (T) field.get(obj);
//获取属性对应的值
data.add(object);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
}
list.add(data)