EasyExcel简介

一 Excel导入导出的应用场景

1 数据导入

减轻录入工作量

2 数据导出

统计信息归档

3 数据传输

异构系统之间数据传输

二 EasyExcel简介

1 官方网站

https://github.com/alibaba/easyexcel

快速开始:https://www.yuque.com/easyexcel/doc/easyexcel

2 EasyExcel特点

Java领域解析、生成Excel比较有名的框架有Apache poi、jxl等。但他们都存在一个严重的问题就是非常的耗内存。如果你的系统并发量不大的话可能还行,但是一旦并发上来后一定会OOM或者JVM频繁的full gc。

EasyExcel是阿里巴巴开源的一个excel处理框架,以使用简单、节省内存著称。EasyExcel能大大减少占用内存的主要原因是在解析Excel时没有将文件数据一次性全部加载到内存中,而是从磁盘上一行行读取数据,逐个解析。

EasyExcel采用一行一行的解析模式,并将一行的解析结果以观察者的模式通知处理(AnalysisEventListener)

三 写实战

1 创建一个普通的maven项目

项目名:alibaba_easyexcel

2 pom中引入xml相关依赖


    
    
        com.alibaba
        easyexcel
        2.1.7
    
    
    
        org.slf4j
        slf4j-simple
        1.7.5
    
    
    
        org.apache.xmlbeans
        xmlbeans
        3.1.0
    
    
    
        org.projectlombok
        lombok
        1.18.10
    
    
    
        junit
        junit
        4.12
    

3 创建实体类

@Data
public class ExcelStudentData {
    /**
     * 姓名
     */
    @ExcelProperty(value = "姓名", index = 2)
    private String name;
    /**
     * 生日
     */
    @DateTimeFormat("yyyy年MM月dd日HH时mm分ss秒")
    @ExcelProperty(value = "生日", index = 3)
    private Date birthday;
    /**
     * 薪资
     */
    @NumberFormat("#.##%")
    @ExcelProperty(value = "薪资", index = 5)
    private Double salary;
    /**
     * 忽略密码字段
     */
    @ExcelIgnore
    private String password;
}

4 创建测试

public class ExcelWriteTest {
    /**
     * 功能描述:07版测试
     *
     * @author cakin
     * @date 2020/11/30
     */
    @Test
    public void simpleWrite07() {
        String fileName = "F:/temp/simpleWrite-07.xlsx";
        EasyExcel.write(fileName, ExcelStudentData.class)
                .sheet("学生信息")
                .doWrite(data());
    }


    /**
     * 功能描述:03版测试
     *
     * @author cakin
     * @date 2020/11/30
     */
    @Test
    public void simpleWrite03() {
        String fileName = "F:/temp/simpleWrite-03.xls";
        EasyExcel.write(fileName, ExcelStudentData.class)
                .excelType(ExcelTypeEnum.XLS) // 默认是 XLSX
                .sheet("学生信息")
                .doWrite(data());
    }


    /**
     * 功能描述:构造数据
     *
     * @author cakin
     * @date 2020/11/30
     */
    private List data() {
        List list = new ArrayList<>();
        for (int i = 0; i < 65535; i++) {
            ExcelStudentData data = new ExcelStudentData();
            data.setName("Helen" + i);
            data.setBirthday(new Date());
            data.setSalary(0.12345);
            data.setPassword("123456");
            list.add(data);
        }
        return list;
    }
}

四 测试

EasyExcel简介_第1张图片

五 说明 

  • 07版本的Excel和03版本的写入方式有所不同,03版本是一次性写入,可能会导致内容溢出问题,07版本是一条条写入。07版本写入文件后,大小较03版要小。
  • 03版本的Excel一次最多可写65536行,07版本没限制。

你可能感兴趣的:(java,java)