欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot3整合EasyExcel動(dòng)態(tài)實(shí)現(xiàn)表頭重命名

 更新時(shí)間:2025年03月31日 11:04:41   作者:Moshow鄭鍇  
這篇文章主要為大家詳細(xì)介紹了SpringBoot3整合EasyExcel如何通過WriteHandler動(dòng)態(tài)實(shí)現(xiàn)表頭重命名,文中的示例代碼講解詳細(xì),有需要的可以了解下

方案簡(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)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • IDEA+JRebel實(shí)現(xiàn)全自動(dòng)熱部署的方法步驟

    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
  • JVM中的程序計(jì)數(shù)寄存器PC是什么詳解

    JVM中的程序計(jì)數(shù)寄存器PC是什么詳解

    這篇文章主要介紹了JVM中的程序計(jì)數(shù)寄存器PC原理分析,JVM中的程序計(jì)數(shù)寄存器(Program Counter Register),Register的命名源于CPU的寄存器,寄存器存儲(chǔ)指令相關(guān)的現(xiàn)場(chǎng)信息
    2021-09-09
  • 一不小心就讓Java開發(fā)踩坑的fail-fast是個(gè)什么鬼?(推薦)

    一不小心就讓Java開發(fā)踩坑的fail-fast是個(gè)什么鬼?(推薦)

    這篇文章主要介紹了Java fail-fast,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • Spring MVC整合 freemarker及使用方法

    Spring MVC整合 freemarker及使用方法

    Spring MVC是一種基于Java的實(shí)現(xiàn)了Web MVC設(shè)計(jì)模式的請(qǐng)求驅(qū)動(dòng)類型的輕量級(jí)Web框架,這篇文章主要介紹了Spring MVC整合 freemarker及使用方法,需要的朋友可以參考下
    2019-07-07
  • java實(shí)現(xiàn)順時(shí)針打印矩陣

    java實(shí)現(xiàn)順時(shí)針打印矩陣

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)順時(shí)針打印矩陣的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-03-03
  • @Autowired 自動(dòng)注入接口失敗的原因及解決

    @Autowired 自動(dòng)注入接口失敗的原因及解決

    這篇文章主要介紹了@Autowired 自動(dòng)注入接口失敗的原因及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Java中static與instance的區(qū)別及作用詳解

    Java中static與instance的區(qū)別及作用詳解

    這篇文章主要為大家介紹了Java中static與instance的區(qū)別及作用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • SpringBoot使用JPA實(shí)現(xiàn)查詢部分字段

    SpringBoot使用JPA實(shí)現(xiàn)查詢部分字段

    這篇文章主要介紹了SpringBoot使用JPA實(shí)現(xiàn)查詢部分字段方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Win10系統(tǒng)下配置Java環(huán)境變量

    Win10系統(tǒng)下配置Java環(huán)境變量

    今天給大家?guī)淼氖顷P(guān)于Java的相關(guān)知識(shí),文章圍繞著Win10系統(tǒng)下配置Java環(huán)境變量展開,文中有非常詳細(xì)的介紹及圖文示例,需要的朋友可以參考下
    2021-06-06
  • Java連接FTP服務(wù)器并使用ftp連接池進(jìn)行文件操作指南

    Java連接FTP服務(wù)器并使用ftp連接池進(jìn)行文件操作指南

    使用FTP最主要的功能是對(duì)文件進(jìn)行管理,下面這篇文章主要給大家介紹了關(guān)于Java連接FTP服務(wù)器并使用ftp連接池進(jìn)行文件操作的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-08-08

最新評(píng)論