Java项目如何使用EasyExcel插件对Excel数据进行导入导出

文章目录

    • 一、EasyExcel的示例
      • 导入依赖
      • 创建实体类
      • 数据导入和导出
    • 二、EasyExcel的作用
    • 三、EasyExcel的注解

EasyExcel是一个阿里巴巴开源的excel处理框架,它以使用简单、节省内存著称。在解析Excel时,EasyExcel没有将文件数据一次性全部加载到内存中,而是从磁盘上一行行读取数据,逐个解析。这种一行一行的解析模式,使得EasyExcel在处理大数据量的Excel文件时,性能非常高效。

本文先展示示例,后对EasyExcel做些简单介绍。

一、EasyExcel的示例

本文简单介绍EasyExcel的使用,使用xlsx文件读入。

导入依赖

<dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.3.1</version>
</dependency>
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.20</version>
</dependency>

创建实体类

@Data
// 行高
@HeadRowHeight(15)
// 行宽
@ColumnWidth(20)
public class ExcelEntity implements Serializable {// @ExcelProperty(index = 0, value = "data")  列顺序@ExcelProperty("用户姓名")private Integer name;// @ExcelIgnore 不生效@ExcelProperty("用户工号")private String userId;@ExcelProperty("用户权限")private String role;@ExcelProperty("用户部门")private Integer part;}

数据导入和导出

实现一个数据例子:将Excel文件中(初始sheet)所有用户部门的人员进行分类,导出到原Excel的(调整sheet)。这个例子是读取一个Excel的sheet表格

origin表格

首先创建Excel表格,新建一个origin的sheet。新建一个Listener监听器,用于逐行读取数据。

public class TestDataListener extends AnalysisEventListener<TestExcelEntity>{private List<TestExcelEntity> list = new ArrayList<>();@Overridepublic void invoke(TestExcelEntity data, AnalysisContext context) {System.out.println(data);  // 可以看到每一行的数据list.add(data);}@Overridepublic void doAfterAllAnalysed(AnalysisContext context) {System.out.println("WriterExcelEntity All data analyzed");}public List<TestExcelEntity> getList() {return list;}public void setList(List<TestExcelEntity> list) {this.list = list;}	
}

新建执行代码

public class Test {public static void main(String[] args) throws FileNotFoundException {// 利用监听器读取Excel文件TestDataListener testDataListener = new TestDataListener();String path = "C:\\Users\\Desktop\\test.xlsx";ExcelReader excelReader = EasyExcel.read(path, TestExcelEntity.class, testDataListener).build();ReadSheet esgReadSheet = EasyExcel.readSheet(0, "origin").build();excelReader.read(esgReadSheet);excelReader.finish();List<TestExcelEntity> greenBondEntities = testDataListener.getList();// 对获取到的数据进行排序,并转换成 Map 数据格式greenBondEntities.sort((u1, u2) -> u1.getRole().compareTo(u2.getRole()));Map<String, List<TestExcelEntity>> map =greenBondEntities.stream().collect(Collectors.groupingBy(TestExcelEntity::getRole));// 根据业务操作List<TestExcelEntity> res = new ArrayList<>();map.entrySet().stream().forEach(entry -> {List<TestExcelEntity> list = entry.getValue();for (int i = 0; i < list.size(); i++) {TestExcelEntity test = new TestExcelEntity();if (i == 0) {test.setRole(list.get(i).getRole());test.setName(list.get(i).getName());test.setUserId(list.get(i).getUserId());test.setPart(list.get(i).getPart());} else {test.setName(list.get(i).getName());test.setUserId(list.get(i).getUserId());test.setPart(list.get(i).getPart());}res.add(test);}});EasyExcel.write("C:\\Users\\Desktop\\res.xlsx", TestExcelEntity.class).sheet(0,"update").doWrite(res);}
} 

导出后的Excel如下图所示:
update表格
如果想要读取多个sheet表格:

// 读取多条sheet
@Test
public void read() {TestDataListener testDataListener = new TestDataListener();String path = "C:\\Users\\Desktop\\test.xlsx";ExcelReader excelReader = EasyExcel.read(path, TestExcelEntity.class, testDataListener).build();List<ReadSheet> sheets = excelReader.excelExecutor().sheetList();for (ReadSheet sheet : sheets) {String sheetName = sheet.getSheetName();System.out.println(sheetName);ReadSheet readSheet = EasyExcel.readSheet(sheetName).build();excelReader.read(readSheet);}excelReader.finish();
}

二、EasyExcel的作用

  • 高效性能 :EasyExcel在处理大型Excel文件时具有出色的性能。它采用了基于流的读写方式,能够快速处理大量数据,显著提高了读写效率。同时,EasyExcel针对大数据量处理进行了优化,提供了 分批读写内存优化 等策略,保证了处理大型Excel文件时的 高效性稳定性
  • 简洁易用 :EasyExcel提供了简洁而强大的API,可以轻松地读取、写入和操作Excel文件,减少了繁琐的操作和代码量。
  • 低内存占用 :与传统的Excel文件读取方式相比,EasyExcel显著降低了内存占用。它采用基于 事件驱动 的模型,通过 回调函数 来处理每一行数据,而不是一次性将整个文件读入内存。这种流式的处理方式极大地节省了内存资源,使得处理大文件时更加稳定可靠。
  • 支持多种格式和复杂操作 :EasyExcel支持多种Excel文件格式,包括 .xls.xlsx.xlsm 等,使得它在处理不同版本的Excel文件时具有更大的灵活性。同时,它还支持处理复杂的Excel表格,包括合并单元格、样式、图表等,满足各种复杂场景的需求。
  • 强大的扩展性 :EasyExcel提供了丰富的扩展接口,开发者可以根据自己的需求轻松定制Excel文件的读写操作,满足各种复杂场景的需求。比如支持自定义转换器,使得数据格式的处理更为灵活。

EasyExcel在处理Excel文件时具有高效、简洁、低内存占用、支持多种格式和复杂操作以及强大的扩展性等优点,这使得它在 大数据量 的Excel操作场景下成为一个非常不错的选择。然而,也需要注意到,虽然EasyExcel有很多优点,但它可能还需要额外引入依赖包,这可能会增加项目的复杂度。因此,在选择是否使用EasyExcel时,需要综合考虑项目的具体需求和实际情况。

三、EasyExcel的注解

  • @ExcelProperty :这是用于指定Java对象中的字段与Excel表格中的 列的映射关系 的注解。通过设置该注解的 value 属性,可以指定列名。设置 index 属性,可以指定列名的序号,从而实现字段与列的对应关系。
  • @ExcelIgnore :这个注解用于指定Java对象中的字段在Excel中的读写操作中被忽略。当需要在Excel文件中忽略某个字段时,可以在该字段上添加此注解。
  • @ContentFontStyle :用于设置字体样式。
  • @ContentLoopMerge :用于合并单元格。
  • @ContentRowHeight :用于设置 行高
  • @ContentStyle :用于设置内容格式。
  • @HeadFontStyle :用于定制标题字体格式。
  • @HeadRowHeight :用于设置 标题行行高
  • @HeadStyle :用于设置标题样式。
  • @ColumnWidth :用于设置 列宽
  • @DateTimeFormat :日期格式化。
  • @NumberFormat :数字格式化。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/821637.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux学习:进程(新建+运行某文件+退出处理函数+等待)

目录 api 创建新进程 注意 运行某文件 例子 注意 例子&#xff0c;等待进程 进程是由进程控制块、程序段、数据段三部分组成 进程有都有一个父进程&#xff0c;除了init&#xff0c;父进程可以创建子进程 每个进程都有一个PID&#xff0c;可以用ps来查看&#xff0c;等…

【行为型模式】策略模式

一、策略模式概述 策略模式(又叫政策Policy模式)&#xff0c;属于对象行为模式下的&#xff1a;Strategy类提供了可插入式(Pluggable)算法的实现方案。 策略模式的定义-意图&#xff1a;定义一系列算法&#xff0c;将每一个算法封装起来&#xff0c;并让它们互相替换。策略模式…

Mybatis常用注解说明

MyBatisPlus 常用注解说明 TableName(opens new window) 描述&#xff1a;表名注解&#xff0c;标识实体类对应的表 使用位置&#xff1a;实体类 TableName("sys_user") public class User {private Long id;private String name;private Integer age;private Strin…

实用图像视频修复工具:完善细节、提高分辨率 | 开源日报 No.225

xinntao/Real-ESRGAN Stars: 25.6k License: BSD-3-Clause Real-ESRGAN 是一个旨在开发实用的图像/视频恢复算法的项目。 该项目主要功能、关键特性和核心优势包括&#xff1a; 提供动漫视频小模型和动漫插图模型支持在线 Colab 演示和便携式 Windows/Linux/MacOS 可执行文件…

如何利用纯前端技术,实现一个网页版视频编辑器?

纯网页版视频编辑器 一、前言二、功能实现三、所需技术四、部分功能实现4.1 素材预设4.2 多轨道剪辑 一、前言 介绍&#xff1a;本篇文章打算利用纯前端的技术&#xff0c;来实现一个网页版的视频编辑器。为什么突然想做一个这么项目来呢&#xff0c;主要是最近一直在利用手机…

OpenCV基本图像处理操作(四)——傅立叶变换

傅里叶变换的作用 高频&#xff1a;变化剧烈的灰度分量&#xff0c;例如边界 低频&#xff1a;变化缓慢的灰度分量&#xff0c;例如一片大海 滤波 低通滤波器&#xff1a;只保留低频&#xff0c;会使得图像模糊 高通滤波器&#xff1a;只保留高频&#xff0c;会使得图像细节…

Golang | Leetcode Golang题解之第31题下一个排列

题目&#xff1a; 题解&#xff1a; func nextPermutation(nums []int) {n : len(nums)i : n - 2for i > 0 && nums[i] > nums[i1] {i--}if i > 0 {j : n - 1for j > 0 && nums[i] > nums[j] {j--}nums[i], nums[j] nums[j], nums[i]}reverse…

Day 14 网络协议

常见网络设备&#xff1a;交换机 路由器 中继器 多协议网关&#xff08;路由器的前身&#xff09; 交换机&#xff1a;用于连接统一网络的设备&#xff0c;实现内网设备通信。 从广义上分为&#xff1a;局域网交换机&#xff0c;广域网交换机 从网络构成分为&#xff1a;接…

Jenkins配置windows/linux从节点

背景&#xff1a; 环境&#xff1a;jenkins环境&#xff08;Ubuntu&#xff09; 节点机器&#xff1a;Linux、Windows 前置条件&#xff1a; 节点机器&#xff1a;安装java、allure、python 1 Linux节点管理机器添加 1.1 系统管理->节点列表->New Node 1.2 节点配置…

「GO基础」文件名规范、关键字与标识符

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

元数据管理Atlas

文章目录 一、Atlas概述1、Atlas入门2、Atlas架构原理 二、Atlas安装1、安装环境准备1.1 安装Solr-7.7.31.2 Atlas2.1.0安装 2、Atlas配置2.1 Atlas集成Hbase2.2 Atlas集成Solr2.3 Atlas集成Kafka2.4 Atlas Server配置2.5 Kerberos相关配置2.6 Atlas集成Hive 3、Atlas启动 三、…

用海外云手机高效率运营TikTok!

很多做国外社媒运营的公司&#xff0c;想要快速引流&#xff0c;往往一个账号是不够的&#xff0c;多数都是矩阵养号的方式&#xff0c;运营多个TikToK、Facebook、Instagram等账号&#xff0c;慢慢沉淀流量变现&#xff0c;而他们都在用海外云手机这款工具&#xff01; 海外云…

知识管理系统(KMS):一文扫盲,能和chatGPT相融吗?

一、什么是KMS&#xff0c;有什么作用 KMS&#xff08;Knowledge Management System&#xff09;知识管理系统是一种用于组织、存储、共享和利用知识的软件系统或平台。它旨在帮助组织有效地管理和利用内部和外部的知识资源&#xff0c;以支持决策、创新和持续学习。 KMS知识管…

华为云CodeArts IDE For Python 快速使用指南

CodeArts IDE 带有 Python 扩展&#xff0c;为 Python 语言提供了广泛的支持。Python 扩展可以利用 CodeArts IDE 的代码补全、验证、调试和单元测试等特性&#xff0c;与多种 Python 解释器协同工作&#xff0c;轻松切换包括虚拟环境和 conda 环境的 Python 环境。本文简要概述…

OpenCV基本图像处理操作(三)——图像轮廓

轮廓 cv2.findContours(img,mode,method) mode:轮廓检索模式 RETR_EXTERNAL &#xff1a;只检索最外面的轮廓&#xff1b;RETR_LIST&#xff1a;检索所有的轮廓&#xff0c;并将其保存到一条链表当中&#xff1b;RETR_CCOMP&#xff1a;检索所有的轮廓&#xff0c;并将他们组…

魔方网表 存在 mailupdate.jsp接口 任意文件上传漏洞

声明&#xff1a; 本文仅用于技术交流&#xff0c;请勿用于非法用途 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;文章作者不为此承担任何责任。 简介 魔方网表mailupdate.jsp接口存在任意文件上传漏洞 …

ChatGPT深度科研应用、数据分析及机器学习、AI绘图与高效论文撰写教程

原文链接&#xff1a;ChatGPT深度科研应用、数据分析及机器学习、AI绘图与高效论文撰写https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247601506&idx2&sn5dae3fdc3e188e81b8a6142c5ab8c994&chksmfa820c85cdf58593356482880998fc6eb98e6889b261bf621e1d…

python生成二维码

要在Python中生成二维码&#xff0c;可以使用第三方库qrcode。首先&#xff0c;确保已经安装了qrcode库&#xff1a; pip install qrcode然后&#xff0c;使用以下代码生成二维码&#xff1a; import qrcodedata "https://mp.csdn.net/mp_blog/creation/editor?spm100…

Kafka服务端(含Zookeeper)一键自启软件

1. 前言 本文介绍了一款集成图形化界面配置和一键自启功能的Kafka与Zookeeper服务管理软件。该软件通过直观易用的图形界面&#xff0c;使用户能够轻松完成Kafka和Zookeeper的配置工作&#xff0c;有效避免了手动编辑配置文件可能带来的错误和不便。同时&#xff0c;软件还提供…

【附gpt4.0升级秘笈】百度智能云万源全新一代智能计算操作系统发布:引领AI新纪元

在科技日新月异的今天&#xff0c;人工智能&#xff08;AI&#xff09;作为引领未来发展的关键技术&#xff0c;正逐步渗透到社会的每一个角落。百度&#xff0c;作为中国AI领域的领军企业&#xff0c;始终站在技术创新的前沿&#xff0c;不断推出引领行业的重磅产品。今日&…