EasyExcel自定义导出列和顺序实例代码

 更新时间:2023年07月20日 15:42:42   作者:是攀不是潘  
这篇文章主要给大家介绍了关于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;
      }
  }

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

导出结果

总结

到此这篇关于EasyExcel自定义导出列和顺序的文章就介绍到这了,更多相关EasyExcel自定义导出内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java中ArrayList单行初始化的多种方法

    Java中ArrayList单行初始化的多种方法

    在Java开发中,我们经常需要初始化列表,尤其是ArrayList,用于存储和管理数据,为了提高代码的简洁性和可读性,我们希望能在一行代码内完成ArrayList的初始化,本文将介绍多种在Java中单行初始化ArrayList的方法,需要的朋友可以参考下
    2025-07-07
  • Redis集群与SSM整合使用方法

    Redis集群与SSM整合使用方法

    这篇文章主要介绍了Redis集群与SSM整合使用方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-12-12
  • mybatis-plus分页无效问题解决

    mybatis-plus分页无效问题解决

    本文主要介绍了mybatis-plus分页无效问题解决,原因是配置分页插件的版本问题,旧版本和新版本的MyBatis-Plus需要不同的分页配置,感兴趣的可以了解一下
    2025-03-03
  • Spring中@EnableScheduling实现定时任务代码实例

    Spring中@EnableScheduling实现定时任务代码实例

    这篇文章主要介绍了Spring中@EnableScheduling实现定时任务代码实例,@EnableScheduling 注解开启定时任务功能,可以将多个方法写在一个类,也可以分多个类写,当然也可以将方法直接写在上面ScheddulConfig类中,需要的朋友可以参考下
    2024-01-01
  • java数组、泛型、集合在多态中的使用及对比

    java数组、泛型、集合在多态中的使用及对比

    本文主要介绍了java数组、泛型、集合在多态中的使用及对比。具有很好的参考价值,下面跟着小编一起来看下吧
    2017-03-03
  • springboot 如何修改默认端口及application.properties常用配置

    springboot 如何修改默认端口及application.properties常用配置

    这篇文章主要介绍了springboot 如何修改默认端口及application.properties常用配置操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • SpringBoot集成Redis及SpringCache缓存管理示例详解

    SpringBoot集成Redis及SpringCache缓存管理示例详解

    本文介绍了如何在SpringBoot中集成Redis并使用SpringCache进行缓存管理,详解了Redis的配置、使用以及SpringCache的注解,还阐述了SpringCache的工作原理,包括其AOP实现和与各种缓存框架的集成,使得开发者可以轻松实现缓存功能,以提高应用性能
    2024-09-09
  • Spring中@RestController和@Controller的使用及区别

    Spring中@RestController和@Controller的使用及区别

    这篇文章主要介绍了Spring中@RestController和@Controller的使用及区别,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-03-03
  • 在宝塔面板中安装OpenJDK-17的3种方法步骤

    在宝塔面板中安装OpenJDK-17的3种方法步骤

    OpenJDK 17是Java Development Kit (JDK)的一个开源实现,由OpenJDK社区维护,JDK是用于开发和运行Java应用程序的核心工具包,这篇文章主要介绍了在宝塔面板中安装OpenJDK-17的3种方法步骤,需要的朋友可以参考下
    2025-07-07
  • 深入剖析Java ArrayQueue(JDK)的源码

    深入剖析Java ArrayQueue(JDK)的源码

    本篇文章主要给大家介绍一个比较简单的JDK为我们提供的容器ArrayQueue,这个容器主要是用数组实现的一个单向队列,整体的结构相对其他容器来说就比较简单了,感兴趣的可以了解一下
    2022-08-08

最新评论