easyExcel生成多個sheet的動態表頭的實現

在使用 EasyExcel 實現“多個 Sheet 且每個 Sheet 表頭是動態的”需求時,思路如下:


? 實現思路概述

EasyExcel 的 ExcelWriter 支持多個 Sheet 寫入。每個 Sheet:

  • 使用 WriteSheet 創建;
  • 可以綁定一個動態生成的表頭 List<List<String>>
  • 使用 write() 方法寫入 List 數據行(List<List<Object>>)或 Java Bean。

? 示例代碼:多個 Sheet + 動態表頭

import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.write.metadata.WriteSheet;import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;public class MultiSheetDynamicHeaderExample {public static void main(String[] args) {String fileName = "easyexcel-multi-sheet-dynamic-header.xlsx";ExcelWriter excelWriter = EasyExcel.write(fileName).build();try {// 第一個 SheetList<List<String>> header1 = Arrays.asList(Arrays.asList("姓名"),Arrays.asList("年齡"));List<List<Object>> data1 = Arrays.asList(Arrays.asList("張三", 20),Arrays.asList("李四", 22));WriteSheet sheet1 = EasyExcel.writerSheet(0, "學生信息").head(header1).build();excelWriter.write(data1, sheet1);// 第二個 SheetList<List<String>> header2 = Arrays.asList(Arrays.asList("課程"),Arrays.asList("成績"));List<List<Object>> data2 = Arrays.asList(Arrays.asList("語文", 90),Arrays.asList("數學", 95));WriteSheet sheet2 = EasyExcel.writerSheet(1, "成績信息").head(header2).build();excelWriter.write(data2, sheet2);} finally {if (excelWriter != null) {excelWriter.finish();}}}
}

? 動態生成表頭的關鍵點

1. 動態表頭結構

List<List<String>> headers = new ArrayList<>();
headers.add(Arrays.asList("列名1"));
headers.add(Arrays.asList("列名2"));

每個 List<String> 是一列的標題,支持多行表頭(即合并表頭結構),你可以這樣構建:

headers.add(Arrays.asList("用戶信息", "姓名"));  // 一級:用戶信息,二級:姓名
headers.add(Arrays.asList("用戶信息", "年齡"));

2. 動態數據結構

List<List<Object>> data = new ArrayList<>();
data.add(Arrays.asList("張三", 18));
data.add(Arrays.asList("李四", 20));

? 封裝建議(可選)

你可以封裝一個通用方法:

public void writeSheet(ExcelWriter writer, int index, String name, List<String> headerNames, List<List<Object>> rows) {List<List<String>> headers = headerNames.stream().map(title -> Arrays.asList(title)).collect(Collectors.toList());WriteSheet sheet = EasyExcel.writerSheet(index, name).head(headers).build();writer.write(rows, sheet);
}

? 總結對比 EasyPOI 與 EasyExcel

特性EasyPOIEasyExcel
依賴 Apache POI否(基于阿里優化后的 POI)
性能中等(適用于小型數據)優(適合大量數據寫入)
多 Sheet 支持支持,基于 Workbook 操作支持,基于 ExcelWriter + WriteSheet
動態表頭ExcelExportEntity 定義List<List<String>> 定義
數據結構JavaBean 或 MapJavaBean 或 List<List<Object>>

需要我封裝一個完整的 MultiSheetExcelUtil 工具類用于 EasyExcel 嗎?支持傳入 sheet 名稱、表頭和數據直接導出。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/917328.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/917328.shtml
英文地址,請注明出處:http://en.pswp.cn/news/917328.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SQL 連接類型示例:內連接與外連接

SQL 連接類型示例&#xff1a;內連接與外連接 示例數據表 假設我們有兩個表&#xff1a; employees 表:emp_idemp_namedept_id1張三1012李四1023王五1034趙六NULLdepartments 表:dept_iddept_name101銷售部102技術部104財務部1. 內連接 (INNER JOIN) 內連接只返回兩個表中匹配的…

Ubuntu安裝gpu驅動,cuda

系統初始化 1、安裝基礎軟件 apt-get update apt-get -y install openssh-server openssh-client apt-utils freeipmi ipmitool sshpass ethtool zip unzip nano less git netplan.io iputils-ping mtr ipvsadm smartmontools python3-pip socat conntrack libvirt-clients li…

ctfshow_源碼壓縮包泄露

根據題目信息直接dirsearch解壓下來一個.txt文件&#xff0c;一個index.phpflag{flag_here}不對那么就去看index.php也沒有東西&#xff0c;于是查看wp發現是訪問/fl000g.txt這才是對的還有很多源碼泄露需要去了解? git源碼泄露? svn源碼泄露? DS_Store 文件泄露? 網站備份…

Python 程序設計講義(54):Python 的函數——函數概述

Python 程序設計講義&#xff08;54&#xff09;&#xff1a;Python 的函數——函數概述 目錄Python 程序設計講義&#xff08;54&#xff09;&#xff1a;Python 的函數——函數概述一、函數的類型1、內置函數2、自定義函數二、調用函數Python 提供了函數機制&#xff0c;把實…

學習Python中Selenium模塊的基本用法(3:下載瀏覽器驅動續)

前一篇文章主要介紹下載針對火狐瀏覽器的WebDriver&#xff0c;寫那篇文章時才找到能夠下最新版本Chrome的WebDriver地址&#xff08;參考文獻6&#xff09;&#xff0c;本文繼續學習并驗證針對Chrome瀏覽器的WebDriver下載和使用方法。Chrome的WebDriver版本與操作系統相關&am…

AIDL當Parcelable序列化的數據類通信時報“Class not found when unmarshalling“找不到該類時的解決方案

1. 報錯棧 &#xff1a;cusText這個類找不到 2 16:01:29.796 1044 5718 E Parcel : Class not found when unmarshalling: com.cus.sdk.cusText 08-02 16:01:29.796 1044 5718 E Parcel : java.lang.ClassNotFoundException: com.cus.sdk.cusText 08-02 16:01:29.796 1…

Django模型查詢與性能調優:告別N+1問題

文章目錄一、查詢基礎QuerySet 詳解一對多關聯查詢多對多關聯查詢二、N1查詢問題問題分析檢測方法解決方案三、高級查詢優化values()values_list()values()和values_list()對比Q() 對象復雜查詢查看生成的 SQL四、項目實戰場景實戰一、查詢基礎 QuerySet 詳解 Django 中通過模…

PyTorch 中 Tensor 統計學函數及相關概念

文章目錄PyTorch 中 Tensor 統計學函數及相關概念一、引言二、基礎統計學函數&#xff08;一&#xff09;torch.mean()——均值計算&#xff08;二&#xff09;torch.sum()——總和計算&#xff08;三&#xff09;torch.prod()——元素積計算&#xff08;四&#xff09;torch.m…

淺拷貝與深拷貝的區別

淺拷貝和深拷貝是兩種不同的對象復制方式&#xff0c;主要區別在于它們如何處理對象內部的引用類型字段。淺拷貝 (Shallow Copy)特點&#xff1a;只復制對象本身&#xff08;基本類型字段&#xff09;和對象中的引用&#xff08;地址&#xff09;不復制引用指向的實際對象原始對…

腳本統計MongoDB集合表數據量

腳本&#xff1a; #!/bin/bashipxxx.xx.xx.xx portxxxx dbxxxdb #user #passwmongo -host ${ip}:${port} <<EOF 2>/dev/null|grep -vE version|not match|session|compressors||Warning|delivers|upcoming|installation|https|switched|bye >collec use ${db}; sho…

圖漾AGV行業常用相機使用文檔

文章目錄1.圖漾相機設置IP1.1 前期準備2.FM851-E2相機2.1 FM851-E2適用場景2.2 FM851-E2 IO線和數據線定義2.2.1 IO接口定義2.2.2 數據接口線2.2.3 相機正面安裝方向2.2.4 相機IO指示燈2.3 FM851-E2/FM855-E2-7相機RGB顏色異常【解決措施1】&#xff1a;【解決措施2】&#xff…

電力系統分析學習筆記(二)- 標幺值計算與變壓器建模

電力系統分析學習筆記&#xff08;二&#xff09;- 標幺值計算與變壓器建模 1. 電力系統參數計算的基本原理 1.1 基本級的概念與選擇 基本級定義&#xff1a; 在多電壓等級的電力系統中&#xff0c;需要將所有參數歸算到同一個電壓等級這個統一的電壓等級稱為基本級 基本級選擇…

防火墻相關技術內容

防火墻的狀態檢測和會話技術一、防火墻的檢測機制早期包過濾防火墻采用逐包檢測機制&#xff0c;對每個報文獨立檢測其源地址、目的地址、端口等信息&#xff0c;根據預設規則決定轉發或丟棄。安全隱患&#xff1a;僅基于單包信息判斷&#xff0c;無法識別連接狀態。例如&#…

在 Mac 上用 Vagrant 安裝 K8s

文章目錄&#x1f4cb; 1. 環境準備1.1 系統要求1.2 軟件清單&#x1f680; 2. 安裝步驟2.1 安裝Parallels Desktop2.2 配置網絡代理&#xff08;可選&#xff09;2.3 安裝Homebrew2,4 準備項目目錄2.5 安裝Vagrant及插件2.6 配置Python環境2.6.1 安裝Python管理工具2.6.2 配置…

【AI學習】RadioDiff:代碼學習

之前學習了RadioDiff這篇論文&#xff0c;最近在復刻相關代碼。 這段代碼實現了一個基于潛在擴散模型&#xff08;Latent Diffusion Model, LDM&#xff09;的訓練框架。借助DeepSeek總體學習一下&#xff1a; 1. 整體結構 代碼主要分為以下幾個部分&#xff1a; 參數解析和…

【專題十七】多源 BFS

&#x1f4dd;前言說明&#xff1a; 本專欄主要記錄本人的基礎算法學習以及LeetCode刷題記錄&#xff0c;按專題劃分每題主要記錄&#xff1a;&#xff08;1&#xff09;本人解法 本人屎山代碼&#xff1b;&#xff08;2&#xff09;優質解法 優質代碼&#xff1b;&#xff…

京東零售在智能供應鏈領域的前沿探索與技術實踐

近日&#xff0c;“智匯運河 智算未來”2025人工智能創新創業大會在杭州召開。香港工程科學院院士、香港大學副校長、研究生院院長、講座教授、京東零售供應鏈首席科學家申作軍教授與供應鏈算法團隊技術總監戚永志博士受邀出席并擔任《AI智慧物流與供應鏈分享會》聯席主席&…

MyBatisPlus之CRUD接口(IService與BaseMapper)

MyBatisPlus之CRUD接口—IService與BaseMapper一、BaseMapper與IService的關系二、BaseMapper核心方法詳解2.1 新增操作&#xff08;Insert&#xff09;2.2 查詢操作&#xff08;Select&#xff09;2.3 更新操作&#xff08;Update&#xff09;2.4 刪除操作&#xff08;Delete&…

axios請求的取消

axios請求的取消解決&#xff1a;axios請求的取消解決&#xff1a;axios請求的取消 在使用 Axios 發起請求時&#xff0c;有時候你可能需要取消這些請求&#xff0c;比如當組件銷毀時或者用戶操作導致不再需要獲取之前發起的請求結果。Axios 支持通過 Cancel Token 取消請求。 …

深入理解C++中的Lazy Evaluation:延遲計算的藝術

在編程世界里&#xff0c;“最好的運算就是從未執行的運算” —— 這句話深刻揭示了性能優化的核心思路。如果一個計算過程最終不會被使用&#xff0c;那么提前執行它就是純粹的資源浪費。這種思想衍生出了 Lazy Evaluation&#xff08;緩式評估&#xff09; 技術&#xff1a;延…