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

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

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

1. 實(shí)體類(lèi)
@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ù)邏輯生成對(duì)應(yīng)的List<Object>類(lèi)型的集合
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 查詢(xún)出的數(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) {
/**通過(guò)反射根據(jù)需要顯示的字段,獲取對(duì)應(yīng)的屬性值*/
data.add(getFieldValue(fieldName, person));
}
list.add(data);
}
return list;
}4.3 根據(jù)字段生成對(duì)應(yīng)的get方法
/**
* 根據(jù)傳入的字段獲取對(duì)應(yīng)的get方法,如name,對(duì)應(yīng)的getName方法
* @param fieldName 字段名
* @param person 對(duì)象
* @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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java語(yǔ)言中的自定義類(lèi)加載器實(shí)例解析
這篇文章主要介紹了Java語(yǔ)言中的自定義類(lèi)加載器實(shí)例解析,分享了相關(guān)代碼示例,小編覺(jué)得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-02-02
java?mybatis如何操作postgresql?array數(shù)組類(lèi)型
這篇文章主要介紹了java?mybatis如何操作postgresql?array數(shù)組類(lèi)型,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-01-01
Java并發(fā)編程示例(二):獲取和設(shè)置線(xiàn)程信息
這篇文章主要介紹了Java并發(fā)編程示例(二):獲取和設(shè)置線(xiàn)程信息,本文是系列文章的第二篇,本文著重講解Thread類(lèi)的幾個(gè)重要屬性,需要的朋友可以參考下2014-12-12
WIN7系統(tǒng)JavaEE(java)環(huán)境配置教程(一)
這篇文章主要介紹了WIN7系統(tǒng)JavaEE(java+tomcat7+Eclipse)環(huán)境配置教程,本文重點(diǎn)在于java配置,感興趣的小伙伴們可以參考一下2016-06-06
Java AtomicInteger類(lèi)使用方法實(shí)例講解
這篇文章主要介紹了Java AtomicInteger類(lèi)使用方法實(shí)例講解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06
深入淺析Java Object Serialization與 Hadoop 序列化
序列化是指將結(jié)構(gòu)化對(duì)象轉(zhuǎn)化為字節(jié)流以便在網(wǎng)絡(luò)上傳輸或者寫(xiě)到磁盤(pán)永久存儲(chǔ)的過(guò)程。下面通過(guò)本文給大家分享Java Object Serialization與 Hadoop 序列化,需要的朋友可以參考下2017-06-06

