小言_互联网的博客

使用EasyExcel读写Excel文件

312人阅读  评论(0)


一、EasyExcel介绍

Java解析、生成Excel比较有名的框架有Apache poijxl。但这两个技术都非常的消耗内存。目前流行的解决方案是使用阿里出品的EasyExcel框架EasyExcel是一个基于Java的简单、省内存的读写Excel的开源项目。在尽可能节约内存的情况下支持读写百M的Excel。

使用前需要引入EasyExcel的依赖,这里以2.1.1版本为例。

<dependency>
	<groupId>com.alibaba</groupId>
	<artifactId>easyexcel</artifactId>
	<version>2.1.1</version>
</dependency>

二、将数据写入Excel

1.创建excel对应的实体对象

创建excel对应的实体对象实际上就是Excel数据表中的表头属性。

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

/**
 * @Description: 创建excel对应的实体对象
 * @author Guoqianliang
 * @date 19:47 - 2021/4/14
 */
@Data
public class UserData {
   
    @ExcelProperty(value = "用户编号", index = 0)
    private int id;
    @ExcelProperty(value = "用户名", index = 1)
    private String username;
    @ExcelProperty(value = "性别", index = 2)
    private String gender;
    @ExcelProperty(value = "工资", index = 3)
    private Double salary;
}

2.write方法实现写操作

在具体的写方法中,write方法传入两个参数:

  • String pathName:excel文件路径和文件名称。
  • Class head:excel表头对应的实体类。
import com.alibaba.excel.EasyExcel;

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

/**
 * @Description: 使用EasyExcel将数据写入Excel
 * @author Guoqianliang
 * @date 19:50 - 2021/4/14
 */
public class TestWrite {
   
    public static void main(String[] args) {
   
        // 向list集合添加100条数据
        List<UserData> list = new ArrayList<>();
        for (int i = 0; i < 100; i++) {
   
            UserData data = new UserData();
            data.setId(i);
            data.setUsername("Hudie" + i + "号");
            data.setGender("男");
            data.setSalary(100000.00);
            list.add(data);
        }

        // 设置excel文件路径和文件名称
        String fileName = "D:\\Program Files (x86)\\test\\01.xlsx";

        // write方法实现写操作
        EasyExcel.write(fileName, UserData.class).sheet("用户信息")
                .doWrite(list);
    }
}

3.测试结果分析

项目运行后,成功将100条数据写入Excel表格:

三、将数据读出Excel

1.配置监听器

监听器中重载的三个方法:

  • invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context):读取表头内容。
  • invoke(UserData userData, AnalysisContext analysisContext):从第二行开始读取依次读取每行内容,userData中存储了读取到的数据。
  • doAfterAllAnalysed(AnalysisContext analysisContext):读取之后执行的方法。
public class ExcelListener extends AnalysisEventListener<UserData> {
   
    // 读取第一行表头内容
    @Override
    public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {
   
        System.out.println("表头信息" + headMap);
    }

    // 从第二行开始一行一行读取excel内容,每行内容读取到userData中
    @Override
    public void invoke(UserData userData, AnalysisContext analysisContext) {
   
        System.out.println(userData);
    }

    // 读取之后执行
    @Override
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
   
        System.out.println("读取完毕!");
    }
}

2.read方法实现写操作

在具体的写方法中,read方法传入三个参数:

  • String pathName:excel文件路径和文件名称。
  • Class head:excel表头对应的实体类。
  • ReadListener readListener:监听器。
public class TestRead {
   
    public static void main(String[] args) {
   
        // 要读取文件的路径
        String fileName = "D:\\Program Files (x86)\\test\\01.xlsx";
        // 调用read方法实现读取操作
        EasyExcel.read(fileName, UserData.class, new ExcelListener()).sheet("用户信息").doRead();
    }
}

3.测试结果分析


至此,使用EasyExcel读写Excel文件演示完毕。


转载:https://blog.csdn.net/weixin_43691058/article/details/115708345
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场