最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

方案簡(jiǎn)介

為了通過(guò) EasyExcel 實(shí)現(xiàn)動(dòng)態(tài)表頭重命名,可以封裝一個(gè)方法,傳入動(dòng)態(tài)的新表頭名稱列表(List<String>),并結(jié)合 WriteHandler 接口來(lái)重命名表頭。同時(shí),通過(guò) EasyExcel 將數(shù)據(jù)直接寫(xiě)入到輸出流。

核心實(shí)現(xiàn)說(shuō)明

動(dòng)態(tài)表頭處理器:通過(guò) DynamicHeaderWriteHandler 的構(gòu)造方法接收表頭列表,并在寫(xiě)入表頭之前動(dòng)態(tài)設(shè)置表頭內(nèi)容。

封裝寫(xiě)入方法:ExcelExportUtil 提供通用的導(dǎo)出方法,可以根據(jù)表頭和數(shù)據(jù)生成 Excel 文件并寫(xiě)入到輸出流。

直接寫(xiě)入輸出流:通過(guò) HttpServletResponse 將文件直接導(dǎo)出為響應(yīng)內(nèi)容,方便前端下載。

具體實(shí)現(xiàn)

1. 自定義動(dòng)態(tài)表頭處理器

我們實(shí)現(xiàn)一個(gè)動(dòng)態(tài)表頭處理器,將新表頭通過(guò)構(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. 封裝寫(xiě)入方法

創(chuàng)建一個(gè)封裝的方法,支持通過(guò)傳入表頭和數(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);
 
        // 寫(xiě)入數(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 省略
    }
}

通過(guò)這種方式,你可以靈活設(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)文章

  • JUC中的wait與notify方法實(shí)現(xiàn)原理詳解

    JUC中的wait與notify方法實(shí)現(xiàn)原理詳解

    這篇文章主要介紹了JUC中的wait與notify方法實(shí)現(xiàn)原理,在進(jìn)行wait()之前,就代表著需要爭(zhēng)奪Synchorized,而Synchronized代碼塊通過(guò)javap生成的字節(jié)碼中包含monitor?enter和monitor?exit兩個(gè)指令
    2023-03-03
  • 30分鐘入門Java8之lambda表達(dá)式學(xué)習(xí)

    30分鐘入門Java8之lambda表達(dá)式學(xué)習(xí)

    本篇文章主要介紹了30分鐘入門Java8之lambda表達(dá)式學(xué)習(xí),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-04-04
  • Spring IOC推導(dǎo)與DI構(gòu)造器注入超詳細(xì)講解

    Spring IOC推導(dǎo)與DI構(gòu)造器注入超詳細(xì)講解

    這篇文章主要介紹了Spring IOC推導(dǎo)與DI構(gòu)造器注入,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧
    2023-02-02
  • 詳解Java類加載器與雙親委派機(jī)制

    詳解Java類加載器與雙親委派機(jī)制

    這篇文章主要為大家介紹一下Java中的類加載器與雙親委派機(jī)制,文中通過(guò)示例為大家進(jìn)行了詳細(xì)的介紹,對(duì)我們學(xué)習(xí)Java有一定幫助,需要的可以參考一下
    2022-08-08
  • 淺析spring定時(shí)器的使用

    淺析spring定時(shí)器的使用

    這篇文章主要介紹了淺析spring定時(shí)器的使用,幫助大家更好的理解和學(xué)習(xí)spring框架,感興趣的朋友可以了解下
    2020-10-10
  • Mapper類中存在名稱相同的方法重載報(bào)錯(cuò)問(wèn)題

    Mapper類中存在名稱相同的方法重載報(bào)錯(cuò)問(wèn)題

    這篇文章主要介紹了Mapper類中存在名稱相同的方法重載報(bào)錯(cuò)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Java使用正則表達(dá)式驗(yàn)證用戶名和密碼的方法

    Java使用正則表達(dá)式驗(yàn)證用戶名和密碼的方法

    這篇文章主要介紹了Java使用正則表達(dá)式驗(yàn)證用戶名和密碼的方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-09-09
  • 如何將二進(jìn)制文件流轉(zhuǎn)化為MockMultipartFile文件

    如何將二進(jìn)制文件流轉(zhuǎn)化為MockMultipartFile文件

    文章主要介紹了如何使用Spring框架中的MockMultipartFile類來(lái)模擬文件上傳,并處理上傳邏輯,包括獲取二進(jìn)制文件流、創(chuàng)建MockMultipartFile對(duì)象、處理上傳邏輯和返回響應(yīng),還解釋了MockMultipartFile的功能和二進(jìn)制文件流的定義
    2025-02-02
  • spring依賴注入原理與用法實(shí)例分析

    spring依賴注入原理與用法實(shí)例分析

    這篇文章主要介紹了spring依賴注入原理與用法,結(jié)合實(shí)例形式分析了spring框架依賴注入的概念、原理、用法案例及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2019-10-10
  • Spring中基于xml配置管理Bean的步驟

    Spring中基于xml配置管理Bean的步驟

    Spring容器通常理解為BeanFactory或者ApplicationContext,我們知道spring的IOC容器能夠幫我們創(chuàng)建對(duì)象,對(duì)象交給spring管理之后我們就不用手動(dòng)去new對(duì)象,這篇文章主要介紹了Spring中基于xml配置管理Bean的步驟,需要的朋友可以參考下
    2023-11-11

最新評(píng)論

和平县| 阿坝| 五大连池市| 岑溪市| 西乡县| 太原市| 额济纳旗| 通榆县| 迁安市| 晋宁县| 益阳市| 三明市| 曲沃县| 庆阳市| 邵阳县| 兰考县| 东阳市| 盱眙县| 阳曲县| 冕宁县| 仙居县| 八宿县| 台山市| 鹤岗市| 紫阳县| 内黄县| 汉阴县| 定远县| 革吉县| 渭南市| 张家口市| 确山县| 阿鲁科尔沁旗| 西和县| 池州市| 惠水县| 庄河市| 万年县| 固原市| 安图县| 建始县|