使用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);
    }
}
相关推荐
高兴达1 分钟前
RPC--Netty客户端实现
java·spring·rpc
YouYOUyouFairy17 分钟前
EXCEL动态表格
excel
重庆小透明28 分钟前
力扣刷题记录【1】146.LRU缓存
java·后端·学习·算法·leetcode·缓存
lang2015092833 分钟前
Reactor操作符的共享与复用
java
TTc_44 分钟前
@Transactional事务注解的批量回滚机制
java·事务
Maruko3101 小时前
Java 实现excel大批量导出
excel·poi
忧郁的蛋~1 小时前
HTML表格导出为Excel文件的实现方案
前端·html·excel
wei_shuo2 小时前
飞算 JavaAI 开发助手:深度学习驱动下的 Java 全链路智能开发新范式
java·开发语言·飞算javaai
欧阳秦穆2 小时前
apoc-5.24.0-extended.jar 和 apoc-4.4.0.36-all.jar 啥区别
java·jar
岁忧2 小时前
(LeetCode 面试经典 150 题 ) 58. 最后一个单词的长度 (字符串)
java·c++·算法·leetcode·面试·go