EasyExcel 自定义导出列和顺序

EasyExcel 自定义导出列和顺序

该功能需要前后端进行衔接 。前端需要传输两个集合,后端可以封装到一个对象中进行接收

集合1: List headList
在这里插入图片描述
集合2: List columnList 【对应后端实体类需要导出的字段】
在这里插入图片描述

代码块

前端可选择导出的列数和顺序

在这里插入图片描述

1. 实体类

	@Data
	public class ScenicAnalysis extends BaseEntity{
	    private static final long serialVersionUID = 1L;
	    
	    //需要导出的列的集合
	    private List<String> columnList;
	
	    //需要导出的列的集合
	    private List<String> headList;
	}

2. 控制层

    @PostMapping("/exportColumn")
    public void exportColumn(HttpServletResponse response, @RequestBody ScenicAnalysis scenicAnalysis) {
        scenicAnalysisService.exportColumn(response,scenicAnalysis);
    }

3. 方法层

    public void  exportColumn(HttpServletResponse response, ScenicAnalysis scenicAnalysis) {
        //根据自己的业务逻辑生成对应的List<Object>类型的集合
        List<Object> list = new ArrayList<>();
        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
   */
  private static List<List<String>> head(List<String> headList) {
      List<List<String>> list = new ArrayList<>();
      for (String value : headList) {
          List<String> head = new ArrayList<>();
          head.add(value);
          list.add(head);
      }
      return list;
  }
4.2 设置表格信息
  /**
  * 设置表格信息
  * @param dataList  查询出的数据
  * @param fileList  需要显示的字段
  * @return
  */
 private static List<List<Object>> dataList(List<Object> dataList, List<String> fileList) {
     List<List<Object>> list = new ArrayList<>();
     for (Object person : dataList) {
         List<Object> data = new ArrayList<>();
         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
   */
  private static 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) {
          return null;
      }
  }

以上可根据自己的业务需求进行相应调整

导出结果

在这里插入图片描述

  • 4
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
EasyExcel中,我们可以使用注解来自定义导出不同的。首先,我们需要创建一个自定义的实体类,用于存储需要导出的数据。在这个实体类中,我们可以使用@ExcelProperty注解来指定每个字段在导出时的名和顺序。 例如,我们有一个实体类User,包含以下字段:id、name、age和email。我们希望在导出时只显示name和email这两,可以进行如下配置: ```java public class User { @ExcelProperty("姓名") private String name; @ExcelProperty("邮箱") private String email; // 省略其他字段的定义及getter/setter方法 } ``` 在这个示例中,通过@ExcelProperty注解指定了字段name对应导出名为"姓名",字段email对应导出名为"邮箱"。 接下来,我们需要创建一个导出Excel的方法,并使用EasyExcel来实现导出功能。在这个方法中,我们需要指定要导出的数据表和目标文件的路径。 ```java public void exportExcel(List<User> userList, String filePath) { try { // 创建导出ExcelWriter 对象 ExcelWriter excelWriter = EasyExcel.write(filePath, User.class).build(); // 创建Sheet对象 WriteSheet sheet = EasyExcel.writerSheet().sheetName("用户信息").build(); // 写入数据 excelWriter.write(userList, sheet); // 关闭资源 excelWriter.finish(); } catch (Exception e) { e.printStackTrace(); } } ``` 通过以上代码,我们可以实现将指定的User导出到指定路径的Excel中,并且只包含name和email这两。 总结起来,要实现在EasyExcel自定义导出不同的,我们需要在实体类中使用@ExcelProperty注解来配置每个字段的名和顺序,并在导出时指定要导出的数据表和目标文件路径。这样就可以轻松地实现自定义导出不同的功能了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值