亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

SpringBoot3整合EasyExcel動態(tài)實現表頭重命名

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

方案簡介

為了通過 EasyExcel 實現動態(tài)表頭重命名,可以封裝一個方法,傳入動態(tài)的新表頭名稱列表(List<String>),并結合 WriteHandler 接口來重命名表頭。同時,通過 EasyExcel 將數據直接寫入到輸出流。

核心實現說明

動態(tài)表頭處理器:通過 DynamicHeaderWriteHandler 的構造方法接收表頭列表,并在寫入表頭之前動態(tài)設置表頭內容。

封裝寫入方法:ExcelExportUtil 提供通用的導出方法,可以根據表頭和數據生成 Excel 文件并寫入到輸出流。

直接寫入輸出流:通過 HttpServletResponse 將文件直接導出為響應內容,方便前端下載。

具體實現

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

我們實現一個動態(tài)表頭處理器,將新表頭通過構造方法傳入。

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;
 
    // 構造方法傳入動態(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()) {
            // 動態(tài)設置表頭名稱
            head.setHeadNameList(List.of(newHeaders.get(columnIndex)));
        }
    }
}

2. 封裝寫入方法

創(chuàng)建一個封裝的方法,支持通過傳入表頭和數據,將結果直接輸出到流中。

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 {
 
    /**
     * 導出 Excel 表格
     *
     * @param response  HttpServletResponse 響應
     * @param data      數據列表
     * @param headers   動態(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)建動態(tài)表頭處理器
        DynamicHeaderWriteHandler headerHandler = new DynamicHeaderWriteHandler(headers);
 
        // 寫入數據到輸出流
        EasyExcel.write(response.getOutputStream())
                .registerWriteHandler(headerHandler)
                .head((Class<?>) data.get(0).getClass()) // 假設數據類已經標注了 @ExcelProperty
                .sheet("Sheet1")
                .doWrite(data);
    }
}

3. 使用方法示例

在 Controller 中調用封裝好的方法,傳入動態(tài)表頭和數據。

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/
?
        // 模擬數據
        List<SampleData> data = new ArrayList<>();
        data.add(new SampleData("張三", 25, "北京"));
        data.add(new SampleData("李四", 30, "上海"));
 
        // 動態(tài)表頭
        List<String> headers = List.of("姓名(新)", "年齡(新)", "地址(新)");
 
        // 導出 Excel
        ExcelExportUtil.exportExcel(response, data, headers, "示例文件");
    }
 
    // 數據類
    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 省略
    }
}

通過這種方式,你可以靈活設置動態(tài)表頭,并實現直接導出到客戶端的功能。

到此這篇關于SpringBoot3整合EasyExcel動態(tài)實現表頭重命名的文章就介紹到這了,更多相關SpringBoot EasyExcel表頭重命名內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • IDEA+JRebel實現全自動熱部署的方法步驟

    IDEA+JRebel實現全自動熱部署的方法步驟

    這篇文章主要介紹了IDEA+JRebel實現全自動熱部署的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-11-11
  • JVM中的程序計數寄存器PC是什么詳解

    JVM中的程序計數寄存器PC是什么詳解

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

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

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

    Spring MVC整合 freemarker及使用方法

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

    java實現順時針打印矩陣

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

    @Autowired 自動注入接口失敗的原因及解決

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

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

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

    SpringBoot使用JPA實現查詢部分字段

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

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

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

    Java連接FTP服務器并使用ftp連接池進行文件操作指南

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

最新評論