java使用easyexcel读取数据

一、前言
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文件中的。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
很高兴为您解答这个问题!关于 Java 实现 easyexcel 读取数据导入数据库的例子,我可以提供一些参考: 1. 您可以先在项目中引入 easyexcel 的相关依赖,例如: <!-- 引入 easyexcel --> <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>2.2.10</version> </dependency> 2. 创建一个实体类来存储 Excel 中的数据,例如: @Data public class ExcelData { @ExcelProperty(index = 0) private String name; @ExcelProperty(index = 1) private Integer age; @ExcelProperty(index = 2) private String gender; // 省略 getter 和 setter 方法 } 3. 在代码中使用 easyexcel 进行读取 Excel 数据,例如: public void readExcelData() throws IOException { InputStream inputStream = new FileInputStream("data.xlsx"); EasyExcel.read(inputStream, ExcelData.class, new ExcelDataListener()).sheet().doRead(); } 4. 实现一个监听器来处理读取到的数据,例如: public class ExcelDataListener extends AnalysisEventListener<ExcelData> { @Override public void invoke(ExcelData data, AnalysisContext context) { // 处理读取到的数据,可以写入数据库等操作 } @Override public void doAfterAllAnalysed(AnalysisContext context) { // 读取完成后的操作 } } 5. 在 invoke 方法中可以将读取到的数据写入数据库等操作,例如: @Override public void invoke(ExcelData data, AnalysisContext context) { // 将读取到的数据写入数据库 jdbcTemplate.update("INSERT INTO user (name, age, gender) VALUES (?, ?, ?)", data.getName(), data.getAge(), data.getGender()); } 希望以上内容能够对您有所帮助!如果您还有其他问题,欢迎提出。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

夜空下的星

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

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

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

打赏作者

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

抵扣说明:

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

余额充值