EasyExcel使用介绍
EasyExcel使用
1、EasyExcel介绍
1.1 官网介绍
传统操作Excel大多都是利用Apach POI进行操作的,但是POI框架并不完善,使用过程非常繁琐且有较多的缺陷:
- 动态操作Excel非常繁琐,对于新手来说,很难在短时间内上手;
- 读写时需要占用较大的内存,当数据量大时容易发生内存溢出问题(OOM);
基于上述原因,阿里开源出一款易于上手,且比较节省内存的Excel框架:EasyExcel
注意:easyExcel底层也是使用POI实现的;
官网地址:https://www.yuque.com/easyexcel/doc/easyexcel

依赖资源:
<!--引入easyexcel-->
<dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.0.4</version>
</dependency>
注意:目前版本与JDK8较为契合,高版本的JDK可能会出现兼容性问题;
1.2 Excel相关结构说明

2、EasyExcel导出数据快速入门
2.1 构建测试实体类
package com.itheima.stock.pojo;import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;import java.io.Serializable;
import java.util.Date;/*** @author by itheima* @Date 2021/12/19* @Description*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class User implements Serializable {private String userName;private Integer age;private String address;private Date birthday;
}
2.2 数据导出到excel
package com.itheima.stock;import com.alibaba.excel.EasyExcel;
import com.itheima.stock.pojo.User;
import org.junit.jupiter.api.Test;import java.util.ArrayList;
import java.util.Date;
import java.util.List;/*** @author by itheima* @Date 2021/12/31* @Description*/
public class TestEasyExcel {public List<User> init(){//组装数据ArrayList<User> users = new ArrayList<>();for (int i = 0; i < 10; i++) {User user = new User();user.setAddress("上海"+i);user.setUserName("张三"+i);user.setBirthday(new Date());user.setAge(10+i);users.add(user);}return users;}/*** 直接导出后,表头名称默认是实体类中的属性名称*/@Testpublic void test02(){List<User> users = init();//不做任何注解处理时,表头名称与实体类属性名称一致EasyExcel.write("C:\\Users\\46035\\Desktop\\ex\\用户.xls",User.class).sheet("用户信息").doWrite(users);}
}
2.3 自定义表头
修改User实体类,设置表头数据和排序规则:
package com.itheima.stock.pojo;import com.alibaba.excel.annotation.ExcelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.Date;/*** @author by itheima* @Date 2021/12/19* @Description*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
/*** 通过注解自定义表头名称 注解添加排序规则,值越大 越靠近右边
*/
public class User implements Serializable {@ExcelProperty(value = {"用户名"},index = 1)private String userName;@ExcelProperty(value = {"年龄"},index = 2)private Integer age;@ExcelProperty(value = {"地址"} ,index = 4)private String address;@ExcelProperty(value = {"生日"},index = 3)private Date birthday;
}
3、EasyExcel导出数据高级设置
3.1 自定义日期格式
package com.itheima.stock.pojo;import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.format.DateTimeFormat;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;import java.io.Serializable;
import java.util.Date;/*** @author by itheima* @Date 2021/12/19* @Description*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class User implements Serializable {@ExcelProperty(value = {"用户名"},index = 1)private String userName;@ExcelProperty(value = {"年龄"},index = 2)private Integer age;@ExcelProperty(value = {"地址"} ,index = 4)private String address;@ExcelProperty(value = {"生日"},index = 3)//注意:日期格式注解由alibaba.excel提供@DateTimeFormat("yyyy/MM/dd HH:mm")private Date birthday;
}
3.2 合并表头
添加合并表头信息:
package com.itheima.stock.pojo;import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.format.DateTimeFormat;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;import java.io.Serializable;
import java.util.Date;/*** @author by itheima* @Date 2021/12/19* @Description*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class User implements Serializable {@ExcelProperty(value = {"用户基本信息","用户名"},index = 1)private String userName;@ExcelProperty(value = {"用户基本信息","年龄"},index = 2)private Integer age;@ExcelProperty(value = {"用户基本信息","地址"} ,index = 4)private String address;@ExcelProperty(value = {"用户基本信息","生日"},index = 3)//注意:日期格式注解由alibaba.excel提供@DateTimeFormat("yyyy/MM/dd HH:mm")private Date birthday;
}
mage-20211231181430686.png&pos_id=img-83ZjlIYT-1727413984023)
3.3 忽略指定表头信息
/*** @author by itheima* @Date 2021/12/19* @Description*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class User implements Serializable {@ExcelProperty(value = {"用户基本信息","用户名"},index = 1)@ExcelIgnoreprivate String userName;@ExcelProperty(value = {"用户基本信息","年龄"},index = 2)private Integer age;@ExcelProperty(value = {"用户基本信息","地址"} ,index = 4)private String address;@ExcelProperty(value = {"用户基本信息","生日"},index = 3)//注意:日期格式注解由alibaba.excel提供@DateTimeFormat("yyyy/MM/dd HH:mm")private Date birthday;
}
3.4 设置单元格大小
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@HeadRowHeight(value = 35) // 表头行高
@ContentRowHeight(value = 25) // 内容行高
@ColumnWidth(value = 50) // 列宽
public class User implements Serializable {@ExcelProperty(value = {"用户基本信息","用户名"},index = 1)@ExcelIgnoreprivate String userName;@ExcelProperty(value = {"用户基本信息","年龄"},index = 2)private Integer age;@ExcelProperty(value = {"用户基本信息","地址"} ,index = 4)private String address;@ExcelProperty(value = {"用户基本信息","生日"},index = 3)//注意:日期格式注解由alibaba.excel提供@DateTimeFormat("yyyy/MM/dd HH:mm")private Date birthday;
}
4、EasyExcel导入数据
/*** excel数据格式必须与实体类定义一致,否则数据读取不到*/@Testpublic void readExcel(){ArrayList<User> users = new ArrayList<>();//读取数据EasyExcel.read("C:\\Users\\46035\\Desktop\\ex\\用户.xls", User.class, new AnalysisEventListener<User>() {@Overridepublic void invoke(User o, AnalysisContext analysisContext) {System.out.println(o);users.add(o);}@Overridepublic void doAfterAllAnalysed(AnalysisContext analysisContext) {System.out.println("完成。。。。");}}).sheet().doRead();System.out.println(users);}
相关文章:
EasyExcel使用介绍
EasyExcel使用 1、EasyExcel介绍 1.1 官网介绍 传统操作Excel大多都是利用Apach POI进行操作的,但是POI框架并不完善,使用过程非常繁琐且有较多的缺陷: 动态操作Excel非常繁琐,对于新手来说,很难在短时间内上手;读写时需要占用…...
字段临时缓存包装器
前言 在实际开发中,我们有时候存在一种需求,例如对于某个字段,我们希望在某个明确的保存节点前对字段的修改都仅作为缓存保留,最终是否应用这些修改取决于某些条件,比如玩家对游戏设置的修改可能需要玩家明确确认应用修…...
Python(三)——列表
文章目录 创建列表访问下标遍历列表元素新增元素查找元素删除元素连接列表切片操作 创建列表 创建列表主要有两种方式 [ ]表示一个空的列表 a [] print(type(a)) # <class list> print(a) # []通过list()的方式来创建一个空列表 a list() print(type(a)) # …...
MySQL--三大范式(超详解)
目录 一、前言二、三大范式2.1概念2.2第一范式(1NF)2.3第二范式(2NF)2.3第三范式(3NF) 一、前言 欢迎大家来到权权的博客~欢迎大家对我的博客进行指导,有什么不对的地方,我会及时改进…...
追梦无Bug的软件世界
追梦无Bug的软件世界:测试人员的视角与探索 我有一个梦想,今天我们共同承载着一个愿景:创造一个没有Bug的软件世界。 我梦想有一天,用户将享受到完全无Bug的软件体验,用户不再因为软件中的Bug而感到困扰和沮丧。 我梦…...
在C#中使用Redis实现高效消息队列
使用Redis实现C#中的消息队列 Redis是一种开源的内存数据结构存储系统,因其高性能和灵活性被广泛用于缓存、数据库和消息队列等场景。本文将详细介绍如何在C#中使用Redis实现一个简单的消息队列,涵盖环境准备、代码实现和使用示例。 1. 环境准备 1.1 安装Redis 首先,确保…...
微服务JMeter解析部署使用全流程
目录 1、介绍 2、下载 3、运行 4、设置简体中文版 5、开始测试 1、添加线程组 2、添加监听器 3、添加请求 先.测试userController里的查询方法 6、查看结果 1、查看结果树 2、汇总报告 3、聚合报告 7、JMeter报错 1、介绍 Apache JMeter 是 Apache 组织基于 Java…...
Python 从入门到实战32(数据库MySQL)
我们的目标是:通过这一套资料学习下来,通过熟练掌握python基础,然后结合经典实例、实践相结合,使我们完全掌握python,并做到独立完成项目开发的能力。 上篇文章我们讨论了数据库编程接口操作的相关知识。今天我们将学习…...
hrnet训练的pt模型结合目标检测进行关键点识别的更准确前向推理
本篇在将图像输入hrnet识别之前先进行目标检测来确定识别的位置,让识别更加精准。 本段代码设置了一个区域框BOX,让人走入区域内才开始检测,适用于考核等场景,也可以直接去掉BOX也是一样的效果。若画面背景中有多个行人࿰…...
Leetcode 3306. Count of Substrings Containing Every Vowel and K Consonants II
Leetcode 3306. Count of Substrings Containing Every Vowel and K Consonants II 1. 解题思路2. 代码实现 题目链接:3306. Count of Substrings Containing Every Vowel and K Consonants II 1. 解题思路 这一题的话思路上就是一个滑动窗口,考察没一…...
算法笔记(五)——分治
文章目录 算法笔记(五)——分治快排颜色分类排序数组数组中的第K个最大元素库存管理 III 归并排序数组交易逆序对的总数计算右侧小于当前元素的个数翻转对 算法笔记(五)——分治 分治算法字面上的解释是“分而治之”,就…...
多级侧边菜单(递归)
需要编写两个文件 aside-menu.vue 和 menu-item.vue menu-item.vue <script setup> defineOptions({name: MenuItem}) defineProps({menuList: Array}) </script><template><template v-for"menu of menuList"><!-- 如果当前有子菜单&a…...
JavaScript break与continue语句
break语句和continue语句都具有跳转作用,可以让代码不按既有的顺序执行。 break break语句用于跳出代码块或循环 for(i0;i<100;i){if(i5){break;}console.log(i);} continue continue语句用于应即终止本轮循环,返回循环结构的头部,开始下一轮循环。…...
算法【从递归入手一维动态规划】
动态规划:用空间代替重复计算,包含一整套原理和技巧的总和。后面会有非常多的文章介绍动态规划。 有些递归在展开计算时,总是重复调用同一个子问题的解,这种重复调用的递归变成动态规划很有收益。如果每次展开都是不同的解&#…...
Linux中的进程间通信之共享内存
共享内存 共享内存示意图 共享内存数据结构 struct shmid_ds {struct ipc_perm shm_perm; /* operation perms */int shm_segsz; /* size of segment (bytes) */__kernel_time_t shm_atime; /* last attach time */__kernel_time_t shm_dtime; /* last detach time */__kerne…...
第18周 3-过滤器
过滤器(Filter)概念总结 什么是过滤器 过滤器(Filter)是Java Web应用中用于统一拦截和处理请求的组件,类似于现实生活中的空气净化器或安检。它通过对请求进行前置处理,确保请求符合特定要求。 过滤器的…...
Linux之进程概念
作者主页: 作者主页 本篇博客专栏:Linux专栏 创作时间 :2024年9月28日 基本概念: 进程说白了其实就是一个程序的执行实例,正在执行的程序。 在内核层面来说,就是一个担当分配资源(CPU时间…...
小程序-使用npm包
目录 Vant Weapp 安装 Vant 组件库 使用 Vant 组件 定制全局主题样式 API Promise化 1. 基于回调函数的异步 API 的缺点 2. 什么是 API Promise 化 3. 实现 API Promise 化 4.调用 Promise 化之后的异步 API 小程序对 npm 的支持与限制 目前,小程序中已经…...
【springboot】整合沙箱支付
目录 1. 配置沙箱应用环境2. 配置springboot项目1. 引入依赖2. 配置文件注册下载ngrok 3. 创建支付宝支付服务类4. 支付界面模板5. 控制类实现支付6. 测试 1. 配置沙箱应用环境 使用支付宝账号登录到开放平台控制台。 使用支付宝登录后,看到以下页面,下…...
技术速递|Python in Visual Studio Code 2024年9月发布
排版:Alan Wang 我们很高兴地宣布将于 2024 年 9 月发布适用于 Visual Studio Code 的 Python 和 Jupyter 扩展! 此版本包括以下公告: Django 单元测试支持使用 Pylance 从 inlay 提示转到定义 如果您有兴趣,可以在我们的 Pyth…...
思科路由器远程管理保姆级教程:从IP配置到Telnet/SSH登录全流程(避坑line vty和密码设置)
思科路由器远程管理全流程实战指南:从基础配置到安全登录 刚接触思科设备时,最让人头疼的莫过于那一连串看似晦涩的命令行操作。记得我第一次尝试配置路由器远程访问时,明明按照教程一步步操作,却始终无法通过Telnet连接ÿ…...
开源创意资产管理平台Buddy:设计团队协作与版本控制实践
1. 项目概述:一个为创意协作而生的开源平台如果你在团队里负责过创意项目,无论是UI设计、视频剪辑还是产品原型开发,大概率都经历过这样的混乱:设计稿的版本号从V1.0一路飙升到V12_final_really_final.psd;开发同学在群…...
Ask your GIT:AI驱动的代码仓库智能助手,一键解析与安装
1. 项目概述:一个为开发者“减负”的智能代码助手在GitHub、GitLab或者Bitbucket上发现一个看起来很有潜力的开源项目,是每个开发者的日常。但随之而来的,往往是长达十几甚至几十分钟的“阅读理解”时间:你得先通读冗长的README&a…...
暗黑2存档编辑器:免费开源工具助你轻松修改角色与装备
暗黑2存档编辑器:免费开源工具助你轻松修改角色与装备 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor 暗黑2存档编辑器是一款专门为《暗黑破坏神2》玩家设计的免费开源工具,让你能够轻松修改游戏存档&…...
从“能用”到“可靠”:基于SonarQube与Jenkins的代码质量防线构建实战
当测试覆盖率不再只是一串数字,而是合并代码前的“一票否决权” 1. 为什么你的“质量门禁”只是个摆设? 在很多团队的CI/CD流水线中,SonarQube的集成往往停留在“能跑就行”的阶段。流水线里确实有代码扫描这一步,日志里也打印出…...
保姆级教程:用PyTorch复现STANet遥感变化检测模型(附LEVIR-CD数据集下载与配置)
从零实现STANet:基于PyTorch的遥感变化检测实战指南 开篇:为什么选择STANet进行遥感变化检测? 当我们需要监测城市扩张、灾害评估或基础设施变化时,遥感变化检测技术显得尤为重要。传统方法往往受限于光照变化和配准误差ÿ…...
计算机视觉工程师必须掌握的颜色空间选型指南
1. 项目概述:为什么计算机视觉工程师必须懂颜色理论你有没有遇到过这样的情况:模型在训练集上准确率98%,一到测试集就掉到72%?调试半天发现,不是数据标注错了,也不是网络结构有问题,而是训练图像…...
开关电源传导共模噪声抑制:Y电容原理、安规限制与EMI滤波器设计
1. 项目概述:理解隔离式开关电源中的传导共模噪声在开发离线式开关电源,比如我们常见的手机充电器、笔记本电脑适配器或者工业电源模块时,工程师们常常会遇到一个既棘手又必须解决的难题:传导电磁干扰(Conducted EMI&a…...
GitAhead本地化配置详解:打造最适合你的中文Git环境
GitAhead本地化配置详解:打造最适合你的中文Git环境 【免费下载链接】gitahead Understand your Git history! 项目地址: https://gitcode.com/gh_mirrors/gi/gitahead GitAhead是一款功能强大的Git客户端工具,旨在帮助开发者更直观地理解和管理G…...
用Claude Code+R零代码复现医学顶刊论文:零基础到掌握全流程医学SCI论文训练营
人工智能飞速发展,对于研究生、科研工作者而言,只需要聚焦研究问题创新,统计实操、图表制作、结果呈现等等SCI论文中涉及的工作都有工具可以帮你……我们团队最新开设:“零基础掌握SCI论文全流程:Claude CodeR零代码复…...
