EasyExcel 和 POI 优劣对比

POI一直以来被行业所诟病的问题,就是非常的消耗内存,

EasyExcel底层对POI进行了封装,重写了poi的方法。在解析Excel时没有将文件数据一次性全部加载到内存中,而是从磁盘上一行行读取数据,逐个解析,遇到再大的excel都不会出现内存溢出的问题,能够将一个原本3M的excel文件,POI来操作将会占用内存100M,使用EasyExcel降低到几KB,并且使用起来更加简单。

EasyExcel的使用

使用EasyExcel需要引入alibaba第三方依赖

<dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.2.6</version>
</dependency>
  • EasyExcel的读

一次完整的读取

public static void completeRead(String path) {#1. 配置信息//创建ExcelReaderBuilder实例ExcelReaderBuilder readerBuilder = EasyExcel.read();//映射制定对象,需要创建实体类,使用@ExcelProperty注解完成实体类成员变量和Excel字段的映射//解析Excel文件时候直接指定实体类即可//head()方法指定解析实体类类型//不指定默认Object类型,实质是Object的子类LinkedHashMap,断点调试的形式可以看到readerBuilder.head(FactorLibrary.class);//获取文件对象readerBuilder.file(path);//指定sheet,不指定去读所有readerBuilder.sheet("车站");//自动关闭输入流readerBuilder.autoCloseStream(true);//设置Excel文件格式readerBuilder.excelType(ExcelTypeEnum.XLSX);//注册监听器进行数据的解析readerBuilder.registerReadListener(new AnalysisEventListener<FactorLibrary.class> {/**这里需要重写两个方法:invoke 回调方法一行数据读取完成之后的回调,即读取一行数据就会进入回调函数当中,这就是观察者模式doAfterAllAnalysed  结束方法当读取完最后一条数据后,会进入到此方法*///可以通过泛型制定数据类型,Map集合//如果泛型制定的是特定类型,需要在head()方法中指定//如readerBuilder.head(FactorLibrary.class);@Overridepublic void invoke(FactorLibrary.class factorLi, AnalysisContext analysisContext) {System.out.println(integerStringMap);  //每次读取到的数据,即表中的一行数据}@Overridepublic void doAfterAllAnalysed(AnalysisContext analysisContext) {//通知读取文件读取完毕System.out.println("数据读取完毕");}});#2. 进行读取//以上是进行读取配置,下面开始真正的读取操作//构建读取器ExcelReader reader = readerBuilder.build();//读取数据reader.readAll();//读取完毕reader.finish();        }

实际开发中,可以对上述代码进行简化

public static void simpleRead(String path) {//直接读取,连着去写EasyExcel.read(path).head(FactorLibrary.class)       .sheet("桥梁").registerReadListener(new AnalysisEventListener<FactorLibrary>() {@Overridepublic void invoke(FactorLibrary factorLibrary, AnalysisContext analysisContext) {System.out.println(factorLibrary);}@Overridepublic void doAfterAllAnalysed(AnalysisContext analysisContext) {System.out.println("数据读取完毕");}}).doRead();
}
@Data
public class FactorLibrary {@ExcelProperty("电算代号")private String computerCode;@ExcelProperty("材料名称")private String materialName;@ExcelProperty("材料单位")private String materialUnit;@ExcelProperty("(原)材料种类")private String materialType;@ExcelProperty("碳排放因子")private String carbonEmissionFactor;@ExcelProperty("碳排放因子单位")private String carbonEmissionFactorUnit;@ExcelProperty("来源")private String origin;
}
  • EasyExcel的写

EasyExcel的读写操作格式几乎一致,这里写采用简单的格式作为实例

public static void simpleWrite(String path) {//要写入的数据,假设list有数据List<FactorLibrary> list = null;//list写入Excel文件EasyExcel.write("E:\\").head(FactorLibrary.class) //设置表头,不设置生成的excel表没有标题行,参数也可以是List.excelType(ExcelTypeEnum.XLSX).sheet().doWrite(list);
}

这就是EasyExcel的读写操作,是不是很简单?不要有任何畏惧,就这!

以上操作可以满足我们几乎所有需求。当然也会有一些复杂的操作,小伙伴们感兴趣可以深入学习

至于在实际开发中,随机应变,对症下药即可。

EasyExcel快速入门(详解)相关推荐

  1. python符号格式化设置区间_Python 数值区间处理_对interval 库的快速入门详解

    使用 Python 进行数据处理的时候,常常会遇到判断一个数是否在一个区间内的操作.我们可以使用 if else 进行判断,但是,既然使用了 Python,那我们当然是想找一下有没有现成的轮子可以用. ...

  2. Spring 快速入门详解

    Spring 入门详解 简介 Spring就是指Spring framework是分层的 Java SE/EE 一站式轻量级开源框架,Spring 框架是全家桶(spring mvc.spring b ...

  3. asm使用指南中文-md版快速入门详解

    asm4-guide-英文.pdf asm4-guide-中文 还是人家官网文档写得好,什么快速入门都不如官方文档,阅读两小时,就知道怎么回事了. ASM使用指南中文版 1. 介绍 1.1. 动机 1 ...

  4. ElasticSearch最新版快速入门详解

    写在前面:我是「且听风吟」,目前是某上市游戏公司的大数据开发工程师,热爱大数据开源技术,喜欢分享自己的所学所悟,现阶段正在从头梳理大数据体系的知识,以后将会把时间重点放在Spark和Flink上面. ...

  5. ElasticSearch快速入门详解(亲测好用,强烈推荐收藏)

    3.快速入门 接下来快速看下elasticsearch的使用 3.1.概念 Elasticsearch虽然是一种NoSql库,但最终的目的是存储数据.检索数据.因此很多概念与MySQL类似的. ES中 ...

  6. SpringMVC拦截器-快速入门详解(应用)

    拦截器在预处理后什么情况下会执行目标资源,什么情况下不执行目标资源,以及在有多个拦截器的情况下拦截器的执行顺序是什么? 再编写一个拦截器2, public class MyInterceptor2 i ...

  7. python语言编程基础-Python语言入门详解!快速学成Python!

    原标题:Python语言入门详解!快速学成Python! 很多技能是被职场所需要的,但很可惜... 这些技能在大学中并学习不到. 大学和职场现实存在的横沟对大部分同学来说难以跨越或碰得头破血流... ...

  8. python语言入门-Python语言入门详解!快速学成Python!

    原标题:Python语言入门详解!快速学成Python! 很多技能是被职场所需要的,但很可惜... 这些技能在大学中并学习不到. 大学和职场现实存在的横沟对大部分同学来说难以跨越或碰得头破血流... ...

  9. python语言入门m-Python语言入门详解!快速学成Python!

    今日主题 "Python语言入门详解" 近两年来,Python语言借着数据科学和人工智能的"东风"成为了最流行的编程语言--街头巷尾人们口口相传.同时,Pyth ...

  10. FFmpeg入门详解之104:Win10快速安装OpenSSL(不用编译源码)

    win10x64安装OpenSSL:不用编译源码 网上一堆的教程教你去下载opensll源代码并用vs进行编译,虽然我有安装vs2015,但是看到那么长的编译步骤,太心累了. 懒人只得找简单的方法,最 ...

最新文章

  1. 华为鸿蒙有机会吗,谷歌重压之下,华为鸿蒙还有机会翻盘吗?全球系统生态之争开启...
  2. MySQL 中的运算符
  3. CodeForces - 1368E Ski Accidents(拓扑排序)
  4. ocp 042 第十二章:主动维护
  5. 桌面 NAS 是什么
  6. 免费的开源软件那么“香”,为何他们宁愿花钱去买软件?
  7. Android数据存储之SQLite数据库存储
  8. matlab nc转tif_旬和月NDVI最大值合成MATLAB
  9. Master-Worker设计模式介绍
  10. 结对编程之求首尾相连数组中最大子数组的和
  11. MacroSAN杭州宏杉科技存储使用小节
  12. 基于vue的UI框架ydui中的楼层跳跃scrolltab问题解决
  13. Mysql 讲解所有的约束类型
  14. linux格式化叫大硬盘命令,Linux_format命令 参数说明,格式化 格式化指定卷中的磁盘 - phpStudy...
  15. 这届勒索病毒,其实很有上进心呀
  16. JAVA的jdk1.8中文文档
  17. SDN网络的本质特点
  18. 仪器分析和计算机,化学分析和仪器分析的区别
  19. android 区分wifi是5G还是2.4G
  20. 关于 FullNat 模式的 Toa 实现原理【转】

热门文章

  1. Dism方式离线安装windows更新
  2. iphone6s 刷android,iPhone也能刷安卓,只限两款手机,国外大神骚操作
  3. 华为服务器密码忘记了怎么修改密码,云服务器密码忘记了怎么改
  4. 软件测试--测试计划
  5. Java项目与练习 01 猜数字
  6. 利用CSDN平台上传图片保存,生成链接访问。
  7. 卜若的代码笔记-一周搞定树莓派-第十七章:(QT基础七:定时器)
  8. 我们需要一台怎么样的车载空气净化器?
  9. javaScript读取页面表格中每个单元到EXCEL中
  10. c语言 手柄 api,让游戏支持手柄输入(控制台)字符打飞机