EasyExcel简介与使用

EasyExcel是阿里巴巴开源的高效Excel处理框架,适用于高并发场景,避免内存溢出。本文介绍其核心特性,包括按行读写模式和观察者通知机制,以及在数据导入导出、统计归档和异构系统数据传输的应用场景。通过示例代码演示如何在Java项目中快速集成并使用EasyExcel。
部署运行你感兴趣的模型镜像

EasyExcel特点

  • Java领域解析、生成Excel比较有名的框架有Apache poi、jxl等。但他们都存在一个严重的问题就是非常的耗内存。如果你的系统并发量不大的话可能还行,但是一旦并发上来后一定会OOM或者JVM频繁的full gc。
  • EasyExcel是阿里巴巴开源的一个excel处理框架,以使用简单、节省内存著称。EasyExcel能大大减少占用内存的主要原因是在解析Excel时没有将文件数据一次性全部加载到内存中,而是从磁盘上一行行读取数据,逐个解析。
  • EasyExcel采用一行一行的解析模式,并将一行的解析结果以观察者的模式通知处理(AnalysisEventListener)。

Excel导入导出的应用场景

1、数据导入:减轻录入工作量

2、数据导出:统计信息归档

3、数据传输:异构系统之间数据传输

 

使用EasyExcel

1.引入依赖

<dependencies>
    <!-- https://mvnrepository.com/artifact/com.alibaba/easyexcel -->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>easyexcel</artifactId>
        <version>2.1.1</version>
    </dependency>
</dependencies>

2.创建实体类(@ExcelProperty也可以用index进行索要设置表头

//设置表头和添加的数据字段
@Data
public class DemoData {
    //设置表头名称
    @ExcelProperty("学生编号")
    private int sno;
    
	//设置表头名称
    @ExcelProperty("学生姓名")
    private String sname;
}

写方法:

(1)创建方法循环设置要添加到Excel的数据

//循环设置要添加的数据,最终封装到list集合中
private static List<DemoData> data() {
    List<DemoData> list = new ArrayList<DemoData>();
    for (int i = 0; i < 10; i++) {
        DemoData data = new DemoData();
        data.setSno(i);
        data.setSname("张三"+i);
        list.add(data);
    }
    return list;
}

(2)实现最终的添加操作

public static void main(String[] args) throws Exception {
    // 写法1
    String fileName = "F:\\11.xlsx";
    // 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭
    // 如果这里想使用03 则 传入excelType参数即可
    EasyExcel.write(fileName, DemoData.class).sheet("第一个sheet").doWrite(data());
}

读方法:

1、创建读取操作的监听器

import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.alibaba.excel.exception.ExcelDataConvertException;
import com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

//创建读取excel监听器
public class ExcelListener extends AnalysisEventListener<ReadData> {

    //创建list集合封装最终的数据
    List<ReadData> list = new ArrayList<ReadData>();

    //一行一行去读取excle内容
    @Override
    public void invoke(ReadData user, AnalysisContext analysisContext) {
       System.out.println("***"+user);
        list.add(user);
    }

    //读取excel表头信息
    @Override
    public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {
        System.out.println("表头信息:"+headMap);
    }

    //读取完成后执行
    @Override
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
    }
}

2、调用实现最终的读取

 public static void main(String[] args) throws Exception {

        // 写法1:
        String fileName = "F:\\01.xlsx";
        // 这里 需要指定读用哪个class去读,然后读取第一个sheet 文件流会自动关闭
        EasyExcel.read(fileName, ReadData.class, new ExcelListener()).sheet().doRead();
}

注:如果使用spring项目,由于SubjectExcelListener不能交给spring进行管理,需要自己new,不能自动注入其他对象

在监听器上,创建有参数构造,传递service用于操作数据库

调用方法:

 public void saveSubject(MultipartFile file, EduSubjectService subjectService) {
        try {
            //文件输入流
            InputStream in = file.getInputStream();
            //调用方法进行读取
            EasyExcel.read(in, SubjectData.class, new SubjectExcelListener(subjectService)).sheet().doRead();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

 

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

<think>好的,我现在需要回答用户关于使用EasyExcel的问题。首先,我得回忆一下EasyExcel的基本信息和常见用途。EasyExcel是阿里巴巴开源的一个Java库,用于简化Excel文件的读写操作。相比Apache POI,它更节省内存,适合处理大文件。用户可能需要知道如何快速开始使用它,或者解决常见问题。 首先,我应该介绍EasyExcel的核心优势,比如内存优化、模型映射和监听器机制。然后,给出具体的代码示例,比如如何读写Excel。读写示例需要包括依赖添加、创建模型类、实现读写逻辑。例如,写文件需要创建数据对象列表,使用EasyExcel.write方法;读文件则需要定义监听器,并调用read方法。 接下来,要解释为什么使用EasyExcel,可能涉及传统POI的对比,比如POI的内存溢出问题,以及EasyExcel的逐行处理方式如何减少内存占用。此外,提到事件驱动模型和注解支持的好处,比如简化代码,提高可维护性。 然后,考虑用户可能遇到的问题,比如如何处理复杂格式,或者如何自定义转换器。但根据用户的问题,可能更关注基础使用,所以先提供基础示例和解释。 最后,按照要求,提出相关问题,这些问题应该围绕EasyExcel的特性、使用场景、传统工具的区别,以及常见问题处理。例如,如何处理大数据量、注解的作用、监听器的用途,以及样式自定义方法。 现在,检查是否有遗漏点,比如Maven依赖的配置是否正确,是否需要提醒用户注意版本兼容性。另外,确保代码示例正确,比如模型类使用了正确的注解,读写方法参数正确。例如,写示例中的文件路径是否正确,读示例中的监听器是否实现了适当的方法。 总结,回答应包括简介、优势、代码示例、解释,然后相关问题。需要确保信息准确,结构清晰,符合用户要求的格式。</think><< 使用EasyExcel进行Excel读写操作的实现方法及原因分析: 1. 核心优势: - 内存优化:采用逐行解析模式,在处理大型Excel文件时内存占用可控制在百KB级别 - 简单API:通过注解驱动方式简化开发,支持复杂对象映射 - 扩展性强:提供监听器机制支持自定义处理逻辑 2. 写Excel示例: // 添加Maven依赖 // <dependency> // <groupId>com.alibaba</groupId> // <artifactId>easyexcel</artifactId> // <version>3.3.2</version> // </dependency> // 定义数据模型 @Data public class UserData { @Ex
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值