EasyExcel 实现Excel文件的读写和导出

1、EasyExcel介绍

1.1 官网介绍

传统操作Excel大多都是利用Apach POI进行操作的,但是POI框架并不完善,使用过程非常繁琐且有较多的缺陷:

  • 动态操作Excel非常繁琐,对于新手来说,很难在短时间内上手;
  • 读写时需要占用较大的内存,当数据量大时容易发生内存溢出问题(OOM);

基于上述原因,阿里开源出一款易于上手,且比较节省内存的Excel框架:EasyExcel

注意:easyExcel底层也是使用POI实现的;

官网地址:关于Easyexcel | Easy Excel (alibaba.com)
在这里插入图片描述

依赖资源:

<!--引入easyexcel-->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>3.0.4</version>
</dependency>

注意:目前版本与JDK8较为契合,高版本的JDK可能会出现兼容性问题;高版本jdk可能会出现中文乱码的现象,可在代码中修改编码格式为utf-8。

1.2 Excel相关结构说明

在这里插入图片描述

2、EasyExcel导出数据快速入门

2.1 构建测试实体类

package com.itheima.stock.pojo;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.util.Date;

/**
 * @author by itheima
 * @Date 2021/12/19
 * @Description
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class User implements Serializable {
    private String userName;
    private Integer age;
    private String address;
    private Date birthday;
}

2.2 数据导出到excel

package com.itheima.stock;

import com.alibaba.excel.EasyExcel;
import com.itheima.stock.pojo.User;
import org.junit.jupiter.api.Test;

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

public class TestEasyExcel {

    public List<User> init(){
        //组装数据
        ArrayList<User> users = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            User user = new User();
            user.setAddress("上海"+i);
            user.setUserName("张三"+i);
            user.setBirthday(new Date());
            user.setAge(10+i);
            users.add(user);
        }
        return users;
    }
    /**
     * 直接导出后,表头名称默认是实体类中的属性名称
     */
    @Test
    public void test02(){
        List<User> users = init();
        //不做任何注解处理时,表头名称与实体类属性名称一致
        EasyExcel.write("C:\\Users\\46035\\Desktop\\ex\\用户.xls",User.class).sheet("用户信息").doWrite(users);
    }
}

在这里插入图片描述

2.3 自定义表头

修改User实体类,设置表头数据和排序规则:

package com.itheima.stock.pojo;

import com.alibaba.excel.annotation.ExcelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.Date;

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
/**
  * 通过注解自定义表头名称 注解添加排序规则,值越大 越靠近右边
*/
public class User implements Serializable {
    @ExcelProperty(value = {"用户名"},index = 1)
    private String userName;
    @ExcelProperty(value = {"年龄"},index = 2)
    private Integer age;
    @ExcelProperty(value = {"地址"} ,index = 4)
    private String address;
    @ExcelProperty(value = {"生日"},index = 3)
    private Date birthday;
}

在这里插入图片描述

3、EasyExcel导出数据高级设置

3.1 自定义日期格式

package com.itheima.stock.pojo;

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

import java.io.Serializable;
import java.util.Date;

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class User implements Serializable {
    @ExcelProperty(value = {"用户名"},index = 1)
    private String userName;
    @ExcelProperty(value = {"年龄"},index = 2)
    private Integer age;
    @ExcelProperty(value = {"地址"} ,index = 4)
    private String address;
    @ExcelProperty(value = {"生日"},index = 3)
    //注意:日期格式注解由alibaba.excel提供
    @DateTimeFormat("yyyy/MM/dd HH:mm")
    private Date birthday;
}

在这里插入图片描述

3.2 合并表头

添加合并表头信息:

package com.itheima.stock.pojo;

import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.format.DateTimeFormat;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.util.Date;

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class User implements Serializable {
    @ExcelProperty(value = {"用户基本信息","用户名"},index = 1)
    private String userName;
    @ExcelProperty(value = {"用户基本信息","年龄"},index = 2)
    private Integer age;
    @ExcelProperty(value = {"用户基本信息","地址"} ,index = 4)
    private String address;
    @ExcelProperty(value = {"用户基本信息","生日"},index = 3)
    //注意:日期格式注解由alibaba.excel提供
    @DateTimeFormat("yyyy/MM/dd HH:mm")
    private Date birthday;
}

效果:

在这里插入图片描述

3.3 忽略指定表头信息

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class User implements Serializable {
    @ExcelProperty(value = {"用户基本信息","用户名"},index = 1)
    @ExcelIgnore
    private String userName;
    @ExcelProperty(value = {"用户基本信息","年龄"},index = 2)
    private Integer age;
    @ExcelProperty(value = {"用户基本信息","地址"} ,index = 4)
    private String address;
    @ExcelProperty(value = {"用户基本信息","生日"},index = 3)
    //注意:日期格式注解由alibaba.excel提供
    @DateTimeFormat("yyyy/MM/dd HH:mm")
    private Date birthday;
}

效果:
在这里插入图片描述

3.4 设置单元格大小

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@HeadRowHeight(value = 35) // 表头行高
@ContentRowHeight(value = 25) // 内容行高
@ColumnWidth(value = 50) // 列宽
public class User implements Serializable {
    @ExcelProperty(value = {"用户基本信息","用户名"},index = 1)
    @ExcelIgnore
    private String userName;
    @ExcelProperty(value = {"用户基本信息","年龄"},index = 2)
    private Integer age;
    @ExcelProperty(value = {"用户基本信息","地址"} ,index = 4)
    private String address;
    @ExcelProperty(value = {"用户基本信息","生日"},index = 3)
    //注意:日期格式注解由alibaba.excel提供
    @DateTimeFormat("yyyy/MM/dd HH:mm")
    private Date birthday;
}

效果:
在这里插入图片描述

4、EasyExcel导入数据

    /**
     * excel数据格式必须与实体类定义一致,否则数据读取不到
     */
    @Test
    public void readExcel(){
        ArrayList<User> users = new ArrayList<>();
        //读取数据
        EasyExcel.read("C:\\Users\\46035\\Desktop\\ex\\用户.xls", User.class, new AnalysisEventListener<User>() {
            @Override
            public void invoke(User o, AnalysisContext analysisContext) {
                System.out.println(o);
                users.add(o);
            }
            @Override
            public void doAfterAllAnalysed(AnalysisContext analysisContext) {
                System.out.println("完成。。。。");
            }
        }).sheet().doRead();
        System.out.println(users);
    }

  • 18
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
EasyExcel是一个基于Java的简单易用的Excel文件读写工具,它可以很方便地实现Excel文件导入和导出。下面介绍一下如何使用EasyExcel实现Excel文件导出。 1. 引入EasyExcel依赖 将以下依赖添加到项目的pom.xml文件中: ```xml <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>2.1.7</version> </dependency> ``` 2. 创建Excel实体类 首先,需要创建一个Java类来表示Excel文件的数据结构。例如,如果要导出一个包含学生信息的Excel文件,可以创建一个名为Student的类,并在其中定义需要导出的属性: ```java public class Student { private String name; private Integer age; private String gender; private String address; // 省略getter和setter方法 } ``` 3. 创建Excel文件 在进行Excel文件导出之前,需要先创建一个Excel文件EasyExcel提供了一个名为ExcelWriter的类,可以用来创建Excel文件。以下是一个创建Excel文件的示例代码: ```java // 创建ExcelWriter对象 ExcelWriter excelWriter = new ExcelWriter(new FileOutputStream("students.xlsx"), ExcelTypeEnum.XLSX); // 创建Sheet对象 Sheet sheet = new Sheet(1, 0, Student.class); // 设置Sheet名称 sheet.setSheetName("学生信息"); // 写入数据 List<Student> data = new ArrayList<>(); // 添加数据到List中 // ... excelWriter.write(data, sheet); // 关闭ExcelWriter对象 excelWriter.finish(); ``` 以上代码中,创建了一个名为“学生信息”的Sheet对象,并设置其数据类型为Student类。然后,将需要导出的数据写入到Excel文件中。 4. 导出Excel文件 创建Excel文件后,就可以通过EasyExcel将其导出了。以下是一个导出Excel文件的示例代码: ```java // 设置响应头信息 response.setContentType("application/vnd.ms-excel"); response.setCharacterEncoding("utf-8"); response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("students.xlsx", "UTF-8")); // 创建ExcelWriter对象 ExcelWriter excelWriter = new ExcelWriter(response.getOutputStream(), ExcelTypeEnum.XLSX, true); // 创建Sheet对象 Sheet sheet = new Sheet(1, 0, Student.class); // 设置Sheet名称 sheet.setSheetName("学生信息"); // 写入数据 List<Student> data = new ArrayList<>(); // 添加数据到List中 // ... excelWriter.write(data, sheet); // 关闭ExcelWriter对象 excelWriter.finish(); ``` 以上代码中,设置了响应头信息,告诉浏览器需要下载一个Excel文件。然后,创建了一个ExcelWriter对象,并将其输出流设置为响应流,这样Excel文件就可以直接输出到浏览器中。最后,将需要导出的数据写入到Excel文件中,并关闭ExcelWriter对象。 通过以上步骤,就可以使用EasyExcel实现Excel文件导出了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值