Easy Excel 使用快速入门
文章目录
- 前言
- 一、Easy Excel是什么?
- 二、使用EasyExcel 实现读操作
- 1.导入依赖
- 2.创建要读取数据的封装类
- 3.创建读取excel 监听器
- 调用监听器
- 三 使用EasyExcel 实现写操作
- **写操作有两种写法,一种是不创建对象的写入,另一种是根据对象写入。这里主要介绍创建对象写入**
- 创建对象写入
- 总结
前言
使用spring boot 对excel 进行操作在平时项目中要经常使用。常见通过jxl和poi 的方式进行操作。但他们都存在一个严重的问题就是非常的耗内存。这里介绍一种 Easy Excel 工具来对excel进行操作。
一、Easy Excel是什么?
EasyExcel是阿里巴巴开源的一个excel处理框架,以使用简单、节省内存著称。easyExcel能大大减少占用内存的主要原因是在解析Excel时没有将文件数据一次性全部加载到内存中,而是从磁盘上一行行读取数据,逐个解析。
二、使用EasyExcel 实现读操作
从excel 中读取数据,常用的场景就是读取excel的数据,将相应的数据保存到数据库中。需要实现一定的逻辑处理。
1.导入依赖
<dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.1.1</version></dependency>
2.创建要读取数据的封装类
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;@Data
public class SubjectDate {@ExcelProperty(index = 0)// 一级目录private String oneSubjectName;@ExcelProperty(index = 1)// 二级目录private String twoSubjectName;}
比如我们要读取两列的数据,就写两个属性。@ExcelProperty(index = 0)来设置要读取的列,index=0表示读取第一列。
3.创建读取excel 监听器
监听器继承 AnalysisEventListener 类
package com.boshrong.edu.entity.excel;import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.boshrong.edu.entity.EduSubject;
import com.boshrong.edu.service.EduSubjectService;
import com.boshrong.utils.globalException.myException;
import org.springframework.stereotype.Service;import java.util.ArrayList;
import java.util.List;public class SubjectListener extends AnalysisEventListener<SubjectDate> {// 创建list集合封装最终的数据//List<SubjectDate> list=new ArrayList<SubjectDate>();public EduSubjectService eduSubjectService;public SubjectListener(EduSubjectService eduSubjectService) {this.eduSubjectService = eduSubjectService;}public SubjectListener(){}@Override/*** 这个每一条数据解析都会来调用*///一行一行去读取excle内容 subjectDate 为每一行的数据,第一个数据为每行的数据public void invoke(SubjectDate subjectDate, AnalysisContext analysisContext) {if(subjectDate==null)throw new myException(20001,"文件数据为空");// 一行一行的读取数据EduSubject eduSubject=existOneSubject(subjectDate.getOneSubjectName(),eduSubjectService);if(eduSubject==null){eduSubject=new EduSubject();eduSubject.setTitle(subjectDate.getOneSubjectName());eduSubject.setParentId("0");eduSubjectService.save(eduSubject);}//获取一级分类id值 作为二级分类的父idString pid=eduSubject.getId();EduSubject eduSubject1=existTwoSubject(eduSubjectService,subjectDate.getTwoSubjectName(),pid);if (eduSubject1==null){eduSubject1=new EduSubject();eduSubject1.setTitle(subjectDate.getTwoSubjectName());eduSubject1.setParentId(pid);eduSubjectService.save(eduSubject1);}}// 判断一级目录不为空//select * from edu_subject where title=? and parent_id=0public EduSubject existOneSubject(String name,EduSubjectService eduSubjectService){QueryWrapper<EduSubject> wrapper=new QueryWrapper<>();wrapper.eq("title",name);wrapper.eq("parent_id","0");EduSubject eduSubject=eduSubjectService.getOne(wrapper);return eduSubject;}// 判断二级目录不为空private EduSubject existTwoSubject(EduSubjectService subjectService,String name,String pid) {QueryWrapper<EduSubject> wrapper = new QueryWrapper<>();wrapper.eq("title",name);wrapper.eq("parent_id",pid);EduSubject twoSubject = subjectService.getOne(wrapper);return twoSubject;}@Overridepublic void doAfterAllAnalysed(AnalysisContext analysisContext) {}
}
当解析每一条数据时都会调用invoke方法,当所有数据都解析完毕时最后会调用doAfterAllAnalysed方法。上述代码将读取的excel数据经过判断处理后,放入数据。可以不看existOneSubject, existTwoSubject 方法。
调用监听器
通常在上传功能时,我们会传来一个excel文件。我们会读取excel中的文件加入数据库,这个时候需要调用监听器。
// 获取上传过来的文件,把文件中的内容读取出来@PostMapping("addSubject")// MutipartFile 表示当前上传文件public Result addSubject(MultipartFile file){//得到上传过来的文件,将数据传到数据库eduSubjectService.saveSubject(file,eduSubjectService);return Result.sucess().message("文件上传成功");}
eduService 中的逻辑
public void saveSubject(MultipartFile file,EduSubjectService eduSubjectService) {try {InputStream in=file.getInputStream();EasyExcel.read(in, SubjectDate.class,new SubjectListener(eduSubjectService)).sheet().doRead();}catch (Exception e){System.out.println(e);}}
关键代码
InputStream in=file.getInputStream()
EasyExcel.read(in,SubjectDate.class,new SubjectListener(eduSubjectService)).sheet().doRead();
获取文件的输入流,执行EasyExcel read方法参数为 输入流,封装数据类,调用监听器(使用构造器注入相关数据库service)。
三 使用EasyExcel 实现写操作
写操作有两种写法,一种是不创建对象的写入,另一种是根据对象写入。这里主要介绍创建对象写入
创建对象写入
创建excel对象类
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;@Data
public class DemoData {@ExcelProperty("学生编号")private int sno;@ExcelProperty("学生姓名11")private String stu_name;}
注意@ExcelProperty(“学生编号”) 会生成相应的列名为 学生编号
import com.alibaba.excel.EasyExcel;import java.util.ArrayList;
import java.util.List;public class TestExcel {private static List<DemoData> data(){List<DemoData> list=new ArrayList<DemoData>();for(int i=0;i<10;i++){DemoData data=new DemoData();data.setSno(i);data.setStu_name("张三"+i);list.add(data);}return list;}public static void main(String args[]) throws Exception{String filename="F:\\学生信息.xlsx";EasyExcel.write(filename, DemoData.class).sheet("写入方法一").doWrite(data());}}
放入数据,并写入excel
运行结果
总结
提示:这里对文章进行总结:
这就简单的利用easyExcel 对Excel 进行操作步骤。
Easy Excel 使用快速入门相关推荐
- POI3.5 HSSFXSSF Excel 操作快速入门
POI3.5 HSSF&XSSF Excel 操作快速入门 1 本文翻译自 http://poi.apache.org/spreadsheet/quick-guide.html 欢迎交流指正 ...
- 【VisualBasicApplication】Excel编程 快速入门
VBA Excel的宏与VBA 宏的录制 宏的启动运行 快捷键运行宏: 使用Excel对象运行宏* VBA的数据类型 字符串(String) 整形(Integer)和长整形(Long) 单精度浮点型( ...
- Easy Excel
Easy Excel Easy Excel 1. 为什么有使用easyexcle 2. easvexcel拟解决的问题 3. 工作原理 4. ORM根据数据库表创建实体类的一个小技巧 5. 写exce ...
- spss22.0统计分析从入门到精通_数据分析最全资料:SPSS/MATLAB/SQL/SAS/EXCEL经典教材+视频教程,快速入门!...
可以说当今社会数据就是力量.数据分析能力已经成为各个行业必备的技能,如果能熟练掌握数据分析技能,不管是留学申请还是以后的就业,都会是一个很大的加分项. 但是目前国内很少有高校专门开设数据分析课程,想要 ...
- 处理Excel的Python算法_4.1_:数组导入和整理模块——Panda(快速入门)
索引 官方网站 QuickStart Pandas概览 数据结构 大小可变与数据复制 快速入门 生成对象 查看数据 选择 缺失值 运算 合并(Merge) 分组(Grouping) 重塑(Reshap ...
- EasyPoi快速入门(Excel导入导出工具)
简介: easypoi是一款Excel快速导入导出的工具,最近有所使用,结合了网上的一些用法和官方文档的介绍,在在这里总结一下最简单的esaypoi导入Excel的实现,网上很多教程都已经封装了工具类 ...
- ApachePOI操作Excel快速入门使用
简介 Apache POI 是一个处理Miscrosoft Office各种文件格式的开源项目,主要任务是创建和维护Java API,以基于Office Open XML标准(OOXML)和Micro ...
- python快速编程入门教程-半小时带你快速入门Python编程,Python快速入门教程
1,Introduction to Python (Python入门) 2,Python是什么? Python 官方网站的描述 Python is a programming language tha ...
- python快速入门 pdf-Python快速入门 (第3版) PDF 下载
相关截图: 资料简介: 这是一本Python快速入门书,基于Python 3.6编写.本书分为4部分,*部分讲解Python的基础知识,对Python进行概要的介绍:第二部分介绍Python编程的重点 ...
- 【转】Robot Framework 快速入门
目录 介绍 概述 安装 运行demo 介绍样例应用程序 测试用例 第一个测试用例 高级别测试用例 数据驱动测试用例 关键词keywords 内置关键词 库关键词 用户定义关键词 变量 定义变量 使用变 ...
最新文章
- adb查看app的日志
- 如何创建 Angular library 并在生产环境中消费
- 【毕业设计】PHP课程网站络管理系统(源代码+论文)
- 线性模型第2讲:岭回归与分类
- 8.从Paxos到Zookeeper分布式一致性原理与实践---Zookeeper 运维
- AOP面向切面编程(1.6w字长文讲清AOP)
- 软件测试简历项目经验介绍,软件测试工程师项目经验简历范文
- 搭建sspanel 教程三(后端教程)
- 【prince2考试扫盲】Prince2 跟 pmp 有什么区别?项目经理考哪一个?详细解答来了
- 浅谈Web身份识别技术 —— Cookie、Session 和 Token
- 数学建模常用数据汇总!!!
- uniapp之小程序端生成分享海报(带自定义参数的二维码)
- 电商库存系统设计mysql_详解:电商系统库存逻辑的设计
- IT项目经理应具备的十大软技能
- 《看板实战》读书笔记 XMIND版本
- Ambari2.7.4 + HDP3.1.4 离线安装(1)
- 基于QT的电子相册设计与实现
- 2.基于文心大模型套件ERNIEKit实现文本匹配算法,模块化方便应用落地
- 搜苹果ipad版_iPad抠图比PC更给力 iPad版PS的自动抠图神了-iPad,PS ——快科技(驱动之家旗下媒体)-...
- 带有三条均线的Tick成交量指标
热门文章
- 开放信息抽取(OIE)系统(一)--概述
- 来看看你踩坑没有,新手做自媒体却没有收益?原因都在这5点
- Out of sort memory, consider increasing server sort buffer size
- 书籍推荐:国内第一本ASP.NET 3.5 MVC技术专著
- 3D-GIS地理信息系统项目实施及目标
- Unity EmbeddedBrowser浏览器插件事件通讯
- Shiny应用基础(5):数据获取与响应
- Contents mismatch at: 08000000H (Flash=FFH Required=00H) ! Too many errors to display !
- Context是什么
- 小米路由器拨号显示无法连接服务器,小米路由器4连不上网(不能上网)怎么办? | 192路由网...