Alibaba之EasyExcel使用
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使用相关推荐
- 使用alibaba的easyexcel填充复杂模板,导出Excel,返回文件流
做个记录,试了很多方法都不行(本来想使用对象单独写一个table,但是没找到属性),又不想更换依赖,后面才看到的模板填充,能用............ //依赖 <dependency>& ...
- Alibaba开源工具EasyExcel读写Excel文件
前言 工作中使用 excel 表格处理数据是很常见的操作,经常会使用 excel 文件来导入数据或者导出数据,是不是脑海中已经思考有哪些处理excel框架? 小编之前呢就知道Java 解析.生成 Ex ...
- Apache POI与Alibaba EasyExcel 的使用
Apache POI 与 Alibaba EasyExcel 的使用 Apache POI <dependencies><!-- xls(03) --><dependen ...
- easyexcel导入时读不到数据_EasyExcel简单使用--导入excel数据
读Excel 1.依赖包 com.alibaba easyexcel 2.0.5 2.代码import java.io.File; import com.alibaba.excel.EasyExcel ...
- 在springboot中使用easyexcel导出数据excel表格
第一步: 在pom.xml中添加easyexcel依赖 之前测试一些低版本会出现一些问题,所以在这里使用了2.1.6的版本. <dependency><groupId>com. ...
- JAVA连接Excel最好用的开源项目EasyExcel,官方使用文档及.jar包下载
EasyExcel是一个基于Java的简单.省内存的读写Excel的开源项目.在尽可能节约内存的情况下支持读写百M的Excel. github地址:https://github.com/alibaba ...
- java导入导出excel_Java导入导出Excel工具 easyexcel
Java导入导出Excel工具 easyexcel 做Java开发的同学,尤其是做管理后台的同学绝大多数都会接触到报表系统,这时候就少不了Excel的导入和导出了.Java解析生成Excel比较有名 ...
- springboot使用jxls导出excel___(万能通用模板)--- SpringBoot导入、导出Excel文件___SpringBoot整合EasyExcel模板导出Excel
springboot使用jxls导出excel 实现思路: 首先在springBoot(或者SpringCloud)项目的默认templates目录放入提前定义好的Excel模板,然后在具体的导出接口 ...
- EasyExcel项目使用
2.0.5版本做了很大改变,记录2.1.6的所使用的工具类及方法 其实持续对easyexcel的git进行关注是最方便的,上面也有完整的demo以及工具类等等 1.easyExcel的pom坐标 & ...
- EasyExcel简单使用
本文使用的技术是Alibaba集团开源的EasyExcel技术,该技术是针对Apache POI技术的封装和优化,主要解决了POI技术的耗内存问题,并且提供了较好的API使用.不需要大量的代码就可以实 ...
最新文章
- 算法实现太难了?机器学习也需要开源软件
- 浅谈电子政务门户建设选型经验
- 支架预压弹性变形值计算_桥梁支架的预压方法与流程
- 2018年JavaWeb和移动程序员学习的12个框架
- 用服务器控件在后台调用前台客户端JS方法
- AWS上的应用程序自动扩展–选项及其对性能的影响
- Python3爬虫入门之pyquery库的使用
- 安装GIT,集成到Powershell中
- 57. Attribute specified 属性
- Java基础 - 游戏项目 - 坦克大战(第一章,入门机制分析与学习规划)
- E-BOM和M-BOM的区别
- csharp基础练习题:过滤列表【难度:1级】--景越C#经典编程题库,不同难度C#练习题,适合自学C#的新手进阶训练
- 公网远程开机(唤醒家庭PC)
- Android 读取bin文件方法
- oracle 取月份的第一天
- 英国AI医疗保健初创企业snap40获800万美元融资
- EPI晶片的表面微观粗糙度对湿化学处理的依赖性
- SharpDevelop 简介
- Selenium QQ自动化登录
- [洛谷]P1535 游荡的奶牛 (#搜索 -2.7)