一、Excel导入导出的应用场景

1、数据导入:减轻录入工作量

2、数据导出:统计信息归档

3、数据传输:异构系统之间数据传输

二、EasyExcel简介

1、EasyExcel特点

  • Java领域解析、生成Excel比较有名的框架有Apache poi、jxl等。但他们都存在一个严重的问题就是非常的耗内存。如果你的系统并发量不大的话可能还行,但是一旦并发上来后一定会OOM或者JVM频繁的full gc。
  • EasyExcel是阿里巴巴开源的一个excel处理框架,以使用简单、节省内存著称。EasyExcel能大大减少占用内存的主要原因是在解析Excel时没有将文件数据一次性全部加载到内存中,而是从磁盘上一行行读取数据,逐个解析。
  • EasyExcel采用一行一行的解析模式,并将一行的解析结果以观察者的模式通知处理(AnalysisEventListener)。

Excel写

1、创建一个普通的maven项目

项目名:excel-easydemo

2、pom中引入xml相关依赖

<dependencies><!-- https://mvnrepository.com/artifact/com.alibaba/easyexcel --><dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.1.1</version></dependency>
</dependencies>

3、创建实体类

设置表头和添加的数据字段

import com.alibaba.excel.annotation.ExcelProperty;//设置表头和添加的数据字段
public class DemoData {//设置表头名称@ExcelProperty("学生编号")private int sno;//设置表头名称@ExcelProperty("学生姓名")private String sname;public int getSno() {return sno;}public void setSno(int sno) {this.sno = sno;}public String getSname() {return sname;}public void setSname(String sname) {this.sname = sname;}@Overridepublic String toString() {return "DemoData{" +"sno=" + sno +", sname='" + sname + '\'' +'}';}
}

4 、实现写操作

(1)创建方法循环设置要添加到Excel的数据

//循环设置要添加的数据,最终封装到list集合中
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.setSname("张三"+i);list.add(data);}return list;
}

(2)实现最终的添加操作(写法一)

public static void main(String[] args) throws Exception {// 写法1String fileName = "F:\\11.xlsx";// 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭// 如果这里想使用03 则 传入excelType参数即可EasyExcel.write(fileName, DemoData.class).sheet("写入方法一").doWrite(data());
}

(3)实现最终的添加操作(写法二)

public static void main(String[] args) throws Exception {// 写法2,方法二需要手动关闭流String fileName = "F:\\112.xlsx";// 这里 需要指定写用哪个class去写ExcelWriter excelWriter = EasyExcel.write(fileName, DemoData.class).build();WriteSheet writeSheet = EasyExcel.writerSheet("写入方法二").build();excelWriter.write(data(), writeSheet);/// 千万别忘记finish 会帮忙关闭流excelWriter.finish();
}

Excel读

一、实现EasyExcel对Excel读操作

1、创建实体类

import com.alibaba.excel.annotation.ExcelProperty;
public class ReadData {//设置列对应的属性@ExcelProperty(index = 0)private int sid;//设置列对应的属性@ExcelProperty(index = 1)private String sname;public int getSid() {return sid;}public void setSid(int sid) {this.sid = sid;}public String getSname() {return sname;}public void setSname(String sname) {this.sname = sname;}@Overridepublic String toString() {return "ReadData{" +"sid=" + sid +", sname='" + sname + '\'' +'}';}
}

2、创建读取操作的监听器

import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.alibaba.excel.exception.ExcelDataConvertException;
import com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;//创建读取excel监听器
public class ExcelListener extends AnalysisEventListener<ReadData> {//创建list集合封装最终的数据List<ReadData> list = new ArrayList<ReadData>();//一行一行去读取excle内容@Overridepublic void invoke(ReadData user, AnalysisContext analysisContext) {System.out.println("***"+user);list.add(user);}//读取excel表头信息@Overridepublic void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {System.out.println("表头信息:"+headMap);}//读取完成后执行@Overridepublic void doAfterAllAnalysed(AnalysisContext analysisContext) {}
}

3、调用实现最终的读取

public static void main(String[] args) throws Exception {// 写法1:String fileName = "F:\\01.xlsx";// 这里 需要指定读用哪个class去读,然后读取第一个sheet 文件流会自动关闭EasyExcel.read(fileName, ReadData.class, new ExcelListener()).sheet().doRead();// 写法2:InputStream in = new BufferedInputStream(new FileInputStream("F:\\01.xlsx"));ExcelReader excelReader = EasyExcel.read(in, ReadData.class, new ExcelListener()).build();ReadSheet readSheet = EasyExcel.readSheet(0).build();excelReader.read(readSheet);// 这里千万别忘记关闭,读的时候会创建临时文件,到时磁盘会崩的excelReader.finish();
}

上传文件的形式读取

//添加课程分类
//poi读取excel内容
@Override
public void importSubjectData(MultipartFile file,EduSubjectService subjectService) {try {//1 获取文件输入流InputStream inputStream = file.getInputStream();// 这里 需要指定读用哪个class去读,然后读取第一个sheet 文件流会自动关闭EasyExcel.read(inputStream, ExcelSubjectData.class, new SubjectExcelListener(subjectService)).sheet().doRead();}catch(Exception e) {e.printStackTrace();throw new GuliException(20002,"添加课程分类失败");}
}

springboot-EasyExcel相关推荐

  1. 基于SpringBoot+EasyExcel+vue3实现excel表格的导入和导出

    目录 基于SpringBoot+EasyExcel+vue3实现excel表格的导入和导出 一.导入和导出 二.导出数据为excel实现过程 三.将excel中的数据导入到数据库中 基于SpringB ...

  2. springboot easyexcel导出百万数据优化

    说明 由于某些原因系统jvm内存最大只能给到512,但是要导出百万数据该如何实现呢?传统的一次性导出肯定是不行的 优化 Excel导出基于 springboot , easyexcel 依赖: < ...

  3. Springboot + Easyexcel读取写入数据,多头行数,多sheet,复杂表头简单实现

    Springboot + Easyexcel 读取数据 简单读取excel文件 读取下图的 excel 数据 导入依赖,阿里的easyexcel插件 <dependency><gro ...

  4. springboot easyexcel不创建对象导入excel 通用版

    文章目录 背景知识介绍 有数据对象读方式 创建类实现ReadListener 无额外实现类,since: 3.0.0-beta1 不创建数据对象读方式 实践 思路 抽象监听类 抽象业务处理类 具体业务 ...

  5. springboot+easyexcel实现固定表头+动态表头的数据导出

    /*** 固定标头的实体类*/ @Data public class BaseExportExcelStringVo implements Serializable {private static f ...

  6. 使用VUE+SpringBoot+EasyExcel 整合导入导出demo

    导出示例: 后台: 1.引入依赖:需要引入easyExcel的依赖,但是我在使用过程中发现也是需要poi的依赖,不然会报错,就同时引入了. <dependency><groupId& ...

  7. springboot + EasyExcel 实现操作Excel文件

    EasyExcel简介 EasyExcel特点 Java领域解析.生成Excel比较有名的框架有Apache poi.jxl等.但他们都存在一个严重的问题就是非常的耗内存.如果你的系统并发量不大的话可 ...

  8. SpringBoot中使用Easyexcel实现Excel导入导出功能(三)

    导出的数据包含有图片 导出excel表格的数据包含有图片,这种场景比较少.通Easyexcel实现这样的需求,我认为最简便的方法就是使用前面提到的自定义转换器(com.alibaba.excel.co ...

  9. SpringBoot中使用Easyexcel实现Excel导入导出功能(一)

    目录 前言 1.常规导入 2.读取到指定的列 3.读取全部的sheet页 4.日期.数字及其他自定义格式的转换 5.表头有多行的表格读取 6.表头数据的读取 7.单元格内的备注内容读取 前言 exce ...

  10. easyexcel导入时读不到数据_SpringBoot中EasyExcel实现Excel文件的导入导出

    前言 在我们日常的开发过程中经常会使用Excel文件的形式来批量地上传下载系统数据,我们最常用的工具是Apache poi,但是如果数据到底上百万时,将会造成内存溢出的问题,那么我们怎么去实现百万数据 ...

最新文章

  1. 关于Firefox在Win8下界面显示错乱的解决方法
  2. Linux添加vlan不通,如何处理Linux虚拟机跨VLAN ping不通问题
  3. 硬件工程师面试经历2015---笔试篇
  4. (多表)关联update 超过两个字段以上
  5. 【VBS】IE11如何运行 Visual Basic Script 程序
  6. pom文件报错,错误如下:(org.apache.maven.project.MavenProject,org.apache.maven.archiver.MavenArchiveConfigurat
  7. android 动态创建view,react-native动态创建Android View 无效果
  8. Python 凭什么打败 Java、C/C++,成为机器学习的唯一语言?
  9. 微博android4.1.2,微博客户端Fuubo
  10. mysql case when like_mysql 中casewhen用法
  11. php的威富通支付接口,威富通支付接口 - osc_hlr8sqnv的个人空间 - OSCHINA - 中文开源技术交流社区...
  12. 台湾瑞昱Realtek RTL8153-VC-CG USB3.0 to lan简介
  13. 论文写作中Word设置公式居中编号右对齐保姆级教程
  14. Kaldi特征提取之-FBank
  15. 怎么设置计算机开机顺序,教你设置电脑开机程序启动顺序的详细教程
  16. UNIX 系统家族树的详细历史(图)
  17. 【Python小知识】:什么是序列解包
  18. matlab等式操作,等式和等式约束
  19. Spark 中 RDD 的详细介绍
  20. 7行代码实现一个Tvoc/eCO2有害气体检测仪

热门文章

  1. 黑客零基础入门:手把手带你实现简单的QQ/邮件攻击,注册表/系统安全防护,学不会请给我只因木马
  2. 爱奇艺基础数据平台演进
  3. 如何搭建Java平台
  4. 关于Linux下病毒的话题
  5. 【牛客网——算法刷题】开篇介绍
  6. POC-T框架学习————9、相关脚本深入学习五
  7. android软件工程师/android中间件开发
  8. Python C/S 网络编程(二)之 UDP 实现英汉词典查询小程序
  9. 电大Android智能手机编程答案,8941_Android智能手机编程_任务3_(福建电大省开课)辅导资料...
  10. doraemon的python 守护进程和Process