EasyExcel实战

EasyExcel实战

一. 简介

    EasyExcel是一个基于Java的、快速、简洁、解决大文件内存溢出的Excel处理工具。
 他能让你在不用考虑性能、内存的等因素的情况下,快速完成Excel的读、写等功能。

二.应用场景

  1. 数据导入:减轻录入的工作量
  2. 数据导出:统计信息归档
  3. 数据传输:异构系统之间数据传输

三.easyExcel实现导出

1.导入相关依赖
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
            <version>2.1.1</version>
        </dependency>
2.创建实体

设置表头和添加的数据字段

/**
 * @author gf
 * @date 2022/6/30
 */
@Data
@AllArgsConstructor
public class Person {

    @ExcelProperty(value = "编号", index = 0)
    private String  id;

    @ExcelProperty(value = "姓名", index = 1)
    private String name;

    @ExcelProperty(value = "年龄", index = 2)
    private Integer age;

}
3.实现写操作

方式一:

public class EasyExcelMain {

    public static void main(String[] args) {

        // 指定要写入的excel文件名,如果不存在则创建
        String fileName = "D:\\user.xlsx";

        List<Person > personList = new ArrayList<>();
        personList .add( new Person ("1001211112000050001","王杰 ",18));
        personList .add( new Person ("1001211112000050002","赵雷 ",19));
        personList .add( new Person ("1001211112000050003","王培昊 ",27));

        // 调用write,传入文件名和Excel应对的实体类,通知指定sheet名称
        EasyExcel.write(fileName, Person .class).sheet("用户信息").doWrite(userList);

    }
}

方式二:

public class EasyExcelMain {

    public static void main(String[] args) {

        // 指定要写入的excel文件名,如果不存在则创建
        String fileName = "D:\\user.xlsx";

        List<Person > userList = new ArrayList<>();
        personList .add( new Person ("1001211112000050001","王杰 ",18));
        personList .add( new Person ("1001211112000050002","黄家驹 ",19));
        personList .add( new Person ("1001211112000050003","窦唯 ",18));

        ExcelWriter excelWriter = EasyExcel.write(fileName, Person .class).build();
        // 创建Sheet对象
        WriteSheet writeSheet = EasyExcel.writerSheet("用户信息").build();
        // 向Excel中写入数据
        excelWriter.write(personList , writeSheet);
        // 关闭流
        excelWriter.finish();
    }
}
4.导出效果

在这里插入图片描述

四.easyExcel实现导入

方式一:

public class EasyExcelMain {
    
    public static void main(String[] args) {

        // 指定要写入的excel文件名,如果不存在则创建
        String fileName = "D:\\user.xlsx";
        readFile(fileName);

    }

    public static void readFile(String fileName ){
        // 创建ExcelReaderBuilder对象
        ExcelReaderBuilder readerBuilder = EasyExcel.read();
        // 获取文件对象
        readerBuilder.file(fileName);
        // 指定sheet
        readerBuilder.sheet(0);
        // 自动关闭输入流
        readerBuilder.autoCloseStream(true);
        // 设置Excel文件格式
        readerBuilder.excelType(ExcelTypeEnum.XLSX);

        readerBuilder.registerReadListener(new AnalysisEventListener() {
            // 每解析一行数据,该方法会被调用一次
            @Override
            public void invoke(Object obj, AnalysisContext analysisContext) {
                // 如果没有指定数据模板, 解析的数据会封装成 LinkedHashMap返回
                // obj instanceof LinkedHashMap 返回 true
                System.out.println("解析数据为 user:" + obj.toString());

                //TODO 转换成personList 存入数据库中
            }

            // 全部解析完成被调用
            @Override
            public void doAfterAllAnalysed(AnalysisContext analysisContext) {
                System.out.println("解析完成...");
            }
        });

        readerBuilder.doReadAll();

    }
 }

方式二:

public class EasyExcelMain {

    public static void main(String[] args) {

        // 指定要写入的excel文件名,如果不存在则创建
        String fileName = "D:\\user.xlsx";
        simpleRead(fileName);

    }

    public static void simpleRead(String fileName){

        List<Person> peopleList= new ArrayList<>();

        EasyExcel.read(fileName, Person.class, new AnalysisEventListener<Person>(){

            @Override
            public void invoke(Person person, AnalysisContext analysisContext) {
                peopleList.add(person);
            }

            @Override
            public void doAfterAllAnalysed(AnalysisContext analysisContext) {

            }
        }).doReadAll();

        //获取读取到的数据
        for (Person p : peopleList) {
            System.out.println("获取对象"+p);
        }

    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值