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 String方法获取字符出现次数及字符最大相同部分示例

    Java String方法获取字符出现次数及字符最大相同部分示例

    这篇文章主要介绍了Java String方法获取字符出现次数及字符最大相同部分,涉及java字符串的遍历、比较、计算等相关操作技巧,需要的朋友可以参考下
    2017-09-09
  • 使用SpringAOP获取用户操作日志入库

    使用SpringAOP获取用户操作日志入库

    这篇文章主要介绍了使用SpringAOP获取用户操作日志入库,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • java.lang.ExceptionInInitializerError初始化程序中的异常错误的解决

    java.lang.ExceptionInInitializerError初始化程序中的异常错误的解决

    java.lang.ExceptionInInitializerError 异常在 Java 中表示一个错误,该错误发生在尝试初始化一个类的静态变量、静态代码块或枚举常量时,本文就来介绍并解决一下,感兴趣的可以了解一下
    2024-05-05
  • Hibernate缓存详解

    Hibernate缓存详解

    本文主要介绍了Hibernate缓存的相关知识。具有很好的参考价值,下面跟着小编一起来看下吧
    2017-02-02
  • springmvc处理响应数据的解析

    springmvc处理响应数据的解析

    今天小编就为大家分享一篇关于springmvc处理响应数据的解析,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01
  • 解决mybatis-plus 查询耗时慢的问题

    解决mybatis-plus 查询耗时慢的问题

    这篇文章主要介绍了解决mybatis-plus 查询耗时慢的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • Java利用Socket实现网络通信功能

    Java利用Socket实现网络通信功能

    在早期的网络编程中,Socket是很常见的实现技术之一,比如早期的聊天室,就是基于这种技术进行实现的,另外现在有些消息推送,也可以基于Socket实现,本文小编给大家介绍了Java利用Socket实现网络通信功能的示例,需要的朋友可以参考下
    2023-11-11
  • Spring的编程式事务TransactionTemplate的用法详解

    Spring的编程式事务TransactionTemplate的用法详解

    TransactionTemplate提供了一种在代码中进行编程式事务管理的方式,使开发人员能够在方法级别定义事务的开始和结束点,本文介绍了Spring框架中TransactionTemplate的用法,感兴趣的朋友跟随小编一起看看吧
    2023-07-07
  • java &与&&的区别及实例

    java &与&&的区别及实例

    这篇文章主要介绍了java &与&&的区别的相关资料,并附简单实例,帮助大家学习理解这部分知识,需要的朋友可以参考下
    2016-10-10
  • java中利用栈实现字符串回文算法

    java中利用栈实现字符串回文算法

    给定一个由多个a和b组成的字符串数组,字符串中有一个特殊的字符X,位于字符串的正中间,例如(aaaabbbbXabaabbbb),如何判定该字符串是否回文
    2020-12-12

最新评论