EasyExcel导出多个sheet封装
导出多个sheet
在需求中,会有需要导出多种sheet的情况,那么这里使用easyexcel进行整合
步骤
1、导入依赖
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.1.1</version></dependency>
2、Sheet类
主要封装了需要导出的sheet,类,数据等
package com.eshore.easyexcel.entity;import lombok.Builder;
import lombok.Data;import java.util.List;@Data
public class SheetInfoBean<T> {/*** sheet页名称*/private String sheetName;/*** sheet标题bean*/private Class<?> headClass;/*** sheet页数据*/private List<T> dataList;public SheetInfoBean(String sheetName, Class<?> headClass, List<T> dataList) {this.sheetName = sheetName;this.headClass = headClass;this.dataList = dataList;}
}
3、导出方法
package com.eshore.easyexcel.utils;import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.eshore.easyexcel.entity.SheetInfoBean;
import lombok.extern.slf4j.Slf4j;import java.io.File;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;@Slf4j
public class EasyExcelUtils {private final static String XLSX=".xlsx";/*** author:walker* time: 2024/6/4* description: 导出文件* prefix:前缀 如: D:/hello/* title:文件名称 如: test* @return*/public static String exportFile(List<SheetInfoBean> sheetInfoBeans,String prefix,String title){// 导出文件String path=prefix+title+XLSX;File dir = new File(prefix);if(!dir.exists()){dir.mkdirs();}File file = new File(path);try(ExcelWriter excelWriter = EasyExcel.write(file).build()) {WriteSheet writeSheet;List<String> exclueFields = new ArrayList<>();for (SheetInfoBean bean : sheetInfoBeans) {Class<?> headClass = bean.getHeadClass();Field[] declaredFields = headClass.getDeclaredFields();for (Field declaredField : declaredFields) {ExcelProperty annotation = declaredField.getAnnotation(ExcelProperty.class);if(annotation==null) {exclueFields.add(declaredField.getName());}}// 构建sheet对象writeSheet = EasyExcel.writerSheet(bean.getSheetName()).head(bean.getHeadClass()).excludeColumnFieldNames(exclueFields).build();// 写出sheet数据excelWriter.write(bean.getDataList(), writeSheet);}// 关流excelWriter.finish();} catch (Exception e) {log.error("导出失败,原因如下:",e);// do something you want}return path;}
}
注意:
里面做了一个处理,就是当没有@ExcelProperty的时候,该字段则不导出,否则需要对字段进行excludeColumnFieldNames的设置。相对来说麻烦一些
4、案例
需要使用@ExcelProperty对属性进行配置
1、学生类
package com.walker.sample.easyexcel;import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;@Data
public class Student {@ExcelProperty("姓名")private String name;@ExcelProperty("年龄")private Integer age;
}
2、老师类
package com.walker.sample.easyexcel;import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;@Data
public class Teacher {@ExcelProperty("姓名")private String name;@ExcelProperty("年龄")private Integer age;
}
3、测试方法
package com.walker.sample.easyexcel;import easyexcel.entity.SheetInfoBean;
import easyexcel.utils.EasyExcelUtils;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;import java.util.ArrayList;
import java.util.List;@Slf4j
@SpringBootTest
public class EasyExcelTest {@Testpublic void export(){List<Student> students = new ArrayList<>();for (int i = 0; i < 10; i++) {Student student = new Student();student.setName("学生"+i);student.setAge(i);students.add(student);}List<Teacher> teachers = new ArrayList<>();for (int i = 0; i < 10; i++) {Teacher teacher = new Teacher();teacher.setName("老师"+i);teacher.setAge(i);teachers.add(teacher);}List<SheetInfoBean> sheetInfoBeans = new ArrayList<>();sheetInfoBeans.add(new SheetInfoBean("学生",Student.class,students));sheetInfoBeans.add(new SheetInfoBean("老师",Teacher.class,teachers));String prefix="D:/";EasyExcelUtils.exportFile(sheetInfoBeans,prefix,"学生老师表");}
}
4、导出结果
相关文章:
EasyExcel导出多个sheet封装
导出多个sheet 在需求中,会有需要导出多种sheet的情况,那么这里使用easyexcel进行整合 步骤 1、导入依赖 <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><d…...
【Python错误】:AttributeError: ‘generator‘ object has no attribute ‘next‘解决办法
【Python错误】:AttributeError: ‘generator’ object has no attribute next’解决办法 在Python中,生成器是一种使用yield语句的特殊迭代器,它允许你在函数中产生一个值序列,而无需一次性创建并返回整个列表。然而,…...
如何配置Feign以实现服务调试
1、引入依赖 在项目中,需要引入Spring Cloud OpenFeign的依赖。这通常是通过在pom.xml文件中添加相应的Maven依赖来完成的。例如: <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starte…...
pc之间的相互通信详解
如图,实现两台pc之间的相互通信 1.pc1和pc2之间如何进行通讯。 2.pc有mac和ip,首先pc1需要向sw1发送广播,sw1查询mac地址表,向router发送广播,router不接受广播,router的每个接口都有ip和mac,…...
Mongodb中字段的删除
学习mongodb,体会mongodb的每一个使用细节,欢迎阅读威赞的文章。这是威赞发布的第61篇mongodb技术文章,欢迎浏览本专栏威赞发布的其他文章。 本篇文章,探讨UPDATE中的操作符$unset。Mongodb数据插入后,开发人员使用$u…...
TP8 PHP 动态变量调用 (new $class())->$action($data)
动态: $class \app\table\model\Log; $action DataSave; $data [...]; // 假设这是你要保存的数据//class_exists和method_exists的检查,这段代码能够在尝试实例化类或调用方法之前,先验证类是否存在以及该类中是否存在指定的方法。如果类…...
理解JVM内存模型与Java内存模型(JMM)
理解JVM内存模型与Java内存模型(JMM) 在Java程序的运行过程中,内存管理和线程的同步是两个重要的概念。本文将深入探讨JVM内存模型(Java Virtual Machine Memory Model)和JMM(Java Memory Model࿰…...
鸿蒙OS初识
学习官网:https://www.harmonyos.com/cn/develop 准备 注册,安装软件(node:12, DevEco Studio): https://developer.harmonyos.com/cn/docs/documentation/doc-guides/software_install-0000001053582415#ZH-CN_TOP…...
发布自己的 npm 插件包:步骤与最佳实践
在 Node.js 的生态系统中,npm(Node Package Manager)是一个不可或缺的组成部分。npm 允许开发者创建、共享和使用各种库和插件。如果你有自己的 Node.js 插件或库,并且希望与全世界的其他开发者共享,那么发布到 npm 是…...
BubbleML: A Multiphase Multiphysics Dataset and Benchmarks for Machine Learning
我们使用以下六个分类标准: 研究方法: 这个标准根据如何收集和分析数据来区分研究方法。 实验研究,如参考文献[64]中的研究,涉及在受控环境中研究人员操纵变量并观察结果的物理实验。这种方法对于收集真实世界的数据很有价值,但可能成本高且耗时。模拟研究利用计算模型来模…...
vscode+latex设置跳转快捷键
安装参考 https://blog.csdn.net/Hacker_MAI/article/details/130334821 设置默认recipe ctrl P 打开设置,搜索recipe 也可以点这里看看有哪些配置 2 设置跳转快捷键...
PHP序列化、反序列化
目录 一、PHP序列化:serialize() 1.对象序列化 2.pop链序列化 3.数组序列化 二、反序列化:unserialize() 三、魔术方法 四、NSSCTF相关简单题目 1.[SWPUCTF 2021 新生赛]ez_unserialize 2.[SWPUCTF 2021 新生赛]no_wakeup 学习参考࿱…...
websocket链接携带参数
前端创建链接时官方提供的构造函数 var aWebSocket new WebSocket(url, [protocols]); url:要连接的URL;这应该是WebSocket服务器将响应的URL。 protocols:可选;一个协议字符串或者一个包含协议字符串的数组。这些字符串用于指定…...
【C++进阶】深入STL之list:模拟实现深入理解List与迭代器
📝个人主页🌹:Eternity._ ⏩收录专栏⏪:C “ 登神长阶 ” 🤡往期回顾🤡:初步了解 list 🌹🌹期待您的关注 🌹🌹 ❀STL之list 📒1. list…...
技术管理之巅—如何从零打造高质效互联网技术团队阅读体验
技术管理之巅—如何从零打造高质效互联网技术团队 《技术管理之巅:如何从零打造高质效互联网技术团队》是黄哲铿所著的一本书,致力于帮助技术管理者从零开始打造高效的互联网技术团队。该书分为多个章节,分别探讨了从团队文化建设到技术架构…...
机器学习与数据挖掘知识点总结(一)
简介:随着人工智能(AI)蓬勃发展,也有越来越多的人涌入到这一行业。下面简单介绍一下机器学习的各大领域,机器学习包含深度学习以及强化学习,在本节的机器学习中主要阐述一下机器学习的线性回归逻辑回归&…...
行心科技中禄松波携手,开启智能健康新时代
在2024年第34届健博会暨中国大健康产业文化节的盛大舞台上,广州市行心信息科技有限公司(以下简称“行心科技”)与浙江中禄松波生物工程有限公司(以下简称“中禄松波”)宣布达成战略合作,共同推动医康养产业…...
前端多人项目开发中,如何保证CSS样式不冲突?
在前端项目开发中,例如突然来了一个大项目,很可能就需要多人一起开发,领导说了,要快,要快,要快,你们给我快。然后下面大伙就一拥而上,干着干着发现,一更新代码࿰…...
【YOLOv10改进[CONV]】使用DualConv二次创新C2f模块实现轻量化 + 含全部代码和详细修改方式 + 手撕结构图 + 全网首发
本文将使用DualConv二次创新C2f模块实现轻量化,助力YOLOv10目标检测效果的实践,文中含全部代码、详细修改方式以及手撕结构图。助您轻松理解改进的方法。 改进前和改进后的参数对比: 目录 一 DualConv 1 结合33卷积和11卷积核 2 DualConv 3 可视化 二 C2f_DualConv助…...
基于SSM+Jsp的高校信息资源共享平台
开发语言:Java框架:ssm技术:JSPJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包…...
软件测试--Linux快速入门
文章目录 软件测试-需要掌握的Linux指令Linux命令操作技巧Linx命令的基本组成常用命令 软件测试-需要掌握的Linux指令 Linux命令操作技巧 使用Tab键自动补全上下键进行翻找之前输入的命令命令执行后无法停止使用CtrC,结束屏幕输出 Linx命令的基本组成 命令 [-选项] [参数] …...
module ‘django_cas_ng.views‘ has no attribute ‘login‘
这个错误表明你正在尝试从django_cas_ng.views模块中访问一个名为login的属性,但是这个模块中并没有名为login的属性或方法。 解决这个问题,你需要确认你的代码中是否有错误的引用。django_cas_ng是一个CAS(Central Authentication Service&…...
CW32F030K8T7单片机在即热式热水器的应用介绍
随着智能家居技术的不断进步,即热式热水器作为现代家庭中的重要组成部分,正逐渐向智能化、节能化方向发展。本方案通过采用武汉芯源半导体的CW32F030系列单片机,以其高性能、超强抗干扰等特性,为即热式热水器的智能化提供了理想的…...
HTML静态网页成品作业(HTML+CSS)—— 美食湘菜介绍网页(5个页面)
🎉不定期分享源码,关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 🏷️本套采用HTMLCSS,未使用Javacsript代码,共有5个页面。 二、作品演示 三、代…...
使用redis构建简单的社交网站
Redis命令实践通常涉及对Redis服务器的直接操作,包括数据的增删改查以及管理Redis实例。以下是一些基本的Redis命令及其使用场景: 连接Redis服务器: 使用Redis客户端连接到Redis服务器:redis-cli 设置和获取键值对: SET key value࿱…...
【Java面试】九、微服务篇-SpringCloud(上)
文章目录 1、SpringCloud五大组件2、服务注册和发现2.1 Eurake2.2 Eurake和Nacos的区别 3、Ribbon负载均衡3.1 策略3.2 自定义负载均衡策略 4、服务雪崩与熔断降级4.1 服务雪崩4.2 服务降级4.3 服务熔断 5、服务限流5.1 Nginx限流5.2 网关限流 6、微服务监控7、面试 1、SpringC…...
Python 树状数组
树状数组(Binary Indexed Tree, BIT),又称为斐波那契堆,是一种数据结构,用于高效地解决以下问题: 单点更新:在数组的某个位置增加或减少一个值。区间查询:查询数组中一段连续区间的…...
【QEMU中文手册】2.2 调用方式(持续更新中)
本文由 AI 翻译(ChatGPT-4)完成,并由作者进行人工校对。如有任何问题或建议,欢迎联系我。联系方式:jelin-shoutlook.com。 原文:Invocation — QEMU documentation qemu-system-x86_64 [选项] [磁盘镜像]磁…...
(函数)判断一句话中最长的单词(C语言)
一、运行结果; 二、源代码; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>//声明函数; int aiphabetic(char); int longest(char[]);int main() {//初始化变量值;int i;char line[100] { 0 };//获取用户输入字符…...
QT5.5.0中使用lambda表达式时遇到的问题
QT5.5中使用lambda表达式的遇到的error_qt中lamda不起作用-CSDN博客...
游戏推广是干什么/谷歌seo
防火墙原是指建筑物大厦用来防止火灾蔓延的隔断墙。从理论上讲,Internet防火墙服务也属于类似的用来防止外界侵入的。它可以防止Internet上的各种危险(病毒、资源盗用等)传播到你的网络内部。而事实上,防火墙并不像现实生活中的防…...
装修案例/搜索引擎优化的英文
开启redis-server提示 # Creating Server TCP listening socket *:6379: bind: Address already in use--解决方法参考文章: (1)开启redis-server提示 # Creating Server TCP listening socket *:6379: bind: Address already in use--解决方…...
重庆建筑特种作业查询网/专业网站优化外包
Exchange2013不同于2010的最大之处就在于使用Web管理控制台!在 Exchange 2013 中,原本在 Exchange 2007 和 Exchange 2010 中使用的管理控制台EMC已经不存在了,新的管理控制台是基于Web模式的,它可以在无需安装任何管理工具的电脑中访问和管理…...
专门做淘宝代运营的网站/竞价推广招聘
配置PHP.ini 更改配置项(必须)auto_prepend_file "C:\xampp\htdocs\auto_prepend_file.php" 更改配置项(可选)allow_url_include On auto_prepend_file.php文件内容 <?php /*** 引入static文件* param {array|str…...
如何做公司的网站建设/全球最牛的搜索引擎
导读你是否想要了解安装包中各个文件在 Linux 系统中安装(位于)的位置?我们将在本文介绍如何列出文件的来源,或存在于某个特定包或者一组软件包中的文件。这篇文章可以帮你轻松地找到重要的软件包文件,如配置文件、帮助文档等。我们来看看找出…...
傻瓜式网站建设/营销软文范例大全100字
转载 Nginx作为反向代理并以HTTP协议反向代理HTTPS服务 - 互联网科技 - 亿速云 这篇文章主要介绍“Nginx作为反向代理并以HTTP协议反向代理HTTPS服务”,在日常操作中,相信很多人在Nginx作为反向代理并以HTTP协议反向代理HTTPS服务问题上存在疑惑&#x…...