本篇文章主要介绍一下使用阿里开源的Easyexcel工具处理读取excel文件,因为之前自己想在网上找一下这个简单的立即上手的博客,发现很多文章的教程都针对比较旧的版本的Easyexcel,没有使用新版本的方法,导致很多方法都标志过期了或者运行时报错,所以本篇博客主要是使用最新版的Easyexcel去读取excel文件,顺便说一下目前新版本的特性。

优化

  1. 目前读取excel文件不再需要指定ExcelTypeEnum,即excel的版本,会自动处理
  2. 之前创建ExcelReader都是自己new,现在是通过EasyExcelFactory创建,更加简单和具备通用性。
  3. 之前每解析一行的回调的invoke()方法,通用对象Object是list集合,目前是HashMap集合。

简单使用读取Excel,返回List集合

  1. 通过maven引入依赖
        <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.0.5</version></dependency>
  1. 新建通用监听类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;}}
  1. 创建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类的

参考:

  1. https://blog.csdn.net/alinyua/article/details/82859577
  2. https://github.com/alibaba/easyexcel/blob/master/quickstart.md

阿里的Easyexcel读取Excel文件(最新版本)相关推荐

  1. XSSFWorkbook,SXSSFWorkbook以及EasyExcel读取Excel文件的比较

    同时读取30w数据,比较运行时间及CPU.内存占比 1.EasyExcel package com.apesource;import java.util.ArrayList; import java. ...

  2. 读取Excel文件的版本

    读取xls文件和xlsx文件创建的版本号. 虽然xlsx声明的是向前兼容,但是不知道OleDb是不是也是这样,没有办法所以要读取文件版本,限定只能读取Excel2007保存的文件. 1 using I ...

  3. 阿里云EasyExcel读写excel表数据

    阿里云EasyExcel读取excel表数据 1.待读取的excel表test.xls 2.导入Maven依赖 <dependency><groupId>com.alibaba ...

  4. 解决easyExcel读取EXCEL用String去接收数字,出现小数点BUG

    起因 目前项目中需要使用easyExcel 读取Excel文件,因为后端使用mongodb存储格式,数据格式不确定.因此读取文件时,未传递.class对象(指用方法一调用),使用String 接收Nu ...

  5. Java 使用EasyExcel读取Excel中多个sheet方法及示例代码

    本文主要介绍Java中,使用EasyExcel读取Excel文件中多个Sheet的方法,以及使用示例代码. 1.读取数据的实体对象 @Data public class DemoData {priva ...

  6. 阿里EasyExcel读写excel文件的基本使用

    EasyExcel读写excel文件 1.EasyExcel简介 2.对excel的写操作 1.1 创建一个普通的maven项目并引入相关依赖 1.2 创建实体类 1.3 实现写操作 1.3.1 创建 ...

  7. EasyExcel轻松读取Excel文件!

    EasyExcel是一个Java库,用于快速.简单地读写Excel文件.要使用EasyExcel,您首先需要将其添加为项目的依赖: 如果使用Maven,可以添加以下依赖项: <dependenc ...

  8. pandas无法创建excel文件或者无法读取excel文件

    使用pandas,创建excel文件刚开始报错如下: Traceback (most recent call last):File "d:/sources/pythons/pandas/te ...

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

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

最新文章

  1. SAP 用户参数 ME_USE_GRID
  2. IDEA 2022.2.1 Beta 2发布:新增支持Java 18、增强JUnit 5的支持
  3. VC2010编译boost
  4. Linux shell脚本编程(一)
  5. 航旅事业群面试(li)
  6. 尚硅谷_MySQL常见命令介绍
  7. 耍了一下 UncaughtErrorEvents
  8. 使用HTMLParser模块解析HTML页面
  9. PointConv论文阅读笔记
  10. 演练:调试 Windows 窗体
  11. 前端大牛or架构师应该具备这些
  12. [导入]如何点击按钮弹出新窗口,输入数据后返回并刷新页面?(老孟)
  13. 动态修改服务器配置文件,asp.net(c#)动态修改webservice的地址和端口(动态修改配置文件)...
  14. 算法上均匀分布的随机抽奖,如何避免现实的现场抽奖的中奖号码有时出现集中扎堆的现象?
  15. 11gR2数据库RMAN完全恢复数据库
  16. 动态正则化权重系数_PARALLEL LADDER ALGORITHMS BASED ON A PRIORI ERRORS OF PREDICTION AND SIMULATION...
  17. color-thief-php提取图片色值分布及百分占比
  18. seaborn中sns.distplot图例显示方法及无法显示的解决办法
  19. 【EMC基础篇①】噪声是什么?EMC是什么?噪声损害是电子社会的现代病
  20. Protege,SWRL和JESS的原理

热门文章

  1. 根据数据库表字段动态生成选择画面[FREE_SELECTIONS_DIALOG]
  2. 动态选择屏幕(FREE_SELECTIONS_INIT)
  3. 【有利可图网】配色攻略-黑色篇
  4. pycharm调试模式
  5. Oracle数据库常见问题及解决办法
  6. Markdown - Emoji表情大全
  7. 网页不显示验证码的原因与处理方法
  8. 诺基亚结盟微软走上ARM星光大道
  9. 深度数据 点云数据 激光数据
  10. dump analyze