文章目录

  • 前言
  • 一、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 使用快速入门相关推荐

  1. POI3.5 HSSFXSSF Excel 操作快速入门

    POI3.5 HSSF&XSSF Excel  操作快速入门 1 本文翻译自 http://poi.apache.org/spreadsheet/quick-guide.html 欢迎交流指正 ...

  2. 【VisualBasicApplication】Excel编程 快速入门

    VBA Excel的宏与VBA 宏的录制 宏的启动运行 快捷键运行宏: 使用Excel对象运行宏* VBA的数据类型 字符串(String) 整形(Integer)和长整形(Long) 单精度浮点型( ...

  3. Easy Excel

    Easy Excel Easy Excel 1. 为什么有使用easyexcle 2. easvexcel拟解决的问题 3. 工作原理 4. ORM根据数据库表创建实体类的一个小技巧 5. 写exce ...

  4. spss22.0统计分析从入门到精通_数据分析最全资料:SPSS/MATLAB/SQL/SAS/EXCEL经典教材+视频教程,快速入门!...

    可以说当今社会数据就是力量.数据分析能力已经成为各个行业必备的技能,如果能熟练掌握数据分析技能,不管是留学申请还是以后的就业,都会是一个很大的加分项. 但是目前国内很少有高校专门开设数据分析课程,想要 ...

  5. 处理Excel的Python算法_4.1_:数组导入和整理模块——Panda(快速入门)

    索引 官方网站 QuickStart Pandas概览 数据结构 大小可变与数据复制 快速入门 生成对象 查看数据 选择 缺失值 运算 合并(Merge) 分组(Grouping) 重塑(Reshap ...

  6. EasyPoi快速入门(Excel导入导出工具)

    简介: easypoi是一款Excel快速导入导出的工具,最近有所使用,结合了网上的一些用法和官方文档的介绍,在在这里总结一下最简单的esaypoi导入Excel的实现,网上很多教程都已经封装了工具类 ...

  7. ApachePOI操作Excel快速入门使用

    简介 Apache POI 是一个处理Miscrosoft Office各种文件格式的开源项目,主要任务是创建和维护Java API,以基于Office Open XML标准(OOXML)和Micro ...

  8. python快速编程入门教程-半小时带你快速入门Python编程,Python快速入门教程

    1,Introduction to Python (Python入门) 2,Python是什么? Python 官方网站的描述 Python is a programming language tha ...

  9. python快速入门 pdf-Python快速入门 (第3版) PDF 下载

    相关截图: 资料简介: 这是一本Python快速入门书,基于Python 3.6编写.本书分为4部分,*部分讲解Python的基础知识,对Python进行概要的介绍:第二部分介绍Python编程的重点 ...

  10. 【转】Robot Framework 快速入门

    目录 介绍 概述 安装 运行demo 介绍样例应用程序 测试用例 第一个测试用例 高级别测试用例 数据驱动测试用例 关键词keywords 内置关键词 库关键词 用户定义关键词 变量 定义变量 使用变 ...

最新文章

  1. adb查看app的日志
  2. 如何创建 Angular library 并在生产环境中消费
  3. 【毕业设计】PHP课程网站络管理系统(源代码+论文)
  4. 线性模型第2讲:岭回归与分类
  5. 8.从Paxos到Zookeeper分布式一致性原理与实践---Zookeeper 运维
  6. AOP面向切面编程(1.6w字长文讲清AOP)
  7. 软件测试简历项目经验介绍,软件测试工程师项目经验简历范文
  8. 搭建sspanel 教程三(后端教程)
  9. 【prince2考试扫盲】Prince2 跟 pmp 有什么区别?项目经理考哪一个?详细解答来了
  10. 浅谈Web身份识别技术 —— Cookie、Session 和 Token
  11. 数学建模常用数据汇总!!!
  12. uniapp之小程序端生成分享海报(带自定义参数的二维码)
  13. 电商库存系统设计mysql_详解:电商系统库存逻辑的设计
  14. IT项目经理应具备的十大软技能
  15. 《看板实战》读书笔记 XMIND版本
  16. Ambari2.7.4 + HDP3.1.4 离线安装(1)
  17. 基于QT的电子相册设计与实现
  18. 2.基于文心大模型套件ERNIEKit实现文本匹配算法,模块化方便应用落地
  19. 搜苹果ipad版_iPad抠图比PC更给力 iPad版PS的自动抠图神了-iPad,PS ——快科技(驱动之家旗下媒体)-...
  20. 带有三条均线的Tick成交量指标

热门文章

  1. 开放信息抽取(OIE)系统(一)--概述
  2. 来看看你踩坑没有,新手做自媒体却没有收益?原因都在这5点
  3. Out of sort memory, consider increasing server sort buffer size
  4. 书籍推荐:国内第一本ASP.NET 3.5 MVC技术专著
  5. 3D-GIS地理信息系统项目实施及目标
  6. Unity EmbeddedBrowser浏览器插件事件通讯
  7. Shiny应用基础(5):数据获取与响应
  8. Contents mismatch at: 08000000H (Flash=FFH Required=00H) ! Too many errors to display !
  9. Context是什么
  10. 小米路由器拨号显示无法连接服务器,小米路由器4连不上网(不能上网)怎么办? | 192路由网...