java使用easyexcel读取数据

EasyExcel是阿里巴巴的一个开源框架,以简洁的使用方式和节省内存而知名。它通过逐行读取和解析Excel文件来减少内存占用。用户可以自定义监听器,如继承AnalysisEventListener,来处理读取的数据。在给定的示例中,展示了如何使用EasyExcel读取Excel文件并存储到List<Map<Integer,String>>中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、前言
1.EasyExcel是阿里巴巴开源的一个excel处理框架, 以使用简单、节省内存著称。 EasyExcel能大大减少占用内存的主要原因是在解析Excel时没有将文件数据一次性全部加载到内存中,而是从磁盘上一行行读取数据,逐个解析。

2.EasyExcel采用一行一行的解析模式,并将一行的解析结果以观察者模式通知处理(AnalysisEventListener)

二、如何使用EasyExcel读取文件数据
1.首先需要添加easyexcel的相关依赖包

 <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
            <version>3.1.0</version>
        </dependency>

2.使用EasyExcel进行读操作,读的时候要ExcelListener监听器。
首先定义一个类,继承AnalysisEventListener。

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;

public class ExcelListener extends AnalysisEventListener<Map<Integer,String>>{
	
	private List<Map<Integer,String>> excelList =new ArrayList<Map<Integer,String>>();
	private Map<Integer,String> headMap = new HashMap<Integer, String>();
	@Override
	public void invoke(Map<Integer, String> data, AnalysisContext context) {
		excelList.add(data);
		
	}
	@Override
	public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {
		this.headMap=headMap;
	}
	@Override
	public void doAfterAllAnalysed(AnalysisContext context) {
		System.out.println("已解析");
		
	}
	public List<Map<Integer,String>> getExcelList(){
		return excelList;
	}
}

这里用的是Map<Integer, String> 来接收每一行的数据,当然也可以自己定义一些对象。

3.使用EasyExcel.read()方法读取数据,代码如下:


import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelReader;
import com.alibaba.excel.read.metadata.ReadSheet;


public class ExcelUtils {
	
	public static List<Map<Integer,String>> readExcel(InputStream inputStream){
		//该监听器一行行将文件读取到内存
		ExcelListener excelListener =new ExcelListener();
		 ExcelReader excelReader = null;
	        try {
		        //把前端传来的文件转成输入流
	            
	            // 初始化对象
	            excelReader = EasyExcel.read(inputStream, excelListener).build();
	            // 指定读取哪一个sheet
	            ReadSheet readSheet = EasyExcel.readSheet(0).build();
	            // 开始读取
	            excelReader.read(readSheet);
	            List<Map<Integer,String>> excelList = excelListener.getExcelList();
	            return excelList;
	        } catch (Exception e) {
	            throw new RuntimeException("文件错误");
	            
	        } finally {
	            if (excelReader != null) {
	                // 这里千万别忘记关闭,读的时候会创建临时文件,到时磁盘会崩的
	                excelReader.finish();
	            }
	            
	        }
	}
	public static void main(String[] args) throws FileNotFoundException {
		InputStream in =new FileInputStream(new File("F://任务配置参数(3).xlsx"));
		List<Map<Integer,String>> list = readExcel(in);
	    list.stream().forEach(x->System.err.println(x));
	}
}

运行main方法,结果如下:
在这里插入图片描述
总结,我们可以根据自己的需要选择实现ExcelListener接口、使用回调函数或继承AnalysisEventListener类来处理读取Excel文件中的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜空下的星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值