当前位置:网站首页>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]所创,转载请带上原文链接,感谢
边栏推荐
- Toolkit Pro helps interface development: shorten the project development cycle and quickly realize GUI with modern functional area style
- 深入分析商淘多用户商城系统如何从搜索着手打造盈利点
- On agile development concept and iterative development scheme
- 从一次需求改良漫谈php文件分片上传
- Performance comparison of serialization tools such as Jackson, fastjson, kryo, protostuff
- MES system plays an important role in the factory production management
- How to download and install autocad2020 in Chinese
- Using GaN based oversampling technique to improve the accuracy of model for mortality prediction of unbalanced covid-19
- Rongyun has completed several hundred million RMB round D financing, and will continue to build global cloud communication capability
- Flink的安装和测试
猜你喜欢

深入分析商淘多用户商城系统如何从搜索着手打造盈利点

MES system is different from traditional management in industry application

5分钟GET我使用Github 5 年总结的这些骚操作!

How important these built-in icons are to easily build a high profile application interface!

Analysis of h264nalu head

Avoid pitfall guide for cloud integration - Android push

A quick start to Shell Scripting

校准服务的六个轴心

Full link stress testing of moral integrity -- the evolution of corpus intelligence

Function calculation advanced IP query tool development
随机推荐
标梵互动解说小程序开发该如何选择?
脑机接口先驱炮轰马斯克:“他走的是一条死胡同,说的话我一个字都不同意”
Git + -- Code hosting in the history of version management
全栈技术实践经历告诉你:开发一个商城小程序要多少钱?
OpenYurt 深度解读:如何构建 Kubernetes 原生云边高效协同网络?
深入探索 Android Gradle 插件的缓存配置
A certification and authorization solution based on. Net core - hulutong 1.0 open source
缓存的数据一致性
js字符与ASCII码互转的方法
Restart the heap_ uaf_ hacknote
A quick start to Shell Scripting
CentOS查看CPU核心数及cpuinfo解析
The selection of wire displacement encoder needs the guidance of precise electronics
How about Tencent cloud amd cloud server?
MES system is different from traditional management in industry application
详解Git
Set two ways of background image, and solve the mobile phone background image highly adaptive problem
5 minutes get I use GitHub's 5-year summary of these operations!
Booker · apachecn programming / back end / big data / AI learning resources 2020.11
In the third stage, day16 user module jumps to SSO single sign on jsonp / CORS cross domain user login verification