阿里的Easyexcel读取Excel文件(最新版本)

news/2024/10/24 4:42:11/

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

优化

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

debug查看实际注入的值

简单使用读取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

http://www.ppmy.cn/news/747653.html

相关文章

Delphi 操作Excel方法大全

Delphi操作Excel大全 原文地址&#xff1a;http://blog.csdn.net/lailai186/article/details/6664110 Delphi 控制Excel (一) 使用动态创建的方法 首先创建 Excel 对象&#xff0c;使用ComObj: var ExcelApp: Variant; ExcelApp : CreateOleObject( ‘Excel.Application’ ); …

Excel(Office)哪一版最好用?

目录 一、Excel哪版最好用 二、Excel基本使用手册 1.如何知道自己的Office版本 2.ctrlS是保存&#xff0c;另存为的快捷键是什么&#xff1f; 3.如何一打开就是自己常用的字体的和字号&#xff0c;不用每次都设置 4.右上角只能有【保存】【撤销】【重做】三个按钮吗&#xff1f…

计算机excel还原,Excel文件恢复方法

" 假如你不小心将Excel文件删除了&#xff0c;那这个时候你会采取哪些办法来找回被误删的Excel文件呢&#xff1f;下面我们就来说说这个问题。 一、电脑端操作 1、回收站 第一种找回Excel文件的方法是使用电脑上的回收站功能&#xff0c;只要我们打开回收站&#xff0c;运…

Linux-vim与gdb与make/makefile

三个模式&#xff1a;命令模式 文本模式 底行模式 yum :instell 安装 remove 卸载 gcc -o执行后生成文件命名 gcc 1.c -o fst.out -E预编译 -S汇编 -c生成机器码 Linux 中 静态库&#xff1a;.a&#xff1b;动态库&#xff1a;.so Linux默认动态库&#xff0c;…

excel power Query

一、power query Power query是微软从Excel 到 PowerBI 的中间产物&#xff0c;它既是PowerBi取数部分的内核&#xff0c;又能够在Excel中使用。 在excel中使用Power query处理数据的能力要高出用excel本身处理数据的性能数倍。power query的操作方法不仅有图形化界面&#xff…

Mac版本EXCEL导入数据 (Excel真香)

跟爬虫相爱相杀了那么久&#xff0c;突然发现Excel居然还有直接导入网站数据的功能&#xff0c;针对一些小的网页爬取请求&#xff0c;Excel的输出格式简明&#xff0c;方法简单&#xff0c;是真的香啊&#xff01;&#xff01; 但是mac版本中有些Excel的功能并不完全&#xff…

excel 365 版本安装 Solver

备注 看到了《深入浅出数据分析》&#xff0c;遇到了需要安装 Solver 的问题&#xff0c;所以顺便记录一下。 Solver 在中文版的 excel 中对应的是规划求解功能 参考文章&#xff1a;https://www.jianshu.com/p/7dadd1e33f18 本文使用的是 office 365 版本&#xff0c;由于原文…

python操作Excel

前言&#xff1a; Python操作Excel需要三方库的支持&#xff0c;如果要兼容Excel 2007以前的版本&#xff0c;也就是xls格式的Excel文件&#xff0c;可以使用三方库xlrd和xlwt&#xff0c;前者用于读Excel文件&#xff0c;后者用于写Excel文件。如果使用较新版本的Excel&#…