SpringBoot3整合EasyExcel動態(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ù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
一不小心就讓Java開發(fā)踩坑的fail-fast是個什么鬼?(推薦)
這篇文章主要介紹了Java fail-fast,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-04-04
Java中static與instance的區(qū)別及作用詳解
這篇文章主要為大家介紹了Java中static與instance的區(qū)別及作用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-07-07

