使用 EasyExcel 提升 Excel 处理效率
目录
- 前言
- 1. EasyExcel 的优点
- 2. EasyExcel 的功能
- 3. 在项目中使用 EasyExcel
- 3.1 引入依赖
- 3.2 实体类的定义与注解
- 3.3 工具类方法的实现
- 3.4 在 Controller 中使用
- 4. 总结
- 5. 参考地址
前言
在日常开发中,Excel 文件的处理是不可避免的一项任务,特别是在需要批量导入和导出数据的场景中。传统的 Apache POI 虽然功能强大,但在大文件处理和使用便捷性上存在一定的不足。为了解决这些问题,阿里巴巴推出了 EasyExcel,一个专注于高性能和简洁性的 Excel 处理工具。本篇文章将带领大家深入了解 EasyExcel 的优点和功能,并结合实例讲解如何在项目中高效使用。
1. EasyExcel 的优点
1.1 快速
EasyExcel 在处理 Excel 文件时,通过采用流式读取和写入的方式,极大地减少了内存占用,尤其适合处理百万行数据的大文件场景。与 Apache POI 相比,它能够更快速地完成文件的读写操作。
1.2 简洁
EasyExcel 的 API 设计非常简洁,开发者只需掌握几个核心类和注解即可轻松实现复杂的 Excel 操作。这种设计降低了学习成本,同时提高了开发效率。
1.3 兼容 Apache POI
虽然 EasyExcel 是一个独立的工具,但它兼容 Apache POI 的部分操作。对于一些 EasyExcel 尚未支持的高级功能,可以通过 POI 补充实现,极大地提高了灵活性。
2. EasyExcel 的功能
2.1 读取 Excel 文件
EasyExcel 提供了简单的接口用于读取 Excel 数据,无需手动解析复杂的表格结构,只需定义对应的实体类即可轻松映射表格中的数据。
2.2 写入 Excel 文件
通过 EasyExcel,可以快速生成 Excel 文件,并支持自定义表头样式、列宽和单元格样式等。
2.3 填充 Excel 文件
EasyExcel 支持基于模板填充数据。这种方式非常适合生成格式复杂的报表,例如财务报表或统计报表,只需提供模板文件和填充数据即可完成生成。
3. 在项目中使用 EasyExcel
接下来,通过具体步骤讲解如何将 EasyExcel 集成到项目中,并实现 Excel 文件的读写和填充。
3.1 引入依赖
在使用 EasyExcel 之前,需要在项目的 pom.xml
文件中引入其依赖:
<dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.2.0</version>
</dependency>
请确保版本号为最新稳定版,以获得最新特性和修复的 bug。
3.2 实体类的定义与注解
在使用 EasyExcel 时,实体类的定义非常重要。通过注解可以灵活地定义 Excel 的导入和导出规则。
以下是一个实体类的示例代码:
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.alibaba.excel.annotation.write.style.HeadFontStyle;
import com.alibaba.excel.annotation.write.style.HeadRowHeight;@ExcelIgnoreUnannotated // 忽略未标注的字段
@ColumnWidth(16) // 设置列宽
@HeadRowHeight(14) // 设置表头行高
@HeadFontStyle(fontHeightInPoints = 11) // 设置表头字体大小
public class Product {@ExcelProperty("商品名称") // 映射 Excel 表头private String name;@ExcelProperty("价格")private Double price;@ExcelProperty("库存")private Integer stock;// Getters 和 Setters
}
通过这些注解,EasyExcel 可以根据实体类自动生成表头,极大简化了开发工作。
3.3 工具类方法的实现
为了方便在项目中复用,可以封装一个工具类来处理 Excel 文件的读写操作。
以下是一个工具类示例:
import com.alibaba.excel.EasyExcel;
import java.util.List;public class ExcelUtils {// 读取 Excel 文件public static <T> List<T> readExcel(String filePath, Class<T> clazz) {return EasyExcel.read(filePath).head(clazz).sheet().doReadSync();}// 写入 Excel 文件public static <T> void writeExcel(String filePath, List<T> data, Class<T> clazz) {EasyExcel.write(filePath, clazz).sheet("Sheet1").doWrite(data);}
}
3.4 在 Controller 中使用
在实际业务中,我们可以在 Controller 层调用上述工具类实现 Excel 的导入导出。
以下是一个示例代码:
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;@RestController
@RequestMapping("/excel")
public class ExcelController {// 导入 Excel@PostMapping("/import")public String importExcel(@RequestParam("file") MultipartFile file) throws IOException {List<Product> products = ExcelUtils.readExcel(file.getInputStream(), Product.class);// 处理业务逻辑return "导入成功,数据条数:" + products.size();}// 导出 Excel@GetMapping("/export")public void exportExcel(HttpServletResponse response) throws IOException {List<Product> products = fetchProducts(); // 从数据库获取数据response.setContentType("application/vnd.ms-excel");response.setHeader("Content-Disposition", "attachment;filename=products.xlsx");ExcelUtils.writeExcel(response.getOutputStream(), products, Product.class);}
}
通过以上代码,可以快速实现 Excel 文件的导入导出功能。
4. 总结
EasyExcel 以其高性能、简洁性和强大的功能,成为处理 Excel 文件的首选工具。通过本文的讲解,相信大家已经了解了 EasyExcel 的基本特性以及如何在项目中高效使用它。无论是读取、写入还是模板填充,EasyExcel 都能轻松胜任,为开发者节省了大量时间。
5. 参考地址
EasyExcel官方文档 - 基于Java的Excel处理工具 | Easy Excel 官网
相关文章:
使用 EasyExcel 提升 Excel 处理效率
目录 前言1. EasyExcel 的优点2. EasyExcel 的功能3. 在项目中使用 EasyExcel3.1 引入依赖3.2 实体类的定义与注解3.3 工具类方法的实现3.4 在 Controller 中使用 4. 总结5. 参考地址 前言 在日常开发中,Excel 文件的处理是不可避免的一项任务,特别是在…...
驱鸟器自定义播放音乐,低成本语音方案选型-N9305九芯电子
一、开发背景: 随着农业现代化的不断推进,鸟类对农作物的侵扰问题愈发严重。传统的驱鸟方法,如人工驱赶或使用化学药剂,不仅效率低下,而且可能对环境造成污染。因此,开发一种高效、环保、低成本的驱鸟器成…...
【html css选择器】
在 CSS 中,你可以通过选择器来选择 HTML 元素,并为其设置样式。以下是一些常见的 CSS 选择器和样式设置方法: 1. 基本选择器 元素选择器:选择特定的 HTML 元素。 p {color: blue;font-size: 16px; }类选择器:选择具有…...
mongoDb的读session和写session权限报错问题
go在使用mongoDb时用到了全局会话,发现在创建的session的逻辑相同,首先会进行数据的查询,此时获取了全局session执行读操作,查询所有文档,则当前会话为读会话,当再去插入时发现会报错,此时sessi…...
如何避免缓存击穿?超融合常驻缓存和多存储池方案对比
作者:SmartX 解决方案专家 钟锦锌 很多运维人员都知道,混合存储介质配置可能会带来“缓存击穿”的问题,尤其是大数据分析、数据仓库等需要频繁访问“冷数据”的应用场景,缓存击穿可能会更频繁地出现,影响业务运行。除…...
c语言专题之单链表的实现
在之前的博客中小编已经讲解了顺序表及其应用,所以在将讲单链表之前,我们先来重新思考一下顺序表,这里我先来讲顺序表的几个小缺点: 1.顺序表中在我们数据时,如头插、在指定位置插入等,我们通常需要整体挪动…...
Spring 源码学习(七)——注解后处理器
通过之前对注解式配置的解析(Spring 源码学习(三)—— 注解式配置解析_spring源码学习-CSDN博客)可以发现其使用 AnnotationConfigUtils 类的 registerAnnotationConfigProcessors 静态方法对象注解后处理器对象进行注册ÿ…...
GEE训练教程——基于 Sentinel-1 数据对 Felső-Kiskunság 湖区的可视化分析
目录 简介 代码解释 代码 结果 简介 GEE训练教程——基于 Sentinel-1 数据对 Felső-Kiskunsg 湖区的可视化分析 此处打开后运行后直接在script界面上就可以输入指定的年份和月份,但不是GEE APP的运算,是直接在弹出的框内输入即可。 代码解释 以下是您提供的 Google …...
docker 相关操作
1. 以下是一些常见的 Docker 命令: docker --version显示安装的 Docker 版本。 docker pull <image_name>从 Docker Hub 或其他镜像仓库下载镜像。 docker build -t <image_name> <path>从指定路径的 Dockerfile 构建 Docker 镜像。 docker i…...
【汽车】-- 燃油发动机3缸和4缸
3缸和4缸燃油发动机是小轿车常见的发动机配置。以下从结构特点、性能、经济性等方面对两者进行对比,并分析优缺点及使用注意事项: 1. 结构与运行原理 3缸发动机 特点:少一个气缸,内部零部件更少,整体结构更紧凑。优点…...
Python - 处理包含非utf-8 的字符编码
有这样的字符串,utf-8 编码中包含 ascii 编码内容 你好\x0a\x0a哈哈s 你好\x0a\x0a哈哈 b s.encode(utf-8) b.decode(utf-8)其它尝试 >>> b s.encode(utf-8) >>> b.decode(ascii) Traceback (most recent call last):File "<stdin&g…...
主坐标分析(PCoA)
主坐标分析(PCoA)是一种多变量统计方法,用于研究样本间的相似性或差异性,是一种非约束性的数据降维分析方法。以下是PCoA的关键点和实施步骤: 什么是PCoA? PCoA通过将样本距离矩阵转换为坐标,…...
Linux 网络接口配置
在 Linux 中,网络接口配置文件用于控制系统中的软件网络接口,并通过接口实现对网络设备的控制。当系统启动时,系统通过这些接口配置文件决定启动哪些接口,以及如此对这些接口进行配置. 在 Linux 中,网络接口配置文件用于控制系统中的软件网络接口,并通过这些接口实现对网络…...
Netty客户端接收不到服务端发送的数据问题
文章目录 前言问题描述相关代码解决方法 前言 环境 JDK:64位 jdk1.8.0_201 Netty:4.1.39.Final 问题描述 项目中使用Netty接受客户端的消息,客户端为硬件设备,在接受数据后发送数据到服务端。 同时因为客户端没有联网ÿ…...
基于多视角深度学习技术的乳腺X线分类:图神经网络与Transformer架构的研究|文献速递-生成式模型与transformer在医学影像中的应用速递
Title 题目 Mammography classification with multi-view deep learning techniques:Investigating graph and transformer-based architectures 基于多视角深度学习技术的乳腺X线分类:图神经网络与Transformer架构的研究 01 文献速递介绍 乳腺X线检查是乳腺癌…...
SCRM私域流量管理工具助力企业微信电商转型升级
内容概要 在当今数字化时代,SCRM(社交客户关系管理)私域流量管理工具正逐渐成为企业转型的重要助力。尤其是在电商领域,企业微信的兴起为许多公司打开了新的销售渠道,通过SCRM系统的高效整合,企业能够更加…...
PTA 输出三角形字符阵列
本题要求编写程序,输出n行由大写字母A开始构成的三角形字符阵列。 输入格式: 输入在一行中给出一个正整数n(1≤n<7)。 输出格式: 输出n行由大写字母A开始构成的三角形字符阵列。格式见输出样例,其中…...
纯血鸿蒙崛起,原生Android挑战?两大操作系统巅峰对决,智能设备未来谁主沉浮?
鸿蒙HarmonyOS和原生Android系统虽然在一些方面相似,但在架构、设计理念、API、开发工具等方面存在一些差异。鸿蒙系统的目标是跨设备、分布式的操作系统,强调多设备协同和资源共享,而Android则主要集中在智能手机和移动设备领域。 下面将从…...
书生实战营第四期-进阶岛第六关-MindSearch 快速部署
一、开发环境配置 1、打开codespace主页,选择Blank模板进行创建 Codespaces 2、创建conda环境隔离并安装依赖 conda create -n mindsearch python3.10 -y conda init 因为是新建的codespace,在第一次创建conda环境时,需要conda init 然后再…...
【Cadence32】PCB多层板电源、地平面层创建心得➕CM约束管理器Analyze分析显示设置➕“DP”报错DRC
【转载】Cadence Design Entry HDL 使用教程 【Cadence01】Cadence PCB Edit相对延迟与绝对延迟的显示问题 【Cadence02】Allegro引脚焊盘Pin设置为透明 【Cadence03】cadence不小心删掉钢网层怎么办? 【Cadence04】一般情况下Allegro PCB设计时的约束规则设置&a…...
华东理工大学2001年数据结构与程序设计试题
华东理工大学2001年数据结构与程序设计试题 一、单选题(10分) 1.若某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则采用——存储方式最节省运算时间。 A.单链表 B.仅有头指针的单循环链表 Cÿ…...
WebRTC 的核心:RTCPeerConnection
WebRTC 的核心:RTCPeerConnection WebRTC 的核心:RTCPeerConnection 创建 RTCPeerConnection 对象RTCPeerConnection 与本地音视频数据绑定媒体协商ICE 什么是 Candidate?收集 Candidate交换 Candidate尝试连接 SDP 与 Candidate 消息的互换…...
Spring Boot 中 WebClient 的实践详解
在现代微服务架构中,服务之间的通信至关重要。Spring Boot 提供了 WebClient,作为 RestTemplate 的替代方案,用于执行非阻塞式的 HTTP 请求。本文将详细讲解 WebClient 的实践,包括配置、使用场景以及常见的优化策略,帮…...
OceanBase 社区版 4.0 离线方式升级bp1至bp2 指南(含避坑总结)
注:目前社区版对 4.0 升级 bp1至 bp2也未有完善的文档,本次升级中也是遇到不少坑,写本文也希望对OB感兴趣的可以尝试少些遇坑。 也希望对升级有更好方式建议方式的朋友一起切磋交流,以便再进一步完善升级方案。 第一次做OB的升级&…...
@ControllerAdvice 的实现原理
从源码角度分析 Spring Boot 中 ControllerAdvice 的实现原理 在 Spring Boot 开发中,ControllerAdvice 是一个非常强大的特性,允许开发者集中处理控制器中的异常、全局数据绑定和模型属性。本文将从源码的角度探讨 ControllerAdvice 的实现原理&#x…...
将当前cad图中实体复制到另一个新的dwg的块中,并插入块——CAD c#实现
本案例为:将当前cad图中实体复制到另一个cad的块中,并插入块。 目前代码尚未调试成功,找bug中...... public class Demo {[CommandMethod("xx1")]public void XXA(){// 获取当前文档和数据库Document currentDoc Application.Doc…...
MongoDB-ObjectID 生成器
前言 MongoDB中一个非常关键的概念就是 ObjectID,它是 MongoDB 中每个文档的默认唯一标识符。了解 ObjectID 的生成机制不仅有助于开发人员优化数据库性能,还能帮助更好地理解 MongoDB 的设计理念。 什么是 MongoDB ObjectID? 在 MongoDB …...
解决Vue项目打包后dist中的index.html用浏览器直接打开显示空白页或者page not found的问题
前言 默认情况下,使用 npm run build 打包后的 index.html 无法直接访问,需要nginx转发或使用node启用简单http serve等方式实现。 实际开发中,有时需临时打开前端项目,若可以直接打开打包后的文件,对某些场景下他人简…...
爬虫基础之Session和Cookie
在浏览网站的过程中,我们经常会遇到需要登录的情况,有些页面只有登录之后才可以访问。在登录之后可以连续访问很多次网站,但是有时候过一段时间就需要重新登录。还有一些网站,在打开浏览器时就自动登录了,而且在很长时间内都不会失…...
计算机毕业设计PyFlink+Hadoop广告推荐系统 广告预测 广告数据分析可视化 广告爬虫 大数据毕业设计 Spark Hive 深度学习 机器学
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
排序算法(2):选择排序
问题 排序 [30, 24, 5, 58, 18, 36, 12, 42, 39] 选择排序 选择排序每次从待排序序列中选出最小(或最大)的元素,将其放到序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(或最大)元素…...
uni-app(HBuilderX)搭建小程序流程(请求封装,下拉刷新,底部加载等)
uni-app 是一个跨平台的前端框架,用于开发多端应用。uni-app 提供了一个统一的 API,允许开发者编写一次代码,最终部署到多个平台,极大地提高了开发效率。在编写小程序的时候和原生微信开发者工具语法略有区别。 目录 一、请求工具…...
【Super Tilemap Editor使用详解】(一):创建图块集
1、在场景中创建瓦片地图之前,我们需要先创建一个图块集供地图使用。 可以在“Project”面板中创建: 也可以在Assets“” 菜单中创建: 2、创建成功之后,“Atlas Texture”是空的,我们需要选择一个图集。 3、选中插件中…...
驱动---1.DAC8552实现三角波输出
最近开始进行新项目的研发,考虑用DAC做一个前级输出,选择了DAC8552这个器件的一个模块,用了野火的指南者做主控,芯片是STM32F103VET6,主频是72MHz。 一、器件手册重要信息提取 1.DAC8552具有十六位的分辨率、双通道输…...
PHP中GD库的使用
由于我要用到php的验证码 <?php session_start();// 生成验证码 $random_code substr(md5(uniqid(mt_rand(), true)), 0, 6);// 将验证码保存到 session 中 $_SESSION[captcha] $random_code;// 创建图片 $font 6; $image_width 100; $image_height 40;// 创建图像 $…...
【ChArUco Marker】标定板检测
目录 1.ChArUco介绍2.源码分析(opencv 4.5.4)3.ChAruco板创建(opencv 4.5.4)4.Charuco板检测(opencv 4.5.4)ChArUco检测源码(不使用标定参数) 5.ChArUco姿态估计(opencv …...
Kafka | RabbitMQ | RocketMQ | ActiveMQ 的区别和入门案例
springboot,vue,springcloudalibaba课程视频,有需要可以看看 <!-- springboot,springboot整合redis,整合rocketmq视频: --> https://www.bilibili.com/video/BV1nkmRYSErk/?vd_source14d27ec13a473…...
TensorBoard
1、TensorFlow的TensorBoard TensorBoard是TensorFlow的一个组件,它提供了一个交互式的界面,用于可视化TensorFlow程序的训练过程和模型结构。 使用TensorBoard,你可以: 可视化训练过程中的各种指标,如损失函数、准…...
C# 中的异步编程:提升应用程序响应性和性能
C#中的异步编程(Asynchronous Programming)。异步编程是现代应用程序开发中非常重要的一个方面,它允许程序在等待长时间运行的操作(如I/O操作、网络请求等)时继续执行其他任务,从而提高应用程序的响应性和性…...
前端框架 React 与 Vue3对比 —— 技术选型
在进行前端框架React与Vue3的技术选型对比时,我们可以从以下几个方面进行综合考虑: 1. 性能比较 • Vue3 通过 Vite 打包工具实现了快速的开发和构建,同时使用了响应式系统和 Proxy 技术来提高数据响应速度。在大部分测试用例中,…...
虚拟机与Xshell5和Xftp4连接与虚拟机克隆
虚拟机与Xshell5和Xftp4连接与虚拟机克隆 虚拟机与Xshell5和Xftp4连接 虚拟机与Xshell5连接 下载Xshell5后启动出现如下界面,点击新建 新建会话输入虚拟机命名,如master,主机输入虚拟机IP,xxx.xxx.xxx.xxx然后确认,…...
华为USG系列防火墙 RESTCONF NAT配置 Python实现
目录 前言 文档下载 开启RESTCONF接口 Python 实现SNAT增删改查 查看nat映射列表 查看私网地址池 查看源地址池(公网) 查看nat映射规则 创建nat映射规则 创建私网地址池 创建源地址池 创建nat映射规则 修改NAT映射规则 删除NAT映射规则 …...
qemu安装arm64架构银河麒麟
qemu虚拟化软件,可以在一个平台上模拟另一个硬件平台,可以支持多种处理器架构。 一、安装 安装教程:https://blog.csdn.net/qq_36035382/article/details/125308044 下载链接:https://qemu.weilnetz.de/w64/2024/ 我下载的是 …...
深入解析 Spring 框架:核心特性与应用价值
1.什么是spring? Spring 是一个开源的 Java 应用框架,由 Pivotal Software 提供支持。它为开发基于 Java 的企业级应用提供了一整套基础设施支持。Spring 框架的核心功能是依赖注入(Dependency Injection, DI),它帮助开发者实现…...
protobuf 报文编解码工具
QT实现的 protobuf 反序列化 & 序列化工具,版本号V1.2 下载链接:protobuf报文编解码工具资源-CSDN文库 源码github:ProtobufTool 使用说明: 1. 点击“加载proto文件”按钮,从本地选择 .proto文件 2. 选择消息名称ÿ…...
Milvus向量数据库06-RAG检索增强
Milvus向量数据库06-RAG检索增强 文章目录 Milvus向量数据库06-RAG检索增强1-学习目标2-参考网址3-执行过程记录1-到底什么是RAGRAG 的基本流程:为什么 RAG 优于传统的基于检索的方法:示例流程: 2-RAG和Elasticsearch对比3-RAG和向量数据库之…...
Unity3D下采集camera场景并推送RTMP服务实现毫秒级延迟直播
技术背景 好多开发者,希望我们能够分享下如何实现Unity下的camera场景采集并推送rtmp服务,然后低延迟播放出来。简单来说,在Unity 中实现采集 Camera 场景并推送RTMP的话,先是获取 Camera 场景数据,通过创建 RenderTe…...
标记数据集生成模型助力无数据情况下的大模型指令微调
在构建大模型应用时,通常有两种方式来改进效果,一种是构建外部知识库,利用RAG来完成。但RAG并不是万能的,对于特定领域的LLM应用,以及无需示例,就能完成特定任务等场合就需要进行微调。然而,微调…...
第六届地博会世界酒中国菜助力广州龙美地标美食公司推动地标发展
第六届知交会暨地博会:世界酒中国菜助力广州龙美地标美食公司推动地标产品创新发展 2024年12月9日至11日,第六届粤港澳大湾区知识产权交易博览会暨国际地理标志产品交易博览会在中新广州知识城盛大启幕。本届盛会吸引了全球众多知识产权领域的专业人士和…...
vue响应式原理
对于响应式原理,我们先了解vue是一个MVVM结构的框架;也就是数据层、视图层、数据-视图层;响应式的原理就是实现当数据更新时,视图层也要相应的更新,基于响应式原理我们可以使数据驱动视图的实现变得简单而高效 一、响…...