超方便.使用EasyExcel导入excel

简介: 超方便.使用EasyExcel导入excel

背景


说到导出Excel文档,我们一般会想到很多放方式,比如简单的EasyPoi,采用注解的方式,直接导出,使用template模板方式,然后将数据写入模板,将数据转换成Map或是List集合写入Excel。


EasyExcel是一个基于Java的简单、省内存的读写Excel的开源项目。在尽可能节约内存的情况下支持读写百M的Excel。


github地址:https://github.com/alibaba/easyexcel


使用demo


导入依赖

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>3.0.5</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>4.1.2</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>4.1.2</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml-schemas</artifactId>
    <version>4.1.2</version>
</dependency>

demo入口

public class TestExecel {
    public static void main(String[] args) {
      //文件绝对路径
      String name = "/Users/test/src/mytest/test.xlsx";
      //read方法可以传递文件名也可以传递File
      EasyExcel.read(name, UserTest.class, new CustomerExcelDataListener())
                .sheet()
                .headRowNumber(1)
                .doRead();
    }
}

模版类

@Data
public class UserTest {
    /**
     * 用户姓名
     */
    @ExcelProperty(value = "用户姓名", index = 0)
    private String name;
    /**
     * 用户手机号
     */
    @ExcelProperty("用户手机号")
    private String phone;
    /**
     * 用户年龄
     */
    @ExcelProperty("用户年龄")
    private Integer age;
}

自定义监听处理类

public class CustomerExcelDataListener implements ReadListener<DetectSyncToCarEntity> {
    /**
     * 每隔200条存储数据库然后清理list ,方便内存回收
     */
    private final int BATCH_COUNT = 200;
    private final List<UserTest> cacheList = new ArrayList<>();
    @SneakyThrows
    @Override
    public void onException(Exception exception, AnalysisContext context) {
        //异常时需要做的处理
        //log.error("load file row data error! info:{}", exception);
    }
    /**
     * 这里会一行行的返回头
     *
     * @param headMap
     * @param context
     */
    @SneakyThrows
    @Override
    public void invokeHead(Map<Integer, ReadCellData<?>> headMap, AnalysisContext context) {
    }
    /**
     * 这个每一条数据解析都会来调用
     *
     * @param data
     * @param context
     */
    @Override
    public void invoke(UserTest data, AnalysisContext context) {
        if (null != data){
            //将数据暂存到缓存中,到达处理数量时进行处理
            cacheList.add(data);
            if (detectSyncToCarEntityList.size() >= BATCH_COUNT){
                doProcess(false);
            }
        }
    }
    @Override
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
        //收尾阶段,最后一批次没处理的数据进行处理
        doProcess(true);
    }
    public CustomerExcelDataListener() {
       //可以将外边的service传入构造方法进行使用
    }
    /**
     * 
     * @param isFinal 是否为最后一批数据
     */
   // @Transactional(rollbackFor = Exception.class)
    public void doProcess(Boolean isFinal) {
       //一批次的数据进行逻辑处理
      //业务处理
      //处理完成之后清理cache
      cacheList.clear();
    }
}
相关文章
|
16天前
|
前端开发
实现Excel文件和其他文件导出为压缩包,并导入
实现Excel文件和其他文件导出为压缩包,并导入
23 1
|
3月前
|
SQL C# 数据库
EPPlus库的安装和使用 C# 中 Excel的导入和导出
本文介绍了如何使用EPPlus库在C#中实现Excel的导入和导出功能。首先,通过NuGet包管理器安装EPPlus库,然后提供了将DataGridView数据导出到Excel的步骤和代码示例,包括将DataGridView转换为DataTable和使用EPPlus将DataTable导出为Excel文件。接着,介绍了如何将Excel数据导入到数据库中,包括读取Excel文件、解析数据、执行SQL插入操作。
EPPlus库的安装和使用 C# 中 Excel的导入和导出
|
2月前
|
easyexcel Java UED
SpringBoot中大量数据导出方案:使用EasyExcel并行导出多个excel文件并压缩zip后下载
在SpringBoot环境中,为了优化大量数据的Excel导出体验,可采用异步方式处理。具体做法是将数据拆分后利用`CompletableFuture`与`ThreadPoolTaskExecutor`并行导出,并使用EasyExcel生成多个Excel文件,最终将其压缩成ZIP文件供下载。此方案提升了导出效率,改善了用户体验。代码示例展示了如何实现这一过程,包括多线程处理、模板导出及资源清理等关键步骤。
|
4月前
|
easyexcel Java 关系型数据库
阿里巴巴-EasyExcel 基于Java的简单、省内存的读写Excel
该文章主要介绍了在Java应用中如何使用EasyExcel技术完成对Excel文件的导入和导出操作,包括环境搭建、基本概念、快速入门、进阶操作和综合应用等内容,并提供了相关代码示例和注意事项。
 阿里巴巴-EasyExcel 基于Java的简单、省内存的读写Excel
|
4月前
|
JavaScript 前端开发 easyexcel
基于SpringBoot + EasyExcel + Vue + Blob实现导出Excel文件的前后端完整过程
本文展示了基于SpringBoot + EasyExcel + Vue + Blob实现导出Excel文件的完整过程,包括后端使用EasyExcel生成Excel文件流,前端通过Blob对象接收并触发下载的操作步骤和代码示例。
769 0
基于SpringBoot + EasyExcel + Vue + Blob实现导出Excel文件的前后端完整过程
|
4月前
|
关系型数据库 MySQL Windows
MySQL数据导入:MySQL 导入 Excel 文件.md
MySQL数据导入:MySQL 导入 Excel 文件.md
|
5月前
|
存储 关系型数据库 MySQL
Excel 导入 sql3
【7月更文挑战第18天】
47 2
|
4月前
|
前端开发 easyexcel
SpringBoot+Vue3实现Excel导入
SpringBoot+Vue3实现Excel导入
126 0
|
6月前
|
Java easyexcel
java开发excel导入导出工具类基于EasyExcel
java开发excel导入导出工具类基于EasyExcel
320 1
|
5月前
|
前端开发 JavaScript PHP
技术心得:前端点击按钮,导入excel文件,上传到后台,excel接收和更新数据
技术心得:前端点击按钮,导入excel文件,上传到后台,excel接收和更新数据
62 0