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

Java中处理表格

大家好 , 我是苏麟 , 也是很久没有更新了 , 今天带来一个很好使用的一个库 easyexcel.

JAVA后端开发中可能会遇到一个问题 , 就是处理Execel表格 , 当然不一定非要用Java 我们在这里只说在Java里怎么去处理表格 . 

Easy Excel

 我们今天要说到就是 Easy Excel , 这个是阿里的项目

官方文档连接   :   https://easyexcel.opensource.alibaba.com/

可直接点    :   EasyExcel官方文档 - 基于Java的Excel处理工具 | Easy Excel (alibaba.com)

 

引入依赖

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

下面开始读Excel 

两种方式 :

第一种最简单方式

Demo :  例如我们有一个表格

 第一步在Java中创建一个类 , 每一个标题对应一个字段

@Data
public class ExcelDemo {/*** 用户编号*/@ExcelProperty("用户编号")private String userId;/*** 用户姓名*/@ExcelProperty("用户姓名")private String username;}

第二步准备一个读取数据的类

/*** 用户*/
public class UserImportExcel {public static void main(String[] args) {//获取Excel的绝对路径String fileName = "T:\\projrct\\src\\main\\java\\com\\sl\\ExcelOnce\\sll.xlsx";//打印数据userList.forEach(System.out::println);//读取数据List<ExcelDemo> userList = EasyExcelFactory.read(fileName).head(ExcelDemo.class).sheet().doReadSync();//过滤掉重复数据Map<String, List<ExcelDemo>> collectList =userList.stream().filter(suer -> StringUtils.isNotEmpty(suer.getUsername())).collect(Collectors.groupingBy(ExcelDemo::getUsername));System.out.println("不重复数据数量是 : " + collectList.keySet().size());}
}

运行结果

 第二种方式 : 监听器

第一步在Java中创建一个类

@Data
public class ExcelDemo {/*** 用户编号*/@ExcelProperty("用户编号")private String userId;/*** 用户姓名*/@ExcelProperty("用户姓名")private String username;}

第二步准备一个监听器

@Slf4j
public class ExcelDemoListener implements ReadListener<ExcelDemo> {/*** 这个每一条数据解析都会来调用** @param data    one row value. Is is same as {@link AnalysisContext#readRowHolder()}* @param context*/@Overridepublic void invoke(ExcelDemo data, AnalysisContext context) {System.out.println(data);}/*** 所有数据解析完成了 都会来调用** @param context*/@Overridepublic void doAfterAllAnalysed(AnalysisContext context) {// 这里也要保存数据,确保最后遗留的数据也存储到数据库System.out.println("数据处理完成");}}

第三步准备实现的类

public class ImportExcel {public static void main(String[] args) {//获取Excel的路径String fileName = "T:\\projrct\\src\\main\\java\\com\\sl\\ExcelOnce\\sll.xlsx";/***    方法1.监听器*   优点: 清晰便于维护*   缺点:要写监听器 , 一次只能处理一条数据*/readByListener(fileName);}/*** 通过监听器的方法来读取数据** @param fileName*/public static void readByListener(String fileName) {//读取数据EasyExcelFactory.read(fileName, ExcelDemo.class, new ExcelDemoListener()).sheet().doRead();}}

结果是一样的

读取表格还是很简单的 , 学会读取表格之后写入表格就更简单了

写入表格

准备一个和表格字段一样的类

@Data
public class ExcelDemo {/*** 用户编号*/@ExcelProperty("用户编号")private String userId;/*** 用户姓名*/@ExcelProperty("用户姓名")private String username;}

准备一个写入表格的类

public class UserImportExcel {public static void main(String[] args) {// 已读取和处理后的数据列表List<YupiWriteData> dataList = userList;//Excel表的名称String fileName = "sll.xlsx";EasyExcel.write(fileName, ExcelDemo.class).sheet("数据表").doWrite(dataList);}}
}

这里会把原来的数据覆盖掉......

当然也有许多好用的处理Excel表格的库 例如 :  apache poi , easypoi ......

如果想了解更多 , 请看官网文档 , 会给您带来一种新的感受......

拜拜 , 期待下一次的见面!

相关文章:

Java中处理表格

大家好 , 我是苏麟 , 也是很久没有更新了 , 今天带来一个很好使用的一个库 easyexcel. JAVA后端开发中可能会遇到一个问题 , 就是处理Execel表格 , 当然不一定非要用Java 我们在这里只说在Java里怎么去处理表格 . Easy Excel 我们今天要说到就是 Easy Excel , 这个是阿里的项…...

指静脉开集测试(OpenSet-test)代码(包含7个数据集)

七个数据集:sdu、mmc、hkpu、scut、utfvp、vera、nupt 一、SDU 80%用于训练,20%用于作为开集测试 1.数据集分割代码 ①先把636个类别提取出来 func: 创建temp_sdu,将636个类划分出来。下一个代码块将进行openset_sdu的分割import os from shutil import copy, rmtre…...

okcc对接ASR平台,okcc客户投诉的安全问题

客户投诉: 客户为什么要投诉&#xff1f;实际上分为两种情况&#xff0c;一是客户被冒犯到不能容忍导致的投诉&#xff0c;二是恶意投诉。降低客户被冒犯投诉的概率&#xff0c;无非就是选择客户、规范用语、降低频度&#xff1b;减少恶意投诉&#xff0c;回避是实践证明最有效…...

JVM中判定对象是否回收的的方法

引用计数法 引用计数法是一种垃圾回收&#xff08;Garbage Collection&#xff09;算法&#xff0c;用于自动管理内存中的对象。在引用计数法中&#xff0c;每个对象都有一个关联的引用计数器&#xff0c;用于记录对该对象的引用数量。 当一个新的引用指向对象时&#xff0c;…...

macos 使用vscode 开发python 爬虫(开发二)

以下是一个示例&#xff0c;用于爬取一个公开的示例网站&#xff08;http://books.toscrape.com&#xff09;&#xff0c;并提取书籍的标题和价格&#xff1a; import requests from bs4 import BeautifulSoup# 发起请求并获取网页内容 url 可以用上面的链接&#x1f517; re…...

(已解决)redis.get报错com.alibaba.fastjson.JSONException: autoType is not support

redis存取值问题&#xff0c;存自定义实体对象&#xff1b; 第一次取的时候报错&#xff1a;com.alibaba.fastjson.JSONException: autoType is not support。 GenericFastJsonRedisSerializer序列化和反序列化redis的value值&#xff0c;需要bean对象含有无参构造方法。 解决…...

控价可以这样做

品牌为什么要做控价&#xff0c;因为渠道中的低价、假货、窜货链接不仅会影响品牌价值和发展&#xff0c;还会影响经销商的合作&#xff0c;长期销售受阻的经销商&#xff0c;会选择低价更价&#xff0c;或者不合作&#xff0c;这无疑是在使品牌渠道走向更为混乱的局面。同时低…...

Spring学习笔记之Spring IoC注解式开发

文章目录 声明Bean的注解Component注解Controller注解Service注解Repository Spring注解的使用选择性实例化Bean负责注入的注解ValueAutowired与QuaifierResource 全注解式开发 注解的存在主要是为了简化XML的配置。Spring6倡导全注解开发 注解怎么定义&#xff0c;注解中的属性…...

C语言入门教程,C语言学习教程(非常详细)第二章 c语言初探

第一个C语言程序 我们有两种方式从计算机获得信息&#xff1a;一是看屏幕上的文字、图片、视频等&#xff0c;二是听从喇叭发出来的声音。让喇叭发出声音目前还比较麻烦&#xff0c;我们先来看看如何在屏幕上显示一些文字吧。 在屏幕上显示文字非常简单&#xff0c;只需要一个…...

HOT99-下一个排列

leetcode原题链接&#xff1a;下一个排列 题目描述 整数数组的一个 排列 就是将其所有成员以序列或线性顺序排列。 例如&#xff0c;arr [1,2,3] &#xff0c;以下这些都可以视作 arr 的排列&#xff1a;[1,2,3]、[1,3,2]、[3,1,2]、[2,3,1] 。整数数组的 下一个排列 是指其…...

JAVA基础知识(二)——程序流程控制

程序流程控制 一、程序流程控制1.1 程序流程控制1.2 顺序结构1.3 分支结构1.4 循环结构1.5 嵌套循环1.6 return的使用 一、程序流程控制 1.1 程序流程控制 流程控制语句是用来控制程序中各语句执行顺序的语句&#xff0c;可以把语句组合成能完成一定功能的小逻辑模块。 其流程…...

mysql知识点+面试总结

目录 1 mysql介绍 2 数据库常见语法 3 数据库表的常见语法 4 其他常见语法&#xff08;日期&#xff0c;查询表字段&#xff09; 5 JDBC开发步骤 6 索引 6.1 索引常见语法 7 常见面试总结 8 java代码搭建监控页面 1 mysql介绍 数据库&#xff1a;存储在硬盘上的文件系统…...

前端大屏常用的适配方案

假设我们正在开发一个可视化拖拽的搭建平台&#xff0c;可以拖拽生成工作台或可视化大屏&#xff0c;或者直接就是开发一个大屏&#xff0c;首先必须要考虑的一个问题就是页面如何适应屏幕&#xff0c;因为我们在搭建或开发时一般都会基于一个固定的宽高&#xff0c;但是实际的…...

技术债 笔记

目录 1. 技术债 笔记1.1. 什么是技术债1.2. 讨论1.3. 国内技术从业者怎么看? 1. 技术债 笔记 1.1. 什么是技术债 1992 年, Ward Cunningham 在敏捷宣言中首次提出了"技术债"概念, 主要指有意或无意地做了错误的或不理想的技术决策所累积的债务。随后, 《重构》一书…...

【Leetcode】102.二叉树的层序遍历

一、题目 1、题目描述 给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。 示例1: 输入:root = [3,9,20,null,null,15,7] 输出:[[3],[9,20],[15,7]]示例2: 输入:root = [1] 输出:[[1]]示例3: 输入:root = [] 输出:[]…...

上传文件报413Request EntityToo Large错误解决办法

产生这种原因是因为服务器限制了上传大小 1、nginx服务器的解决办法 修改nginx.conf的值就可以解决了 将以下代码粘贴到nginx.conf内 client_max_body_size 20M 可以选择在http{ }中设置&#xff1a;client_max_body_size 20m; 也可以选择在server{ }中设置&#xff1a;cli…...

Neo4j之MERGE基础

在 Neo4j 中&#xff0c;MERGE 语句用于根据指定的模式进行创建或匹配节点和关系。它可以在节点或关系不存在时创建它们&#xff0c;并在已存在时进行匹配。 创建或匹配节点&#xff1a; MERGE (p:Person {name: John});这个查询会检查是否已经存在一个具有 "Person&quo…...

AbstractRoutingDataSource,spring配置多数据源问题

AbstractRoutingDataSource&#xff0c;spring配置多数据源问题 首先引入pom.xml依赖 <!--测试--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><version>2.3.12.RE…...

日常BUG—— SpringBoot项目DEBUG模式启动慢、卡死。

&#x1f61c;作 者&#xff1a;是江迪呀✒️本文关键词&#xff1a;日常BUG、BUG、问题分析☀️每日 一言 &#xff1a;存在错误说明你在进步&#xff01; 一、问题描述 我们调试程序时&#xff0c;需要使用DEBUG模式启动SpringBoot项目&#xff0c; 有时候会发…...

Linux网络编程(TCP状态转换关系)

文章目录 前言一、TCP状态转换图二、TCP连接状态转换解析三、TCP断开状态转换解析四、为什么需要有2MLS时长总结 前言 本篇文章来讲解一下TCP的状态转换关系&#xff0c;学习这个状态转换关系对于我们深入了解网络编程是非常有必要的。 一、TCP状态转换图 二、TCP连接状态转换…...

Dramatron:AI驱动剧本创作的协同进化方法

Dramatron&#xff1a;AI驱动剧本创作的协同进化方法 【免费下载链接】dramatron Dramatron uses large language models to generate coherent scripts and screenplays. 项目地址: https://gitcode.com/gh_mirrors/dr/dramatron 问题&#xff1a;当代创作者的三重困境…...

AI巨头集体“铸Token”:从ChatGPT到“数字员工工厂”,程序员的狂欢还是危机?

想象一下&#xff1a;你早上醒来&#xff0c;打开电脑&#xff0c;不是自己敲代码&#xff0c;而是对着一只“龙虾”说&#xff1a;“帮我把昨天的Bug修了&#xff0c;顺便给老板发份周报。” 这不是科幻——2026年3月&#xff0c;这事儿正在发生。 全球头部科技公司突然集体“…...

OpenClaw自动化测试框架:百川2-13B驱动的CI/CD辅助方案

OpenClaw自动化测试框架&#xff1a;百川2-13B驱动的CI/CD辅助方案 1. 为什么选择OpenClaw做测试自动化 去年我在重构一个中型前端项目时&#xff0c;遇到了测试覆盖率不足的老问题。手动补测试用例不仅耗时&#xff0c;还经常遗漏边界条件。当我尝试用传统测试生成工具时&am…...

AI写教材大揭秘!低查重技巧让你的教材脱颖而出!

在编写教材时&#xff0c;依赖相关资料是必不可少的&#xff0c;但传统的资料整合方法已经无法满足现实需求。以往&#xff0c;我们需要从各种渠道&#xff0c;比如课标文件、学术研究以及教学案例中寻找所需的信息&#xff0c;这往往需要耗费数天的时间。即便信息搜集齐全&…...

Android开发职位深度解析与面试指南

引言 Android开发作为移动应用开发的核心领域,近年来随着智能手机的普及和技术的迭代,已成为IT行业的热门职业方向。本文基于一份典型的Android开发职位描述展开,深入探讨其核心技能要求、经验门槛、工具使用等关键要素。职位描述强调了对Flutter、多线程、Framework、Andr…...

Pencil:重新定义设计与开发的边界

&#x1f3a8; Pencil&#xff1a;重新定义设计与开发的边界 更多问题讨论和资料获取&#xff0c;请关注文章最后的微信公众号 当"设计即代码"成为现实&#xff0c;前端开发者的工作流正在经历一场革命 &#x1f4d6; 什么是 Pencil&#xff1f; 如果你是一名前端开…...

如何用stressapptest进行高效内存和磁盘压力测试?实战案例分享

如何用stressapptest进行高效内存和磁盘压力测试&#xff1f;实战案例分享 在服务器运维和硬件性能评估中&#xff0c;内存和磁盘的稳定性直接关系到系统的可靠性。想象一下&#xff0c;当你的服务器在凌晨三点突然因为内存错误崩溃&#xff0c;或者磁盘在高峰期出现读写异常&a…...

Windows 11 下 3D Gaussian Splatting (3DGS) 环境配置与实战指南

1. Windows 11下的3DGS环境搭建全攻略 第一次接触3D Gaussian Splatting&#xff08;简称3DGS&#xff09;这个技术时&#xff0c;我完全被它惊艳到了。它能够从几张普通的照片重建出逼真的3D场景&#xff0c;而且渲染速度极快。不过说实话&#xff0c;在Windows 11上配置这个环…...

YimMenu安全增强指南:四阶法实现GTA V体验升级

YimMenu安全增强指南&#xff1a;四阶法实现GTA V体验升级 【免费下载链接】YimMenu YimMenu, a GTA V menu protecting against a wide ranges of the public crashes and improving the overall experience. 项目地址: https://gitcode.com/GitHub_Trending/yi/YimMenu …...

ae新手福音,用快马平台ai生成带注释的片段视频代码轻松入门

作为一个刚接触AE的新手&#xff0c;第一次打开软件时确实被复杂的界面吓到了。各种面板、时间轴、效果控件看得眼花缭乱&#xff0c;更别说要自己写表达式了。直到发现了InsCode(快马)平台&#xff0c;用自然语言描述就能生成带详细注释的AE项目代码&#xff0c;简直是新手的救…...