使用EasyExcel实现Excel导入导出

介绍

EasyExcel是一个基于Java的、快速、简洁、解决大文件内存溢出的Excel处理工具。

他能让你在不用考虑性能、内存的等因素的情况下,快速完成Excel的读、写等功能。

快速:快速的读取excel中的数据。

简洁:映射excel和实体类,让代码变的更加简洁。

大文件:在读写大文件的时候使用磁盘做缓存,更加的节约内存。

官方文档:https://easyexcel.opensource.alibaba.com/

引入依赖

xml 复制代码
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>3.1.0</version>
</dependency>

创建实体类

java 复制代码
package com.example.study.vo.sys;

import com.alibaba.excel.annotation.ExcelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * @author guochao
 * @version 1.0
 * @date 2023/10/18
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class SysClassifyExcelVo {
    @ExcelProperty(value = "id",index = 0)
    private Long id;
    @ExcelProperty(value = "名称",index = 1)
    private String name;
    @ExcelProperty(value = "类型",index = 2)
    private String type;
    @ExcelProperty(value = "上级id",index = 3)
    private Long parentId;
    @ExcelProperty(value = "排序",index = 4)
    private Long sort;
}

创建监听类

java 复制代码
package com.itgc.test;

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

import java.util.ArrayList;
import java.util.List;

/**
 * @author guochao
 * @version 1.0
 * @date 2023/10/18
 */
public class ExcelListener<T> extends AnalysisEventListener<T> {

    private List<T> data = new ArrayList<>();

    //读取exceL内容,
    //从第二行开始读取,把每行读取内容封装到t对象里面
    @Override
    public void invoke(T t, AnalysisContext analysisContext) {
        data.add(t);
    }

    public List<T> getData(){
        return data;
    }

    @Override
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {

    }
}

使用

java 复制代码
package com.itgc.test;

import com.alibaba.excel.EasyExcel;
import com.example.study.vo.sys.SysClassifyExcelVo;

import java.util.ArrayList;
import java.util.List;

/**
 * @author guochao
 * @version 1.0
 * @date 2023/10/18
 */
public class EasyExcelTest {

    public static void main(String[] args) {
//        read();

        write();
    }

    //读操作
    public static void read(){
        //1 定义读取excel文件位置
        String fileName = "D://01.xlsx";
        //2 调用方法
        ExcelListener<SysClassifyExcelVo> excelListener = new ExcelListener<>();
        EasyExcel.read(fileName, SysClassifyExcelVo.class,excelListener).sheet().doRead();
        List<SysClassifyExcelVo> data = excelListener.getData();
        System.out.println(data);
    }

    //写操作
    public static void write(){
        List<SysClassifyExcelVo> list = new ArrayList<>();
        list.add(new SysClassifyExcelVo(1L,"分类1","课程",0L,0L));
        list.add(new SysClassifyExcelVo(2L,"分类1-1","课程",1L,1L));
        EasyExcel.write("D://02.xlsx",SysClassifyExcelVo.class)
                .sheet("分类数据").doWrite(list);
    }
}
相关推荐
胚芽鞘68113 分钟前
查询依赖冲突工具maven Helper
java·数据库·maven
Charlie__ZS19 分钟前
若依框架去掉Redis
java·redis·mybatis
咖啡啡不加糖1 小时前
RabbitMQ 消息队列:从入门到Spring Boot实战
java·spring boot·rabbitmq
玩代码1 小时前
Java线程池原理概述
java·开发语言·线程池
NE_STOP1 小时前
SpringBoot--如何给项目添加配置属性及读取属性
java
水果里面有苹果1 小时前
20-C#构造函数--虚方法
java·前端·c#
%d%d21 小时前
python 在运行时没有加载修改后的版本
java·服务器·python
金銀銅鐵1 小时前
[Kotlin] 单例对象是如何实现的?
java·kotlin
泰勒疯狂展开1 小时前
Java研学-MongoDB(三)
java·开发语言·mongodb
zzywxc7871 小时前
AI技术通过提示词工程(Prompt Engineering)正在深度重塑职场生态和行业格局,这种变革不仅体现在效率提升,更在重构人机协作模式。
java·大数据·开发语言·人工智能·spring·重构·prompt