EasyExcel自定義導(dǎo)出列和順序?qū)嵗a
EasyExcel 自定義導(dǎo)出列和順序
該功能需要前后端進行銜接 。前端需要傳輸兩個集合,后端可以封裝到一個對象中進行接收
集合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ù)需求進行相應(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-01Java并發(fā)編程示例(二):獲取和設(shè)置線程信息
這篇文章主要介紹了Java并發(fā)編程示例(二):獲取和設(shè)置線程信息,本文是系列文章的第二篇,本文著重講解Thread類的幾個重要屬性,需要的朋友可以參考下2014-12-12WIN7系統(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