EasyExcel自定義導(dǎo)出列和順序?qū)嵗a
EasyExcel 自定義導(dǎo)出列和順序
該功能需要前后端進(jìn)行銜接 。前端需要傳輸兩個集合,后端可以封裝到一個對象中進(jìn)行接收
集合1: List headList

集合2: List columnList 【對應(yīng)后端實體類需要導(dǎo)出的字段】

代碼塊
前端可選擇導(dǎo)出的列數(shù)和順序

1. 實體類
@Data
public class ScenicAnalysis extends BaseEntity{
private static final long serialVersionUID = 1L;
//需要導(dǎo)出的列的集合
private List<String> columnList;
//需要導(dǎo)出的列的集合
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) {
//根據(jù)自己的業(yè)務(wù)邏輯生成對應(yīng)的List<Object>類型的集合
List<Object> list = new ArrayList<>();
try {
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setCharacterEncoding("utf-8");
//控制 導(dǎo)出字段 未控制順序
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 設(shè)置表頭
/**
* 設(shè)置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 設(shè)置表格信息
/**
* 設(shè)置表格信息
* @param dataList 查詢出的數(shù)據(jù)
* @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) {
/**通過反射根據(jù)需要顯示的字段,獲取對應(yīng)的屬性值*/
data.add(getFieldValue(fieldName, person));
}
list.add(data);
}
return list;
}4.3 根據(jù)字段生成對應(yīng)的get方法
/**
* 根據(jù)傳入的字段獲取對應(yīng)的get方法,如name,對應(yīng)的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;
}
}以上可根據(jù)自己的業(yè)務(wù)需求進(jìn)行相應(yīng)調(diào)整
導(dǎo)出結(jié)果

總結(jié)
到此這篇關(guān)于EasyExcel自定義導(dǎo)出列和順序的文章就介紹到這了,更多相關(guān)EasyExcel自定義導(dǎo)出內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java?mybatis如何操作postgresql?array數(shù)組類型
這篇文章主要介紹了java?mybatis如何操作postgresql?array數(shù)組類型,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-01-01
Java并發(fā)編程示例(二):獲取和設(shè)置線程信息
這篇文章主要介紹了Java并發(fā)編程示例(二):獲取和設(shè)置線程信息,本文是系列文章的第二篇,本文著重講解Thread類的幾個重要屬性,需要的朋友可以參考下2014-12-12
WIN7系統(tǒng)JavaEE(java)環(huán)境配置教程(一)
這篇文章主要介紹了WIN7系統(tǒng)JavaEE(java+tomcat7+Eclipse)環(huán)境配置教程,本文重點在于java配置,感興趣的小伙伴們可以參考一下2016-06-06
深入淺析Java Object Serialization與 Hadoop 序列化
序列化是指將結(jié)構(gòu)化對象轉(zhuǎn)化為字節(jié)流以便在網(wǎng)絡(luò)上傳輸或者寫到磁盤永久存儲的過程。下面通過本文給大家分享Java Object Serialization與 Hadoop 序列化,需要的朋友可以參考下2017-06-06

