EasyExcel 轻松灵活读取Excel内容

JAVA解析Excel工具easyexcel

官网

项目中必不可少会有excel 导入的需求。之前项目中excel的导入都是由组里的大佬通过组装poi包来实现的。

可是效率有点惨不忍睹,虽然还挺好用。。。,偶然使用了 easyexcel 才发现差距原来有点大。

依赖

<!-- easyexcel -->
<dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.1.6</version>
</dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.17</version>
</dependency>
<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.17</version>
</dependency>
<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml-schemas</artifactId><version>3.17</version>
</dependency>

对比

大佬封装的方法

public static <T> List<T> parseExcelToObject(MultipartFile multipartFile, Class<T> clazz) throws RestApiException {List<T> resultList = new ArrayList<>();Field[] fields = getFields(clazz);List<List<Cell>> parseList = parseExcel(multipartFile);if (null == parseList || parseList.size() == 0) {return resultList;}try {for (List<Cell> cellList : parseList) {T object = clazz.newInstance();cellList.stream().forEach(e -> {if (null != e) {int index = e.getColumnIndex();setFieldValue(object, fields[index], e);}});resultList.add(object);}} catch (Exception e) {log.warn("解析文件出错   e={}", e.getMessage());throw new RestApiException(ErrorConstant.PARSE_IMPORT_FILE_ERROR, ErrorConstant.PARSE_IMPORT_FILE_ERROR_MSG);}return resultList;
}

基本上都是使用了原生的poi包的东西,没有进行二次封装。

使用了 easyexcel 的模板代码

@Override
@Transactional(rollbackFor = Exception.class)
public void excelImport(MultipartFile file) {try {BufferedInputStream bufferedInputStream = new BufferedInputStream(file.getInputStream());EasyExcel.read(bufferedInputStream, xxx.class, new AnalysisEventListener<xxx>() {List<xxx> list = new ArrayList();@Overridepublic void invoke(xxx data, AnalysisContext context) {log.info("解析到一条数据:{}", JSON.toJSONString(data));//可以在此实现业务代码list.add(data);// 达到BATCH_COUNT了,需要去存储一次数据库,防止数据几万条数据在内存,容易OOMif (list.size() >= BATCH_COUNT) {saveData();// 存储完成清理 listlist.clear();}}@Overridepublic void doAfterAllAnalysed(AnalysisContext context) {// 这里也要保存数据,确保最后遗留的数据也存储到数据库saveData();log.info("所有数据解析完成!");}/*** 加上存储数据库*/private void saveData() {log.info("{}条数据,开始存储数据库!", list.size());saveAll(list);log.info("存储数据库成功!");}}).sheet().doRead();} catch (IOException e) {e.printStackTrace();}return true;
}

测试

数据量:390条数据

耗时:2215

耗时:242

差距在10倍左右。如果数据量增大的话,感觉差距可能会更大。。

未完待续…

Alibaba之EasyExcel使用相关推荐

  1. 使用alibaba的easyexcel填充复杂模板,导出Excel,返回文件流

    做个记录,试了很多方法都不行(本来想使用对象单独写一个table,但是没找到属性),又不想更换依赖,后面才看到的模板填充,能用............ //依赖 <dependency>& ...

  2. Alibaba开源工具EasyExcel读写Excel文件

    前言 工作中使用 excel 表格处理数据是很常见的操作,经常会使用 excel 文件来导入数据或者导出数据,是不是脑海中已经思考有哪些处理excel框架? 小编之前呢就知道Java 解析.生成 Ex ...

  3. Apache POI与Alibaba EasyExcel 的使用

    Apache POI 与 Alibaba EasyExcel 的使用 Apache POI <dependencies><!-- xls(03) --><dependen ...

  4. easyexcel导入时读不到数据_EasyExcel简单使用--导入excel数据

    读Excel 1.依赖包 com.alibaba easyexcel 2.0.5 2.代码import java.io.File; import com.alibaba.excel.EasyExcel ...

  5. 在springboot中使用easyexcel导出数据excel表格

    第一步: 在pom.xml中添加easyexcel依赖 之前测试一些低版本会出现一些问题,所以在这里使用了2.1.6的版本. <dependency><groupId>com. ...

  6. JAVA连接Excel最好用的开源项目EasyExcel,官方使用文档及.jar包下载

    EasyExcel是一个基于Java的简单.省内存的读写Excel的开源项目.在尽可能节约内存的情况下支持读写百M的Excel. github地址:https://github.com/alibaba ...

  7. java导入导出excel_Java导入导出Excel工具 easyexcel

    Java导入导出Excel工具  easyexcel 做Java开发的同学,尤其是做管理后台的同学绝大多数都会接触到报表系统,这时候就少不了Excel的导入和导出了.Java解析生成Excel比较有名 ...

  8. springboot使用jxls导出excel___(万能通用模板)--- SpringBoot导入、导出Excel文件___SpringBoot整合EasyExcel模板导出Excel

    springboot使用jxls导出excel 实现思路: 首先在springBoot(或者SpringCloud)项目的默认templates目录放入提前定义好的Excel模板,然后在具体的导出接口 ...

  9. EasyExcel项目使用

     2.0.5版本做了很大改变,记录2.1.6的所使用的工具类及方法 其实持续对easyexcel的git进行关注是最方便的,上面也有完整的demo以及工具类等等 1.easyExcel的pom坐标 & ...

  10. EasyExcel简单使用

    本文使用的技术是Alibaba集团开源的EasyExcel技术,该技术是针对Apache POI技术的封装和优化,主要解决了POI技术的耗内存问题,并且提供了较好的API使用.不需要大量的代码就可以实 ...

最新文章

  1. 算法实现太难了?机器学习也需要开源软件
  2. 浅谈电子政务门户建设选型经验
  3. 支架预压弹性变形值计算_桥梁支架的预压方法与流程
  4. 2018年JavaWeb和移动程序员学习的12个框架
  5. 用服务器控件在后台调用前台客户端JS方法
  6. AWS上的应用程序自动扩展–选项及其对性能的影响
  7. Python3爬虫入门之pyquery库的使用
  8. 安装GIT,集成到Powershell中
  9. 57. Attribute specified 属性
  10. Java基础 - 游戏项目 - 坦克大战(第一章,入门机制分析与学习规划)
  11. E-BOM和M-BOM的区别
  12. csharp基础练习题:过滤列表【难度:1级】--景越C#经典编程题库,不同难度C#练习题,适合自学C#的新手进阶训练
  13. 公网远程开机(唤醒家庭PC)
  14. Android 读取bin文件方法
  15. oracle 取月份的第一天
  16. 英国AI医疗保健初创企业snap40获800万美元融资
  17. EPI晶片的表面微观粗糙度对湿化学处理的依赖性
  18. SharpDevelop 简介
  19. Selenium QQ自动化登录
  20. [洛谷]P1535 游荡的奶牛 (#搜索 -2.7)

热门文章

  1. ROS的激光雷达、 加速度计、 陀螺仪传感器
  2. 领你走进10位管理大师的思想境界
  3. 身份证号判断男女和生日
  4. 【win10】设置电脑固定IP,解除固定IP
  5. 预演:使用 TensorFlow 进行深度学习
  6. discards qualifiers —— 丢弃类型
  7. MYSQL部分面试题型
  8. php中英文逗号分号转换等
  9. causal snps | causal variants | tensorflow | 神经网络实战 | Data Simulation
  10. speedoffice表格怎么插入文本框?