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.hqwc.cn/news/624693.html

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

相关文章

权限管理Ranger详解

文章目录 一、Ranger概述与安装1、Ranger概述1.1 Ranger介绍1.2 Ranger的目标1.3 Ranger支持的框架1.4 Ranger的架构1.5 Ranger的工作原理 2、Ranger安装2.1 创建系统用户和Kerberos主体2.2 数据库环境准备2.3 安装RangerAdmin2.4 启动RangerAdmin 二、Ranger简单使用1、安装 R…

python之flask安装以及使用

1 flask介绍 Flask是一个非常小的Python Web框架&#xff0c;被称为微型框架&#xff1b;只提供了一个稳健的核心&#xff0c;其他功能全部是通过扩展实现的&#xff1b;意思就是我们可以根据项目的需要量身定制&#xff0c;也意味着我们需要学习各种扩展库的使用。 2 python…

基于Echarts的超市销售可视化分析系统(数据+程序+论文

本论文旨在研究Python技术和ECharts可视化技术在超市销售数据分析系统中的应用。本系统通过对超市销售数据进行分析和可视化展示&#xff0c;帮助决策层更好地了解销售情况和趋势&#xff0c;进而做出更有针对性的决策。本系统主要包括数据处理、数据可视化和系统测试三个模块。…

Rust腐蚀服务器清档多教程

Rust腐蚀服务器清档多教程 大家好我是艾西&#xff0c;一个做服务器租用的网络架构师。上期教了大家怎么搭建服务器以及安装插件等那么随着大家自己架设服或是玩耍的时间肯定会有小伙伴想要去新增开区数量或是把原本的服务器进行一些调整等&#xff0c;那么今天主要聊的就是怎…

PTA图论的搜索题

目录 7-1 列出连通集 题目 输入格式: 输出格式: 输入样例: 输出样例: AC代码 7-2 六度空间 题目 输入格式: 输出格式: 输入样例: 输出样例: 思路 AC代码 7-3 地下迷宫探索 题目 输入格式: 输出格式: 输入样例1: 输出样例1: 输入样例2: 输出样例2: 思路 …

Flask Web 应用与 MongoDB 集成:用户登录和退出

在本文中&#xff0c;我们将探讨如何使用 Flask Web 框架和 MongoDB 数据库构建一个简单的 Web 应用。我们将使用 Flask-PyMongo 扩展来实现 MongoDB 集成&#xff0c;并使用 Flask-Login 扩展来处理用户认证。 1. 安装所需库 首先&#xff0c;我们需要安装 Flask、Flask-PyM…

在Qt中如何简单设计一个文件和图像浏览器

文本浏览器 设计一个文本浏览器程序&#xff0c;可以打开、显示 txt、html等文件。 1.在Qt Designer中设计一个菜单其中包含打开和退出选项&#xff1a; 2. 在 QMainWindow 构造函数中把 textBrower 设为主窗口的中心部件&#xff0c;这样整个窗口就成了包含 textBrower 的单文…

知道XRD标准品PDF卡片号,如何直接导出标准物质数据,简单快速一分钟完成(附jade下载安装方法)

知道XRD标准品PDF卡片号&#xff0c;如何直接导出标准物质数据&#xff08;附jade下载安装方法&#xff09; 网上找到的方法都是先检索再导出&#xff0c;我的样品根本检索不到&#xff0c;但是根据参考文献知道了自己的pdf卡片号&#xff0c;可通过jade直接导出数据 1.请安装…

WPF Extended.Wpf.Toolkit 加载界面

1、NuGet 中安装 Extended.Wpf.Toolkit 。 2、在MainWindow.xaml中添加xmlns:tk"http://schemas.xceed.com/wpf/xaml/toolkit" 。 MainWindow.xaml 代码如下。 <Window x:Class"WPF_Extended_Wpf_Toolkit_Loading.MainWindow" xmlns"ht…

如何把npm切换成yarn管理项目

1.删掉项目中package-lock.json和依赖包 这一步手动删掉就好 2.全局安装yarn npm install -g yarn 3.可以开始执行yarn install安装依赖 1&#xff09;执行yarn init 这一步是修改npm生成的package.json文件&#xff0c;可能会遇到这个问题&#xff1a; 这个查了一下是有…

【Java】通过poi给word首页添加水印图片

背景&#xff1a; poi并没有提供直接插入水印图片的方法&#xff0c;目前需要再word的首页插入一张水印图片&#xff0c;于是就需要通过另一种方式&#xff0c;插入透明图片&#xff08;png格式&#xff09;并将图片设置为“浮于文字上方”的方式实现该需求。 所需jar&#xf…

Midjourney提示词进阶

Midjourney提示词进阶 - 魔法特效&#xff08;法术、施法、光环、能量&#xff09; 问-我如何获得施法、射击能量和施展魔法&#xff1f; 尝试正常写作。探索使用调用方法&#xff0c;如法师使青蛙附魔&#xff0c;以及描述方法&#xff0c;如魔法师对青蛙施放绿色闪光咒语。…