EasyExcel简介

Stella981
• 阅读 718

一 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相关依赖

<dependencies>
    <!-- easyexcel -->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>easyexcel</artifactId>
        <version>2.1.7</version>
    </dependency>
    <!-- easyexcel依赖slf4j-simple -->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-simple</artifactId>
        <version>1.7.5</version>
    </dependency>
    <!-- easyexcel依赖xmlbeans -->
    <dependency>
        <groupId>org.apache.xmlbeans</groupId>
        <artifactId>xmlbeans</artifactId>
        <version>3.1.0</version>
    </dependency>
    <!-- lombok -->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.10</version>
    </dependency>
    <!-- junit -->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
    </dependency>
</dependencies>

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<ExcelStudentData> data() {
        List<ExcelStudentData> 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简介

五 说明 

  • 07版本的Excel和03版本的写入方式有所不同,03版本是一次性写入,可能会导致内容溢出问题,07版本是一条条写入。07版本写入文件后,大小较03版要小。
  • 03版本的Excel一次最多可写65536行,07版本没限制。
点赞
收藏
评论区
推荐文章
Easter79 Easter79
2年前
tidb 数据导入流程
tidb批量数据导入命令tidb数据导出命令1.设置mysql的binlog格式为rowshowvariableslike'binlog_format'2.将mysql数据导出./bin/mydumperhmysqlip P3306urootppasswordt16F64Bdata
Stella981 Stella981
2年前
HuTool工具类使用之Excel文档的导入导出
HuTool工具类使用之Excel文档的导入导出前言在日常的工作开发中,Excel的导入和导出是必不可少的,如果自己写相应的导入导出方法,会显得十分繁琐,本文采用Hutool工具类实现的Excel导入导出功能,可以大幅度减少今后开发中Excel的导入导出的相关操作。
Stella981 Stella981
2年前
PHP导入导出EXCELl,CSV
PHP导入导出Excel,CSVHTML<formaction"{:U('Admin/Unit/importcsv')}"method"post"name"myform"id"myform"enctype"multipart/formdata"<input
Stella981 Stella981
2年前
Excel数据转化为sql脚本
在实际项目开发中,有时会遇到客户让我们把大量Excel数据导入数据库的情况。这时我们就可以通过将Excel数据转化为sql脚本来批量导入数据库。1在数据前插入一列单元格,用来拼写sql语句。 具体写法:"insertintot\_student(id,name,age,class)value("&B2&",'"&C2&"',"&D2&"
Easter79 Easter79
2年前
Sqoop的安装和配置以及Sqoop的基本操作
一、概述Sqoop是apache旗下一款“Hadoop和关系型数据库服务器之间传送数据”的工具。导入数据:把MySQL,Oracle数据导入到Hadoop的HDFS、HIVE、HBASE等数据存储系统;导出数据:从Hadoop的文件系统中导出数据到关系数据库mysql等!(http
Stella981 Stella981
2年前
EasyExcel写入百万级数据到多sheet
EasyExcel是什么?快速、简单避免OOM的java处理Excel工具一、项目需求    从mongo库中查询数据,导出到excel文件中。但是动态导出的excel有多少列、列名是什么、有多少sheet页都需要动态获取。所以生成的excel也必须是动态生成,不能通过注解配置对象映射。而且写入的数据量,有可能达到100W级,使用传统的PO
Stella981 Stella981
2年前
Python之CSV模块
1\.CSV简介CSV(CommaSeparatedValues)是逗号分隔符文本格式,常用于Excel和数据库的导入和导出,Python标准库的CSV模块提供了读取和写入CSV格式文件的对象。1.1csv.reader对象和csv文件的读取
Stella981 Stella981
2年前
EasyExcel使用记录
GITHUB地址:https://github.com/alibaba/easyexcel(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fgithub.com%2Falibaba%2Feasyexcel)1.POM文件添加依赖:<dependency          
Wesley13 Wesley13
2年前
mysql8基于gtid导出导入搭建主从
mysql8基于gtid导出导入搭建主从开启GTID的情况下导出导入库的注意事项在开启了GTID功能的MySQL数据库中,不论是否使用了GTID的方式做了主从同步,导出导入时都需要特别注意数据库中的GTID信息.\导出\在主库上全备,setgtidpur
Stella981 Stella981
2年前
EasyExcel引入
好久没更了,都在有道云上面记录,没时间搬过来。easyexcel是最近项目做优化涉及的一个改善点吧。简介        导出是后台管理系统的常用功能,当数据量特别大的时候会内存溢出和卡顿页面,曾经自己封装过一个导出,POI百万级大数据量EXCEL导出采用了分批查询数据来避免内存溢出和使用SXSSFWorkbook方式缓存数据到文件上以解决