EasyExcel 自定义导出列和顺序
该功能需要前后端进行衔接 。前端需要传输两个集合,后端可以封装到一个对象中进行接收
集合1: List headList
集合2: List columnList 【对应后端实体类需要导出的字段】
代码块
前端可选择导出的列数和顺序
1. 实体类
@Data
publicclassScenicAnalysisextendsBaseEntity{privatestatic final long serialVersionUID = 1L;//需要导出的列的集合private List<String> columnList;//需要导出的列的集合private List<String> headList;}
2. 控制层
@PostMapping("/exportColumn")publicvoidexportColumn(HttpServletResponse response, @RequestBody ScenicAnalysis scenicAnalysis){
scenicAnalysisService.exportColumn(response,scenicAnalysis);}
3. 方法层
publicvoidexportColumn(HttpServletResponse response, ScenicAnalysis scenicAnalysis){//根据自己的业务逻辑生成对应的List<Object>类型的集合
List<Object> list =newArrayList<>();try{
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setCharacterEncoding("utf-8");//控制 导出字段 未控制顺序
EasyExcel.write(response.getOutputStream(), ScenicAnalysis.class).head(head(scenicAnalysis.getHeadList())).includeColumnFiledNames(scenicAnalysis.getColumnList()).sheet("模板").doWrite(dataList(list,scenicAnalysis.getColumnList()));}catch(IOException e){
e.printStackTrace();}}
4. 公共方法 (直接使用)
4.1 设置表头
/**
* 设置Excel头
* @param headList Excel头信息
* @return
*/privatestatic List<List<String>>head(List<String> headList){
List<List<String>> list =newArrayList<>();for(String value : headList){
List<String> head =newArrayList<>();
head.add(value);
list.add(head);}return list;}
4.2 设置表格信息
/**
* 设置表格信息
* @param dataList 查询出的数据
* @param fileList 需要显示的字段
* @return
*/privatestatic List<List<Object>>dataList(List<Object> dataList, List<String> fileList){
List<List<Object>> list =newArrayList<>();for(Object person : dataList){
List<Object> data =newArrayList<>();for(String fieldName : fileList){/**通过反射根据需要显示的字段,获取对应的属性值*/
data.add(getFieldValue(fieldName, person));}
list.add(data);}return list;}
4.3 根据字段生成对应的get方法
/**
* 根据传入的字段获取对应的get方法,如name,对应的getName方法
* @param fieldName 字段名
* @param person 对象
* @return
*/privatestatic Object getFieldValue(String fieldName, Object person){try{
String firstLetter = fieldName.substring(0,1).toUpperCase();
String getter ="get"+ firstLetter + fieldName.substring(1);
Method method = person.getClass().getMethod(getter);return method.invoke(person);}catch(Exception e){returnnull;}}
以上可根据自己的业务需求进行相应调整
导出结果
本文转载自: https://blog.csdn.net/nonita/article/details/129176195
版权归原作者 是攀不是潘 所有, 如有侵权,请联系我们删除。
版权归原作者 是攀不是潘 所有, 如有侵权,请联系我们删除。