当前位置:网站首页>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]所创,转载请带上原文链接,感谢
边栏推荐
- 超大折扣力度,云服务器 88 元秒杀
- 移动安全加固助力 App 实现全面、有效的安全防护
- SEO解决方案制定,如何脱离杯弓蛇影?
- 揭秘在召唤师峡谷中移动路径选择逻辑?
- 明年起旧版本安卓设备将无法浏览大约30%的网页
- 使用基于GAN的过采样技术提高非平衡COVID-19死亡率预测的模型准确性
- 解决微信小程序使用switchTab跳转后页面不刷新的问题
- Solution to the failure of closing windows in Chrome browser JS
- On agile development concept and iterative development scheme
- Cad2016 software installation tutorial
猜你喜欢

你的钱为什么会被转走,这篇文章告诉你答案

MES系统在行业应用里区别于传统式管理

乘风破浪的技术大咖再次集结 | 腾讯云TVP持续航行中

From next year, about 30% of the web pages will be inaccessible to older Android devices

SEO解决方案制定,如何脱离杯弓蛇影?
![[share] interface tests how to transfer files in post request](/img/3b/00bc81122d330c9d59909994e61027.jpg)
[share] interface tests how to transfer files in post request

深入探索 Android Gradle 插件的缓存配置

高质量的缺陷分析:让自己少写 bug

cad教程 cad2016安装教程

谷粒商城学习笔记,第五天:ES全文检索
随机推荐
自己实现printf函数
On agile development concept and iterative development scheme
你的钱为什么会被转走,这篇文章告诉你答案
Solution to the failure of closing windows in Chrome browser JS
In depth analysis of the multi-user shopping mall system from search to create a profit point
MES system is different from traditional management in industry application
Kubernetes V1.19.3 kubeadm 部署笔记(中)
Mobile security reinforcement helps app achieve comprehensive and effective security protection
谷粒商城学习笔记,第五天:ES全文检索
cad教程 cad2016安装教程
详解Git
5分钟GET我使用Github 5 年总结的这些骚操作!
Full link stress testing of moral integrity -- the evolution of corpus intelligence
超简单集成华为系统完整性检测,搞定设备安全防护
Detailed explanation of ipfsapp development method of biaofen IPFs mining machine app software development software
Service registration and discovery of go micro integration Nacos
5 minutes get I use GitHub's 5-year summary of these operations!
Implement printf function by yourself
自定义室内地图在线工具
QML Repeater