当前位置:网站首页>Easyexcel exports according to the filter column (not empty in the middle, the order can be adjusted)
Easyexcel exports according to the filter column (not empty in the middle, the order can be adjusted)
2020-11-09 16:11:00 【T bean sprouts】
Use EasyExel According to the way the filter column is exported, there is one in the official document “ Export only the specified columns according to the parameters ” Example , But in this case, I tested the derived Excel That's true .
EasyExcel Official documents :https://www.yuque.com/easyexcel/doc
“ name ” and “ Birthday ” In the middle, there's a column , But if you need to export according to which fields are displayed on the front end , And the order should be as shown on the front end ( The front end implements drag and drop as well as filter to specify which fields to display , Therefore, the export format should be consistent ...), The example given in this official document does not seem to satisfy , So I wrote an example that uses no object creation + An example of how reflection works .
This is one I wrote Person Test object
public class Person {
@ExcelIgnore
private Long id;
@ExcelProperty(" name ")
private String name;
@ExcelProperty(" Age ")
private int age;
@ExcelProperty(" Birthday ")
@DateTimeFormat("yyyy year MM month dd Japan ")
private Date birthday;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
}
Using official documents “ Do not create write for objects ” Example , Encapsulate the , Use reflection to return the fields to be filtered
package com.example.demo.utils;
import com.alibaba.excel.EasyExcel;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
/**
* @author Bean sprouts
* @version 1.0
* @Date 2020-11-09 09:13
*/
public class EasyExcelUtils {
private static final Logger logger = LoggerFactory.getLogger(EasyExcelUtils.class);
/**
* @param fileName File pathname
* @param sheetName sheet name
* @param data The data from the query
* @param headList Incoming Excel head ( for example : full name , Birthday )
* @param fileList Pass in the fields to be displayed ( for example : The field corresponding to the name is name, The corresponding field of birthday is birthday)
*/
public static void noModelWrite(String fileName, String sheetName, List data, List<String> headList, List<String> fileList){
EasyExcel.write(fileName).head(head(headList)).sheet(sheetName).doWrite(dataList(data,fileList));
}
/**
* Set up Excel head
* @param headList Excel Header information
* @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;
}
/**
* Set table information
* @param dataList The data found
* @param fileList Fields to display
* @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) {
/** By reflecting the fields that are displayed as needed , Get the corresponding property value */
data.add(getFieldValue(fieldName, person));
}
list.add(data);
}
return list;
}
/**
* According to the field passed in, get the corresponding get Method , Such as name, Corresponding getName Method
* @param fieldName Field name
* @param person object
* @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) {
logger.error(" Failed to get object property value using reflection ", e);
return null;
}
}
}
controller Layer uses this tool class to write Excel.
@RequestMapping(value = "/auth/downloadList",method = {RequestMethod.GET, RequestMethod.POST})
public void downloadList(String filedNames,String filedCodes){
List<Person> list = personServiceImpl.findPersonAll();
/**Excel head , Parameter format : full name , Birthday */
String[] head = filedNames.split(",");
List<String> headList = new ArrayList<>(Arrays.asList(head));
/**Excel Form and content , Parameter format :name,birthday*/
String[] file = filedCodes.split(",");
List<String> fileList = new ArrayList<>(Arrays.asList(file));
EasyExcelUtils.noModelWrite("E:/data/ Test example .xls"," Test example ",list,headList,fileList);
}
test 1 The incoming parameter is :
filedNames : name , Birthday
filedCodes : name,birthday
The effect is as follows :
test 2 The incoming parameter is :
filedNames : Birthday , name
filedCodes : birthday,name
The effect is as follows :
Through the code above , Use EasyExcel Does not create object write for + Reflection technology can be implemented without leaving one or more columns empty Excel, The dynamic column display can be realized according to the order of the front-end input parameters .
Be careful :
1. To use this method, you need to pass in Excel Header information and corresponding field information ;
2. Because we use reflection to call the corresponding property name get Method to get the value , You need to check the properties corresponding to get Whether the method is named canonically , If not, it needs to be dealt with separately .
版权声明
本文为[T bean sprouts]所创,转载请带上原文链接,感谢
边栏推荐
- Why does it take more and more time to develop a software?
- 手势切换背景,让直播带货更加身临其境
- A quick start to Shell Scripting
- Knowledge mapping 1.1 -- starting from NER
- 史上最惨黑客:偷走10亿美元比特币7年未花,最终被司法部全数缴获
- 谈谈敏捷开发概念和迭代开发方案
- 拉线位移编码器的选择,需要精量电子的指导
- MES系统在工厂生产管理起到9大很重要的作用
- 一款基于.NET Core的认证授权解决方案-葫芦藤1.0开源啦
- The technology masters who ride the wind and waves gather again | Tencent cloud TVP continues to sail
猜你喜欢
How to download and install autocad2020 in Chinese
函数计算进阶-IP查询工具开发
标梵互动解说小程序开发该如何选择?
echart 设置柱子之间的间距
A quick start to Shell Scripting
帮助企业摆脱困境,名企归乡工程师:能成功全靠有它!
International top journal radiology published the latest joint results of Huawei cloud, AI assisted detection of cerebral aneurysms
MES system is different from traditional management in industry application
同事笔记-小程序入坑点
OpenYurt 深度解读:如何构建 Kubernetes 原生云边高效协同网络?
随机推荐
Do programmers pay too much to work overtime? Should programmer's salary be reduced? Netizen: let go of other hard pressed programmers
jackson、fastjson、kryo、protostuff等序列化工具性能对比
The technology masters who ride the wind and waves gather again | Tencent cloud TVP continues to sail
深入分析商淘多用户商城系统如何从搜索着手打造盈利点
echart 设置柱子之间的间距
Performance comparison of serialization tools such as Jackson, fastjson, kryo, protostuff
5 minutes get I use GitHub's 5-year summary of these operations!
Application and practice of native map and web fusion technology
同事笔记-小程序入坑点
知识图谱描边1.1——从NER上手
我在传统行业做数字化转型(1)预告篇
Implement printf function by yourself
5分钟GET我使用Github 5 年总结的这些骚操作!
腾讯云AMD云服务器怎么样好不好?
校准服务的六个轴心
Function calculation advanced IP query tool development
Ultra simple integration of Huawei system integrity testing, complete equipment security protection
Exhibition cloud technology interpretation | in the face of emergencies, how does app do a good job in crash analysis and performance monitoring?
A certification and authorization solution based on. Net core - hulutong 1.0 open source
轻松构建高颜值应用界面,这些内置图标多重要!