SpringBoot3整合EasyExcel動(dòng)態(tài)實(shí)現(xiàn)表頭重命名
方案簡(jiǎn)介
為了通過 EasyExcel 實(shí)現(xiàn)動(dòng)態(tài)表頭重命名,可以封裝一個(gè)方法,傳入動(dòng)態(tài)的新表頭名稱列表(List<String>
),并結(jié)合 WriteHandler
接口來重命名表頭。同時(shí),通過 EasyExcel 將數(shù)據(jù)直接寫入到輸出流。
核心實(shí)現(xiàn)說明
動(dòng)態(tài)表頭處理器:通過 DynamicHeaderWriteHandler 的構(gòu)造方法接收表頭列表,并在寫入表頭之前動(dòng)態(tài)設(shè)置表頭內(nèi)容。
封裝寫入方法:ExcelExportUtil 提供通用的導(dǎo)出方法,可以根據(jù)表頭和數(shù)據(jù)生成 Excel 文件并寫入到輸出流。
直接寫入輸出流:通過 HttpServletResponse 將文件直接導(dǎo)出為響應(yīng)內(nèi)容,方便前端下載。
具體實(shí)現(xiàn)
1. 自定義動(dòng)態(tài)表頭處理器
我們實(shí)現(xiàn)一個(gè)動(dòng)態(tài)表頭處理器,將新表頭通過構(gòu)造方法傳入。
import com.alibaba.excel.metadata.Head; import com.alibaba.excel.write.handler.AbstractCellWriteHandler; import org.apache.poi.ss.usermodel.Cell; import java.util.List; public class DynamicHeaderWriteHandler extends AbstractCellWriteHandler { private final List<String> newHeaders; // 構(gòu)造方法傳入動(dòng)態(tài)表頭列表 public DynamicHeaderWriteHandler(List<String> newHeaders) { this.newHeaders = newHeaders; } @Override public void beforeCellCreate(org.apache.poi.ss.usermodel.Workbook workbook, org.apache.poi.ss.usermodel.Sheet sheet, org.apache.poi.ss.usermodel.Row row, Head head, Integer columnIndex, Boolean isHead) { ? //Powered by Moshow@https://zhengkai.blog.csdn.net/ ? if (Boolean.TRUE.equals(isHead) && columnIndex < newHeaders.size()) { // 動(dòng)態(tài)設(shè)置表頭名稱 head.setHeadNameList(List.of(newHeaders.get(columnIndex))); } } }
2. 封裝寫入方法
創(chuàng)建一個(gè)封裝的方法,支持通過傳入表頭和數(shù)據(jù),將結(jié)果直接輸出到流中。
import com.alibaba.excel.EasyExcel; import com.alibaba.excel.write.metadata.WriteSheet; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.List; public class ExcelExportUtil { /** * 導(dǎo)出 Excel 表格 * * @param response HttpServletResponse 響應(yīng) * @param data 數(shù)據(jù)列表 * @param headers 動(dòng)態(tài)表頭 * @param fileName 文件名 * @author ?Powered by Moshow@https://zhengkai.blog.csdn.net/ */ public static void exportExcel(HttpServletResponse response, List<?> data, List<String> headers, String fileName) throws IOException { response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); response.setCharacterEncoding("utf-8"); response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx"); // 創(chuàng)建動(dòng)態(tài)表頭處理器 DynamicHeaderWriteHandler headerHandler = new DynamicHeaderWriteHandler(headers); // 寫入數(shù)據(jù)到輸出流 EasyExcel.write(response.getOutputStream()) .registerWriteHandler(headerHandler) .head((Class<?>) data.get(0).getClass()) // 假設(shè)數(shù)據(jù)類已經(jīng)標(biāo)注了 @ExcelProperty .sheet("Sheet1") .doWrite(data); } }
3. 使用方法示例
在 Controller 中調(diào)用封裝好的方法,傳入動(dòng)態(tài)表頭和數(shù)據(jù)。
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.ArrayList; import java.util.List; @RestController public class ExcelExportController { @GetMapping("/export") public void export(HttpServletResponse response) throws IOException { //?Powered by Moshow@https://zhengkai.blog.csdn.net/ ? // 模擬數(shù)據(jù) List<SampleData> data = new ArrayList<>(); data.add(new SampleData("張三", 25, "北京")); data.add(new SampleData("李四", 30, "上海")); // 動(dòng)態(tài)表頭 List<String> headers = List.of("姓名(新)", "年齡(新)", "地址(新)"); // 導(dǎo)出 Excel ExcelExportUtil.exportExcel(response, data, headers, "示例文件"); } // 數(shù)據(jù)類 public static class SampleData { private String name; private Integer age; private String address; public SampleData(String name, Integer age, String address) { this.name = name; this.age = age; this.address = address; } // Getters 和 Setters 省略 } }
通過這種方式,你可以靈活設(shè)置動(dòng)態(tài)表頭,并實(shí)現(xiàn)直接導(dǎo)出到客戶端的功能。
到此這篇關(guān)于SpringBoot3整合EasyExcel動(dòng)態(tài)實(shí)現(xiàn)表頭重命名的文章就介紹到這了,更多相關(guān)SpringBoot EasyExcel表頭重命名內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- SpringBoot種如何使用?EasyExcel?實(shí)現(xiàn)自定義表頭導(dǎo)出并實(shí)現(xiàn)數(shù)據(jù)格式化轉(zhuǎn)換
- SpringBoot中使用EasyExcel并行導(dǎo)出多個(gè)excel文件并壓縮zip后下載的代碼詳解
- Springboot整合EasyExcel實(shí)現(xiàn)Excel文件上傳方式
- SpringBoot?整合?EasyExcel?實(shí)現(xiàn)自由導(dǎo)入導(dǎo)出功能
- SpringBoot整合EasyExcel實(shí)現(xiàn)批量導(dǎo)入導(dǎo)出
- 使用SpringBoot與EasyExcel實(shí)現(xiàn)復(fù)雜的導(dǎo)入導(dǎo)出
相關(guān)文章
IDEA+JRebel實(shí)現(xiàn)全自動(dòng)熱部署的方法步驟
這篇文章主要介紹了IDEA+JRebel實(shí)現(xiàn)全自動(dòng)熱部署的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11一不小心就讓Java開發(fā)踩坑的fail-fast是個(gè)什么鬼?(推薦)
這篇文章主要介紹了Java fail-fast,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04@Autowired 自動(dòng)注入接口失敗的原因及解決
這篇文章主要介紹了@Autowired 自動(dòng)注入接口失敗的原因及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02Java中static與instance的區(qū)別及作用詳解
這篇文章主要為大家介紹了Java中static與instance的區(qū)別及作用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07SpringBoot使用JPA實(shí)現(xiàn)查詢部分字段
這篇文章主要介紹了SpringBoot使用JPA實(shí)現(xiàn)查詢部分字段方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08Win10系統(tǒng)下配置Java環(huán)境變量
今天給大家?guī)淼氖顷P(guān)于Java的相關(guān)知識(shí),文章圍繞著Win10系統(tǒng)下配置Java環(huán)境變量展開,文中有非常詳細(xì)的介紹及圖文示例,需要的朋友可以參考下2021-06-06Java連接FTP服務(wù)器并使用ftp連接池進(jìn)行文件操作指南
使用FTP最主要的功能是對(duì)文件進(jìn)行管理,下面這篇文章主要給大家介紹了關(guān)于Java連接FTP服務(wù)器并使用ftp連接池進(jìn)行文件操作的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-08-08