EasyExcel 导出实现动态列,支持在原实体类注解基础上扩展
easyexcel
快速、简洁、解决大文件内存溢出的java处理Excel工具
项目地址:https://gitcode.com/gh_mirrors/ea/easyexcel
免费下载资源
·
最近用到了EasyExcel的动态列导出,所以自己写了个工具来支持在原有的实体类注解上拓展动态列的方法。废话不多说直接上代码。
/**
* EasyExcel支持动态列导出
*
* @param builder 指定输出方式和样式
* @param entityClass 实体的Class对象
* @param customizeHeads 自定义列头
* @param list Excel行数据
*/
public static void excelHelper(ExcelWriterSheetBuilder builder, Class entityClass, List<HeadVO> customizeHeads, List<Map<String, Object>> list) {
Field[] fields = entityClass.getDeclaredFields();
// 获取类的注解
for (int i = 0; i < fields.length; i++) {
Field field = fields[i];
boolean annotationPresent = field.isAnnotationPresent(ExcelProperty.class);
if (annotationPresent) {
ExcelProperty excelProperty = field.getAnnotation(ExcelProperty.class);
List<String> head = Arrays.asList(excelProperty.value());
int index = excelProperty.index();
int order = excelProperty.order();
HeadVO headVO = HeadVO.builder().headTitle(head).index(index).order(order).key(field.getName()).build();
customizeHeads.add(headVO);
}
}
Collections.sort(customizeHeads);
List<List<String>> heads = new ArrayList<>();
List<String> keys = new ArrayList<>();
for (int i = 0; i <= customizeHeads.size() - 1; i++) {
heads.add(customizeHeads.get(i).getHeadTitle());
keys.add(customizeHeads.get(i).getKey());
}
List<List<Object>> objs = new ArrayList<>();
list.stream().forEach(e -> {
List<Object> obj = new ArrayList<>();
for (int i = 0; i < keys.size(); i++) {
obj.add(e.get(keys.get(i)));
}
objs.add(obj);
});
builder.head(heads).doWrite(objs);
}
@Data
@Builder
public class HeadVO implements Comparable<HeadVO> {
/**
* 列头名
*/
private List<String> headTitle;
/**
* 字段名
*/
private String key;
/**
* 主排序
*/
private int index;
/**
* 次排序
*/
private int order;
@Override
public int compareTo(HeadVO o) {
if (this.index == o.getIndex()) {
return this.order - o.getOrder();
}
return this.index - o.getIndex();
}
}
上述的工具只是简单的拓展,只支持读取ExcelProperty注解的字段和注解中的顺序和列名,如果想要同时使用实体类上注解的样式大家可以自行拓展。我这里在实际使用中样式是通过registerWriteHandler构建出来的。
GitHub 加速计划 / ea / easyexcel
14
5
下载
快速、简洁、解决大文件内存溢出的java处理Excel工具
最近提交(Master分支:4 个月前 )
c42183df
Bugfix 4 个月前
efa7dff6 * 重新加回 `commons-io`
4 个月前
更多推荐
已为社区贡献1条内容
所有评论(0)