阿里的Easyexcel读取Excel文件(最新版本)
本篇文章主要介绍一下使用阿里开源的Easyexcel工具处理读取excel文件,因为之前自己想在网上找一下这个简单的立即上手的博客,发现很多文章的教程都针对比较旧的版本的Easyexcel,没有使用新版本的方法,导致很多方法都标志过期了或者运行时报错,所以本篇博客主要是使用最新版的Easyexcel去读取excel文件,顺便说一下目前新版本的特性。
优化
- 目前读取excel文件不再需要指定
ExcelTypeEnum
,即excel的版本,会自动处理 - 之前创建
ExcelReader
都是自己new,现在是通过EasyExcelFactory
创建,更加简单和具备通用性。 - 之前每解析一行的回调的
invoke()
方法,通用对象Object是list
集合,目前是HashMap
集合。
简单使用读取Excel,返回List集合
- 通过maven引入依赖
<dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.0.5</version></dependency>
- 新建通用监听类
StringExcelListener
/*** StringList 解析监听器** @author zhangcanlong* @since 2019-10-21*/private static class StringExcelListener extends AnalysisEventListener {/*** 自定义用于暂时存储data* 可以通过实例获取该值*/private List<List<String>> datas = new ArrayList<>();/*** 每解析一行都会回调invoke()方法** @param object 读取后的数据对象* @param context 内容*/@Overridepublic void invoke(Object object, AnalysisContext context) {@SuppressWarnings("unchecked") Map<String, String> stringMap = (HashMap<String, String>) object;//数据存储到list,供批量处理,或后续自己业务逻辑处理。datas.add(new ArrayList<>(stringMap.values()));//根据自己业务做处理}@Overridepublic void doAfterAllAnalysed(AnalysisContext context) {//解析结束销毁不用的资源//注意不要调用datas.clear(),否则getDatas为null}/*** 返回数据** @return 返回读取的数据集合**/public List<List<String>> getDatas() {return datas;}/*** 设置读取的数据集合** @param datas 设置读取的数据集合**/public void setDatas(List<List<String>> datas) {this.datas = datas;}}
- 创建
ExcelReader
读取,并从监听类中获取读取的数据
/*** 根据excel输入流,读取excel文件** @param inputStream exece表格的输入流* @return 返回双重list的集合**/public List<List<String>> writeWithoutHead(InputStream inputStream) {StringExcelListener listener = new StringExcelListener();ExcelReader excelReader = EasyExcelFactory.read(inputStream, null, listener).headRowNumber(0).build();excelReader.read();List<List<String>> datas = listener.getDatas();excelReader.finish();return datas;}
完整的Excel简单读取类和测试
测试类:
import com.hiido.services.common.ExcelOptionsService;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.List;/*** excel操作的测试类** @author zhangcanlong* @since 2019/10/20 21:12**/
@RunWith(SpringRunner.class)
@SpringBootTest
public class ExcelOptionsServiceTest {@Autowiredprivate ExcelOptionsService excelOptionsService;/*** 测试读取excel**/@Testpublic void testReadExcel() {// 这里的excel文件可以 为xls或xlsx结尾File file = new File("C:\\Users\\Administrator\\Desktop\\测试.xls");List<List<String>> result = new ArrayList<>();try {result = excelOptionsService.writeWithoutHead(new FileInputStream(file));} catch (FileNotFoundException e) {e.printStackTrace();}Assert.assertNotNull(result);System.out.println("读取结果:" + result);}
}
读取类
import com.alibaba.excel.EasyExcelFactory;
import com.alibaba.excel.ExcelReader;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import org.springframework.stereotype.Service;import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;/*** excel文件的操作service** @author zhangcanlong* @since 2019/10/20 21:01**/
@Service
public class ExcelOptionsService {/*** 根据excel输入流,读取excel文件** @param inputStream exece表格的输入流* @return 返回双重list的集合**/public List<List<String>> writeWithoutHead(InputStream inputStream) {StringExcelListener listener = new StringExcelListener();ExcelReader excelReader = EasyExcelFactory.read(inputStream, null, listener).headRowNumber(0).build();excelReader.read();List<List<String>> datas = listener.getDatas();excelReader.finish();return datas;}/*** StringList 解析监听器** @author zhangcanlong* @since 2019-10-21*/private static class StringExcelListener extends AnalysisEventListener {/*** 自定义用于暂时存储data* 可以通过实例获取该值*/private List<List<String>> datas = new ArrayList<>();/*** 每解析一行都会回调invoke()方法** @param object 读取后的数据对象* @param context 内容*/@Overridepublic void invoke(Object object, AnalysisContext context) {@SuppressWarnings("unchecked") Map<String, String> stringMap = (HashMap<String, String>) object;// 这里可以获取excel的基本信息,包含excel的总行数System.out.println("不一定十分准确的总行数:"+context.getTotalCount());//数据存储到list,供批量处理,或后续自己业务逻辑处理。datas.add(new ArrayList<>(stringMap.values()));//根据自己业务做处理}@Overridepublic void doAfterAllAnalysed(AnalysisContext context) {//解析结束销毁不用的资源//注意不要调用datas.clear(),否则getDatas为null}/*** 返回数据** @return 返回读取的数据集合**/public List<List<String>> getDatas() {return datas;}/*** 设置读取的数据集合** @param datas 设置读取的数据集合**/public void setDatas(List<List<String>> datas) {this.datas = datas;}}
}
注意
如果在正式项目中使用的,要修改一些东西的,我这个只是demo,我为了方便把StringExcelListener 放到内部类了,应该把这个类抽出来作为单独一个service类的
参考:
- https://blog.csdn.net/alinyua/article/details/82859577
- https://github.com/alibaba/easyexcel/blob/master/quickstart.md
阿里的Easyexcel读取Excel文件(最新版本)相关推荐
- XSSFWorkbook,SXSSFWorkbook以及EasyExcel读取Excel文件的比较
同时读取30w数据,比较运行时间及CPU.内存占比 1.EasyExcel package com.apesource;import java.util.ArrayList; import java. ...
- 读取Excel文件的版本
读取xls文件和xlsx文件创建的版本号. 虽然xlsx声明的是向前兼容,但是不知道OleDb是不是也是这样,没有办法所以要读取文件版本,限定只能读取Excel2007保存的文件. 1 using I ...
- 阿里云EasyExcel读写excel表数据
阿里云EasyExcel读取excel表数据 1.待读取的excel表test.xls 2.导入Maven依赖 <dependency><groupId>com.alibaba ...
- 解决easyExcel读取EXCEL用String去接收数字,出现小数点BUG
起因 目前项目中需要使用easyExcel 读取Excel文件,因为后端使用mongodb存储格式,数据格式不确定.因此读取文件时,未传递.class对象(指用方法一调用),使用String 接收Nu ...
- Java 使用EasyExcel读取Excel中多个sheet方法及示例代码
本文主要介绍Java中,使用EasyExcel读取Excel文件中多个Sheet的方法,以及使用示例代码. 1.读取数据的实体对象 @Data public class DemoData {priva ...
- 阿里EasyExcel读写excel文件的基本使用
EasyExcel读写excel文件 1.EasyExcel简介 2.对excel的写操作 1.1 创建一个普通的maven项目并引入相关依赖 1.2 创建实体类 1.3 实现写操作 1.3.1 创建 ...
- EasyExcel轻松读取Excel文件!
EasyExcel是一个Java库,用于快速.简单地读写Excel文件.要使用EasyExcel,您首先需要将其添加为项目的依赖: 如果使用Maven,可以添加以下依赖项: <dependenc ...
- pandas无法创建excel文件或者无法读取excel文件
使用pandas,创建excel文件刚开始报错如下: Traceback (most recent call last):File "d:/sources/pythons/pandas/te ...
- Alibaba开源工具EasyExcel读写Excel文件
前言 工作中使用 excel 表格处理数据是很常见的操作,经常会使用 excel 文件来导入数据或者导出数据,是不是脑海中已经思考有哪些处理excel框架? 小编之前呢就知道Java 解析.生成 Ex ...
最新文章
- SAP 用户参数 ME_USE_GRID
- IDEA 2022.2.1 Beta 2发布:新增支持Java 18、增强JUnit 5的支持
- VC2010编译boost
- Linux shell脚本编程(一)
- 航旅事业群面试(li)
- 尚硅谷_MySQL常见命令介绍
- 耍了一下 UncaughtErrorEvents
- 使用HTMLParser模块解析HTML页面
- PointConv论文阅读笔记
- 演练:调试 Windows 窗体
- 前端大牛or架构师应该具备这些
- [导入]如何点击按钮弹出新窗口,输入数据后返回并刷新页面?(老孟)
- 动态修改服务器配置文件,asp.net(c#)动态修改webservice的地址和端口(动态修改配置文件)...
- 算法上均匀分布的随机抽奖,如何避免现实的现场抽奖的中奖号码有时出现集中扎堆的现象?
- 11gR2数据库RMAN完全恢复数据库
- 动态正则化权重系数_PARALLEL LADDER ALGORITHMS BASED ON A PRIORI ERRORS OF PREDICTION AND SIMULATION...
- color-thief-php提取图片色值分布及百分占比
- seaborn中sns.distplot图例显示方法及无法显示的解决办法
- 【EMC基础篇①】噪声是什么?EMC是什么?噪声损害是电子社会的现代病
- Protege,SWRL和JESS的原理