使用EasyExcel导入导出Excel

使用EasyExcel导入导出Excel

1、官方网站

https://github.com/alibaba/easyexcel

快速开始:https://www.yuque.com/easyexcel/doc/easyexcel

使用场景

在日常开发中 我们难免需要导入数据 可以用EasyExcel来解决

2、EasyExcel特点

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

3、动起手来

创建一个普通maven项目 加入依赖

<dependencies>

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

    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-simple</artifactId>
        <version>1.7.5</version>
    </dependency>

    <dependency>
        <groupId>org.apache.xmlbeans</groupId>
        <artifactId>xmlbeans</artifactId>
        <version>3.1.0</version>
    </dependency>

    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.12</version>
    </dependency>

    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12
### 使用EasyExcel实现Excel文件的导入和导出 #### EasyExcel简介 EasyExcel 是一个基于 Java 的简单、省内存的读写 Excel 的开源项目。该工具能够在尽可能节约内存的情况下处理大容量的 Excel 文件,支持读取和写入数百兆大小的数据[^2]。 #### 实现Excel文件的导出功能 为了使用 EasyExcel 导出数据到 Excel 文件,可以创建一个新的工作簿并定义要保存的内容结构: ```java import com.alibaba.excel.EasyExcel; import java.util.ArrayList; import java.util.List; public class ExportExample { public static void main(String[] args) { String fileName = "example.xlsx"; List<UserData> data = new ArrayList<>(); // 填充data列表 EasyExcel.write(fileName, UserData.class).sheet("Sheet1").doWrite(data); } } ``` `UserData` 类应包含与表格列对应的字段以及相应的 getter 和 setter 方法。 #### 实现Excel文件的导入功能 对于导入操作,则需指定解析规则并通过监听器来接收每一行的数据对象实例化后的回调通知。这里展示了如何设置带有 Spring 注入能力的自定义监听器类 `UserImportListener` 来完成这一过程: ```java import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.event.AnalysisEventListener; import org.springframework.beans.factory.annotation.Autowired; import javax.annotation.PostConstruct; // 自定义监听器用于处理每条记录 public class UserImportListener extends AnalysisEventListener<UserData> { @Autowired private UserService userService; // 这里假设有一个服务层接口 @PostConstruct public void init() {} @Override protected void invoke(UserData userData, AnalysisContext context) { // 对于每一个读取出来的对象执行业务逻辑 userService.save(userData); } @Override public void doAfterAllAnalysed(AnalysisContext context) { System.out.println("所有数据解析完成!"); } } // 调用此方法启动导入流程 public void importExcel(MultipartFile file){ try{ EasyExcel.read(file.getInputStream(), UserData.class, new UserImportListener()).sheet().doRead(); }catch (Exception e){ throw new RuntimeException(e.getMessage()); } } ``` 上述代码片段中,通过将 `UserService` 组件自动装配至监听器内实现了依赖注入的功能,从而可以在每次接收到新行时调用其提供的持久化方法[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值