当前位置: 首页 > news >正文

EasyExcel简单实例(未完待续)

EasyExcel简单实例

  • 准备工作
  • 场景一:读取 Student 表
    • 需求1:简单读取
    • 需求2:读取到异常信息时不中断
    • 需求3:读取所有的sheet工作表
    • 需求4:读取指定的sheet工作表
    • 需求5:从指定的行开始读取
  • 场景二:写入 Student 表
    • 需求1:简单写入

准备工作

导入easyExcel依赖,注意版本:

        <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.1.1</version></dependency>

场景一:读取 Student 表

需求1:简单读取

源表:
在这里插入图片描述

1. 编写实体类
可以使用 @ExcelProperty 指定数据封装为实体类对象的规则,后面可以跟index 和 列名(二选一);
若不加注解则按照默认封装规则: ①根据 Excel 列与实体类属性的顺序②根据 Excel 列的单元格式与对象字段类型匹配。

@Data
public class Student {@ExcelProperty("姓名")private String name;@ExcelProperty("年级")private String grade;@ExcelProperty("年龄")private int age;
}

2. 监听器
invoke():每读取一行就执行的方法,每一行数据会被封装成一个 student 对象(invoke方法的第一个参数);
doAfterAllAnalysed():读取结束后执行的方法;

class studentListener implements ReadListener<Student> {int i=1;@Overridepublic void invoke(Student student, AnalysisContext context) {System.out.println("读取到第 "+(i++)+" 行:"+student);}@Overridepublic void doAfterAllAnalysed(AnalysisContext context) {System.out.println("\nxlsx文件读取结束");}
}

3. 测试类
read():读取workbook工作簿,传入文件路径、实体类、监听器;
sheet():选定读取的工作表,默认读取第一个;
doRead():执行读操作;

public class easyExcelTest {@Testpublic void readTest() {String filePath = "C:\\Users\\liziq\\Desktop\\student.xlsx";EasyExcel.read(filePath,Student.class,new studentListener()).sheet().doRead();}
}

打印效果:
在这里插入图片描述

需求2:读取到异常信息时不中断

源表:
当出现了不符合数据类型的数据时,希望不中断读取
在这里插入图片描述
1. 实体类:
不变;
2. 监听器:
只需要调整监听器,在监听器加入 onException()方法;

class studentListener implements ReadListener<Student> {int i = 1;@Overridepublic void invoke(Student student, AnalysisContext context) {System.out.println("读取到第 " + (i++) + " 行:" + student);}@Overridepublic void doAfterAllAnalysed(AnalysisContext context) {System.out.println("\nxlsx文件读取结束");}@Overridepublic void onException(Exception exception, AnalysisContext context) throws Exception {System.out.println("读取异常:"+exception);}
}

3. 测试类:
不变;

打印效果:
异常数据被打印,且不中断读取;
在这里插入图片描述

需求3:读取所有的sheet工作表

源表:
此时多个sheet都有数据;
在这里插入图片描述

1. 实体类
不变;
2. 监听器
不变;
3. 测试类
将sheet().doRead改为 doReadAll()

public class easyExcelTest {@Testpublic void readTest() {String filePath = "C:\\Users\\liziq\\Desktop\\student.xlsx";EasyExcel.read(filePath,Student.class,new studentListener()).doReadAll();}
}

效果:
读取到了两个sheet的数据:
在这里插入图片描述

需求4:读取指定的sheet工作表

源表:
此时多个sheet都有数据;
在这里插入图片描述

1. 实体类
不变;
2. 监听器
不变;
3. 测试类
在sheet()中传递指定sheet的index索引或者名称即可:

public class easyExcelTest {@Testpublic void readTest() {String filePath = "C:\\Users\\liziq\\Desktop\\student.xlsx";EasyExcel.read(filePath,Student.class,new studentListener()).sheet("Sheet2").doRead();EasyExcel.read(filePath,Student.class,new studentListener()).sheet("Sheet1").doRead();}
}

效果:
此时先指定读取sheet2,再读取sheet1;
在这里插入图片描述

需求5:从指定的行开始读取

源表:
假设此时有多行表头,内容需要从第3行开始读取;
在这里插入图片描述

1. 实体类
不变;
2. 监听器
不变;
3. 测试类
使用 headRowNumber(),参数中填写开始读取的行数;(默认从第2行开始读取,即headRowNumber()默认参数是索引1);
此时读取的内容要从第3行开始,索引为2,所以填入headRowNumber()的参数为2!

public class easyExcelTest {@Testpublic void readTest() {String filePath = "C:\\Users\\liziq\\Desktop\\student.xlsx";EasyExcel.read(filePath,Student.class,new studentListener()).sheet("Sheet1").headRowNumber(2).doRead();}
}

效果:
在这里插入图片描述

场景二:写入 Student 表

需求1:简单写入

1. 实体类
需要比读取excel多添加实体类的构造函数;

@Data
public class Student {@ExcelProperty("姓名")private String name;@ExcelProperty("年级")private String grade;@ExcelProperty("年龄")private int age;public Student(){}public Student(String name, String grade, int age) {this.name = name;this.grade = grade;this.age = age;}
}

2. 模拟建数据的类
将每一行数据封装为Student对象,并放入一个List集合中;

class CreateData{public static List<Student> create(){List<Student> datas = Arrays.asList(new Student("张三","一年级",23),new Student("里斯","一年级",19),new Student("王五","一年级",22),new Student("赵六","一年级",21));return datas;}
}

3. 测试类
写的时候会自动将实体类的属性作为excel表的表头;
sheet()的参数为写入的工作表;
doWrite()的参数为要写入的数据,要求格式为Collection集合类型;

public class easyExcelTest {@Testpublic void writeTest() {String filePath = "C:\\Users\\liziq\\Desktop\\student.xlsx";EasyExcel.write(filePath,Student.class).sheet("学生表1").doWrite(CreateData.create()); // doWrite()的参数为 Collection 集合}

效果:
成功生成指定sheet表的数据!
在这里插入图片描述

相关文章:

EasyExcel简单实例(未完待续)

EasyExcel简单实例 准备工作场景一&#xff1a;读取 Student 表需求1&#xff1a;简单读取需求2&#xff1a;读取到异常信息时不中断需求3&#xff1a;读取所有的sheet工作表需求4&#xff1a;读取指定的sheet工作表需求5&#xff1a;从指定的行开始读取 场景二&#xff1a;写入…...

ROS2学习笔记一:安装及测试

目录 前言 1 ROS2安装与卸载 1.1 安装虚拟机 1.2 ROS2 humble安装 2 ROS2测试 2.1 topic测试 2.2 小海龟测试 2.3 RQT可视化 2.4 占用空间 前言 ROS2的前身是ROS&#xff0c;ROS即机器人操作系统&#xff08;Robot Operating System&#xff09;,ROS为了“提高机器人…...

Xcode14.3.1真机调试iOS17的方法

Hello&#xff0c;大家好我是咕噜铁蛋&#xff01;Xcode 是苹果官方开发工具&#xff0c;它提供了完整的开发环境和工具集&#xff0c;支持开发 iOS、macOS、watchOS 和 tvOS 应用程序。对于 iOS 开发者来说&#xff0c;Xcode 是必备的工具之一。而随着 iOS 系统的不断更新和升…...

主流大语言模型从预训练到微调的技术原理

引言 本文设计的内容主要包含以下几个方面&#xff1a; 比较 LLaMA、ChatGLM、Falcon 等大语言模型的细节&#xff1a;tokenizer、位置编码、Layer Normalization、激活函数等。大语言模型的分布式训练技术&#xff1a;数据并行、张量模型并行、流水线并行、3D 并行、零冗余优…...

Linux中vim查看文件某内容

一、编辑文件命令 [rootyinheqilin ~]# vim test.txt 1&#xff0c;在编辑的文件中连续按2次键盘的【g】键&#xff0c;光标会移动到文档开头第一行 2&#xff0c;输入一个大写 G&#xff0c;光标会跳转到文件的最后一行第一列&#xff08;末行) 二、查看文件内容命令 gre…...

阿里云提示服务器ip暴露该怎么办?-速盾网络(sudun)

当阿里云提示服务器IP暴露的时候&#xff0c;这意味着您的服务器可能面临安全风险&#xff0c;因为黑客可以通过知道服务器的IP地址来尝试入侵您的系统。在这种情况下&#xff0c;您应该立即采取措施来保护您的服务器和数据。以下是一些建议&#xff1a; 更改服务器IP地址&…...

IP地址的网络安全防护和预防

网络安全对于保护个人和组织的信息资产至关重要&#xff0c;而IP地址是网络通信的基础。在这篇文章中&#xff0c;IP数据云将探讨IP地址的网络安全防护和预防措施&#xff0c;以确保网络的安全性和可靠性。 IP地址是互联网上每个设备在网络中的唯一标识符。有IPv4和IPv6两种类…...

数据挖掘在制造业中的预测与优化应用

随着大数据时代的到来&#xff0c;数据挖掘技术在各行各业的应用日益广泛&#xff0c;尤其在制造业中&#xff0c;其对于提升生产效率、降低运营成本、优化供应链管理等方面发挥着不可替代的作用。本文将探讨数据挖掘在制造业中的预测与优化应用&#xff0c;通过深入剖析实际案…...

Java面试之并发篇(一)

1、前言 本篇主要总结JAVA面试中关于并发相关的高频面试题。本篇的面试题基于网络整理&#xff0c;和自己编辑。在不断的完善补充哦。 2、简述程序、进程、线程、的基本概念&#xff1f; 2.1、程序 程序&#xff0c;是含有指令和数据的文件&#xff0c;被存储在磁盘或其他的…...

分布式全局id

分布式全局id snowflake 算法是 twitter 开源的分布式 id 生成算法&#xff0c;采用 Scala 语言实现&#xff0c;是把一个 64 位的 long 型的 id&#xff0c;1 个 bit 是不用的&#xff0c;用其中的 41 bits 作为毫秒数&#xff0c;用 10 bits 作为工作机器 id&#xff0c;12 …...

springboot 房屋租赁系统

spring boot mysql mybatis 前台后端...

TypeScript接口、对象

目录 1、TypeScript 接口 1.1、实例 1.2、联合类型和接口 1.3、接口和数组 1.4、接口和继承 1.5、单继承实例 1.6、多继承实例 2、TypeScript 对象 2.2、对象实例 2.3、TypeScript类型模板 2.4、鸭子类型&#xff08;Duck typing&#xff09; 1、TypeScript 接口 接口…...

Flask 菜品管理

common/libs/Helper.py getDictFilterField() 方法 用于在web/templates/food/index.html中展示菜品分类 如何能够通过food里面的cat_id获取分类信息呢&#xff1f;只能通过for循环&#xff0c;这样会很麻烦&#xff0c;所以定义了这个方法。 这个方法可以的查询返回结果…...

亚马逊实时 AI 编程助手 CodeWhisperer使用体验

文章目录 1&#xff1a;什么是CodeWhisperer &#xff1f;2&#xff1a;试用3&#xff1a;上手体验 1&#xff1a;什么是CodeWhisperer &#xff1f; 最近ChatGPT展现出强大AI能力给我们带来了深刻的影响&#xff0c;AI现在不是一个概念&#xff0c;基于AI的产品一定在各行各业…...

[机缘参悟-123] :实修 - 东西方各种思想流派实修的要旨与比较?

目录 前言&#xff1a; 一、东方各种思想流派实修的要旨&#xff1f; 1.1 儒、释、道、法的主要思想 1.2 儒、释、道、法各种追求的目标 1.3 儒、释、道、法各自修行的法门或修行的途径 二、西方灵修的各种派别的要旨&#xff1f; 2.0 西方灵修的各种派别 2.1 玛雅星系…...

基于51单片机的数字时钟系统设计

标题&#xff1a;基于51单片机的数字时钟系统设计与实现 摘要&#xff1a; 本文详细介绍了基于STC89C51单片机设计一款具有精确计时功能的数字时钟系统的全过程。该系统利用了单片机内部的定时器/计数器资源&#xff0c;结合液晶显示屏和按键输入模块&#xff0c;实现了时间显…...

《每天十分钟》-红宝书第4版-基本引用类型

引用值&#xff08;或者对象&#xff09;是某个特定引用类型的实例。在 ECMAScript 中&#xff0c;引用类型是把数据和功能组织到一起的结构&#xff0c;经常被人错误地称作“类”。虽然从技术上JavaScript 是一门面向对象语言&#xff0c;但ECMAScript 缺少传统的面向对象编程…...

【EAI 005】EmbodiedGPT:通过具身思维链进行视觉语言预训练的具身智能大模型

论文描述&#xff1a;EmbodiedGPT: Vision-Language Pre-Training via Embodied Chain of Thought 论文作者&#xff1a;Yao Mu, Qinglong Zhang, Mengkang Hu, Wenhai Wang, Mingyu Ding, Jun Jin, Bin Wang, Jifeng Dai, Yu Qiao, Ping Luo 作者单位&#xff1a;The Universi…...

一文读懂「Chain of Thought,CoT」思维链

前言: 思维链,在人工智能领域,是一个非常非常新的概念。强大的逻辑推理是大语言模型“智能涌现”出的核心能力之一,好像AI有了人的意识一样。而推理能力的关键在于——思维链(Chain of Thought,CoT)。 相关概念: 语言智能可以被理解为“使用基于自然语言的概念对经验事…...

杨中科 ASP.NET Core 中的依赖注入的使用

ASP.NET CORE中服务注入的地方 1、在ASP.NET Core项目中一般不需要自己创建ServiceCollection、IServiceProvider。在Program.cs的builder.Build()之前向builderServices中注入 2、在Controller中可以通过构造方法注入服 务。 3、演示 新建一个calculator类 注入 新建TestC…...

ESP32读取DHT11温湿度数据

芯片&#xff1a;ESP32 环境&#xff1a;Arduino 一、安装DHT11传感器库 红框的库&#xff0c;别安装错了 二、代码 注意&#xff0c;DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...

测试markdown--肇兴

day1&#xff1a; 1、去程&#xff1a;7:04 --11:32高铁 高铁右转上售票大厅2楼&#xff0c;穿过候车厅下一楼&#xff0c;上大巴车 &#xffe5;10/人 **2、到达&#xff1a;**12点多到达寨子&#xff0c;买门票&#xff0c;美团/抖音&#xff1a;&#xffe5;78人 3、中饭&a…...

MVC 数据库

MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

以光量子为例,详解量子获取方式

光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学&#xff08;silicon photonics&#xff09;的光波导&#xff08;optical waveguide&#xff09;芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中&#xff0c;光既是波又是粒子。光子本…...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表

##鸿蒙核心技术##运动开发##Sensor Service Kit&#xff08;传感器服务&#xff09;# 前言 在运动类应用中&#xff0c;运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据&#xff0c;如配速、距离、卡路里消耗等&#xff0c;用户可以更清晰…...

论文笔记——相干体技术在裂缝预测中的应用研究

目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术&#xff1a;基于互相关的相干体技术&#xff08;Correlation&#xff09;第二代相干体技术&#xff1a;基于相似的相干体技术&#xff08;Semblance&#xff09;基于多道相似的相干体…...

LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf

FTP 客服管理系统 实现kefu123登录&#xff0c;不允许匿名访问&#xff0c;kefu只能访问/data/kefu目录&#xff0c;不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...

华为OD机考-机房布局

import java.util.*;public class DemoTest5 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseSystem.out.println(solve(in.nextLine()));}}priv…...

如何更改默认 Crontab 编辑器 ?

在 Linux 领域中&#xff0c;crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用&#xff0c;用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益&#xff0c;允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...

MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)

macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 &#x1f37a; 最新版brew安装慢到怀疑人生&#xff1f;别怕&#xff0c;教你轻松起飞&#xff01; 最近Homebrew更新至最新版&#xff0c;每次执行 brew 命令时都会自动从官方地址 https://formulae.…...