springboot-EasyExcel
一、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相关推荐
- 基于SpringBoot+EasyExcel+vue3实现excel表格的导入和导出
目录 基于SpringBoot+EasyExcel+vue3实现excel表格的导入和导出 一.导入和导出 二.导出数据为excel实现过程 三.将excel中的数据导入到数据库中 基于SpringB ...
- springboot easyexcel导出百万数据优化
说明 由于某些原因系统jvm内存最大只能给到512,但是要导出百万数据该如何实现呢?传统的一次性导出肯定是不行的 优化 Excel导出基于 springboot , easyexcel 依赖: < ...
- Springboot + Easyexcel读取写入数据,多头行数,多sheet,复杂表头简单实现
Springboot + Easyexcel 读取数据 简单读取excel文件 读取下图的 excel 数据 导入依赖,阿里的easyexcel插件 <dependency><gro ...
- springboot easyexcel不创建对象导入excel 通用版
文章目录 背景知识介绍 有数据对象读方式 创建类实现ReadListener 无额外实现类,since: 3.0.0-beta1 不创建数据对象读方式 实践 思路 抽象监听类 抽象业务处理类 具体业务 ...
- springboot+easyexcel实现固定表头+动态表头的数据导出
/*** 固定标头的实体类*/ @Data public class BaseExportExcelStringVo implements Serializable {private static f ...
- 使用VUE+SpringBoot+EasyExcel 整合导入导出demo
导出示例: 后台: 1.引入依赖:需要引入easyExcel的依赖,但是我在使用过程中发现也是需要poi的依赖,不然会报错,就同时引入了. <dependency><groupId& ...
- springboot + EasyExcel 实现操作Excel文件
EasyExcel简介 EasyExcel特点 Java领域解析.生成Excel比较有名的框架有Apache poi.jxl等.但他们都存在一个严重的问题就是非常的耗内存.如果你的系统并发量不大的话可 ...
- SpringBoot中使用Easyexcel实现Excel导入导出功能(三)
导出的数据包含有图片 导出excel表格的数据包含有图片,这种场景比较少.通Easyexcel实现这样的需求,我认为最简便的方法就是使用前面提到的自定义转换器(com.alibaba.excel.co ...
- SpringBoot中使用Easyexcel实现Excel导入导出功能(一)
目录 前言 1.常规导入 2.读取到指定的列 3.读取全部的sheet页 4.日期.数字及其他自定义格式的转换 5.表头有多行的表格读取 6.表头数据的读取 7.单元格内的备注内容读取 前言 exce ...
- easyexcel导入时读不到数据_SpringBoot中EasyExcel实现Excel文件的导入导出
前言 在我们日常的开发过程中经常会使用Excel文件的形式来批量地上传下载系统数据,我们最常用的工具是Apache poi,但是如果数据到底上百万时,将会造成内存溢出的问题,那么我们怎么去实现百万数据 ...
最新文章
- 关于Firefox在Win8下界面显示错乱的解决方法
- Linux添加vlan不通,如何处理Linux虚拟机跨VLAN ping不通问题
- 硬件工程师面试经历2015---笔试篇
- (多表)关联update 超过两个字段以上
- 【VBS】IE11如何运行 Visual Basic Script 程序
- pom文件报错,错误如下:(org.apache.maven.project.MavenProject,org.apache.maven.archiver.MavenArchiveConfigurat
- android 动态创建view,react-native动态创建Android View 无效果
- Python 凭什么打败 Java、C/C++,成为机器学习的唯一语言?
- 微博android4.1.2,微博客户端Fuubo
- mysql case when like_mysql 中casewhen用法
- php的威富通支付接口,威富通支付接口 - osc_hlr8sqnv的个人空间 - OSCHINA - 中文开源技术交流社区...
- 台湾瑞昱Realtek RTL8153-VC-CG USB3.0 to lan简介
- 论文写作中Word设置公式居中编号右对齐保姆级教程
- Kaldi特征提取之-FBank
- 怎么设置计算机开机顺序,教你设置电脑开机程序启动顺序的详细教程
- UNIX 系统家族树的详细历史(图)
- 【Python小知识】:什么是序列解包
- matlab等式操作,等式和等式约束
- Spark 中 RDD 的详细介绍
- 7行代码实现一个Tvoc/eCO2有害气体检测仪
热门文章
- 黑客零基础入门:手把手带你实现简单的QQ/邮件攻击,注册表/系统安全防护,学不会请给我只因木马
- 爱奇艺基础数据平台演进
- 如何搭建Java平台
- 关于Linux下病毒的话题
- 【牛客网——算法刷题】开篇介绍
- POC-T框架学习————9、相关脚本深入学习五
- android软件工程师/android中间件开发
- Python C/S 网络编程(二)之 UDP 实现英汉词典查询小程序
- 电大Android智能手机编程答案,8941_Android智能手机编程_任务3_(福建电大省开课)辅导资料...
- doraemon的python 守护进程和Process