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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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;延…