Java使用EasyExcel動態(tài)修改模板Sheet名稱的具體方案
引言
在使用 EasyExcel 通過模板導(dǎo)出時(shí),模板中的 sheet 名稱通常是固定的,如果我們希望在導(dǎo)出時(shí)根據(jù)業(yè)務(wù)需要 動態(tài)修改 sheet 名稱,可以通過自定義 SheetWriteHandler 完成。
很多同學(xué)在釘釘群里提到可以寫攔截器,我百度了一下,最終成功用下面的方式解決了 —— 記錄一下方案。
使用方式
只需要在構(gòu)建 WriteSheet 時(shí)注冊我們自定義的 handler:
WriteSheet writeSheet = EasyExcel.writerSheet(0)
.registerWriteHandler(new CustomTemplateSheetStrategy("動態(tài)命名sheet"))
.build();
自定義 SheetWriteHandler 攔截器
下面是完整代碼:用于在 sheet 創(chuàng)建完成后,動態(tài)修改 sheet 名稱。
import com.alibaba.excel.write.handler.SheetWriteHandler;
import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
import com.alibaba.excel.write.metadata.holder.WriteWorkbookHolder;
/**
* 自定義模板導(dǎo)出sheet攔截器
*/
public class CustomTemplateSheetStrategy implements SheetWriteHandler {
private Integer sheetNo;
private String sheetName;
public CustomTemplateSheetStrategy(String sheetName) {
this.sheetName = sheetName;
}
public CustomTemplateSheetStrategy(Integer sheetNo, String sheetName) {
this.sheetNo = sheetNo;
this.sheetName = sheetName;
}
@Override
public void beforeSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) {
}
/**
* 功能:動態(tài)修改模板中sheet的名稱
* sheet創(chuàng)建完成后調(diào)用
* @param writeWorkbookHolder
* @param writeSheetHolder
*/
@Override
public void afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) {
if (sheetName == null) {
return;
}
if (sheetNo == null) {
sheetNo = 0;
}
writeWorkbookHolder.getCachedWorkbook().setSheetName(sheetNo, sheetName);
}
}
原理說明
EasyExcel 在創(chuàng)建 sheet 時(shí)會回調(diào) SheetWriteHandler:
beforeSheetCreate:Sheet 創(chuàng)建 前afterSheetCreate:Sheet 創(chuàng)建 后
我們需要在 創(chuàng)建后 修改名稱,因此代碼寫在 afterSheetCreate 中。
writeWorkbookHolder.getCachedWorkbook() 實(shí)際獲取的是底層的 POI Workbook,直接改 sheet 名即可。
結(jié)論
通過自定義 SheetWriteHandler,可以優(yōu)雅地實(shí)現(xiàn)動態(tài)修改模板 Excel 中的 sheet 名稱,適用于:
? 模板導(dǎo)出
? 多 sheet 模板
? sheet 名依賴參數(shù)、日期、用戶輸入等場景
到此這篇關(guān)于Java使用EasyExcel動態(tài)修改模板Sheet名稱的具體方案的文章就介紹到這了,更多相關(guān)Java EasyExcel修改Sheet名稱內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
IntelliJ IDEA配置java環(huán)境及解決IDEA不能直接運(yùn)行單個(gè)JAVA文件的問題
這篇文章主要介紹了IntelliJ IDEA配置java環(huán)境及解決IDEA不能直接運(yùn)行單個(gè)JAVA文件的問題,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07
Spring Boot中數(shù)據(jù)庫操作Druid和HikariDataSource的詳細(xì)過程
這篇文章主要介紹了Spring Boot中數(shù)據(jù)庫操作Druid和HikariDataSource的詳細(xì)過程,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-06-06
解決RestTemplate 的getForEntity調(diào)用接口亂碼的問題
這篇文章主要介紹了解決RestTemplate 的getForEntity調(diào)用接口亂碼的問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08
kafka中節(jié)點(diǎn)實(shí)現(xiàn)服役和退役方式
本文詳細(xì)描述了如何在Kafka集群中進(jìn)行節(jié)點(diǎn)的服役和退役操作,包括節(jié)點(diǎn)準(zhǔn)備、負(fù)載均衡計(jì)劃的創(chuàng)建與執(zhí)行、以及驗(yàn)證副本存儲計(jì)劃等步驟2025-11-11

