欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

利用阿里EasyExcel实现excel的生成并下载

程序员文章站 2022-03-15 10:17:04
...

Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题,但POI还是有一些缺陷,比如07版Excel解压缩以及解压后存储都是在内存中完成的,内存消耗依然很大。easyexcel重写了poi对07版Excel的解析,能够原本一个3M的excel用POI sax依然需要100M左右内存降低到KB级别,并且再大的excel不会出现内存溢出,03版依赖POI的sax模式。在上层做了模型转换的封装,让使用者更加简单方便

easyexcel核心功能

  • 读任意大小的03、07版Excel不会OOM
  • 读Excel自动通过注解,把结果映射为java模型
  • 读Excel支持多sheet
  • 读Excel时候是否对Excel内容做trim()增加容错
  • 写小量数据的03版Excel(不要超过2000行)
  • 写任意大07版Excel不会OOM
  • 写Excel通过注解将表头自动写入Excel
  • 写Excel可以自定义Excel样式 如:字体,加粗,表头颜色,数据内容颜色
  • 写Excel到多个不同sheet
  • 写Excel时一个sheet可以写多个Table
  • 写Excel时候自定义是否需要写表头

 

1、引入相关Jar包 

    <!--alibaba easyexcel-->
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>easyexcel</artifactId>
      <version>1.1.2-beta5</version>
    </dependency>

    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <version>1.18.8</version>
      <scope>provided</scope>
    </dependency>

2、存放数据的实体

package cn.com.demo;

import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.metadata.BaseRowModel;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * @Date: 2019/6/10 16:31
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class WriteModel extends BaseRowModel {

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

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

    @ExcelProperty(value = "性别",index = 3)
    private String sex;
}

3、生成excel并下载(各种样式可以根据参数调)

package cn.com.demo;

import com.alibaba.excel.EasyExcelFactory;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.metadata.Sheet;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class ExcelDemo 
{
    public static void main( String[] args ) throws IOException {
        // 文件输出位置
        OutputStream out = new FileOutputStream("C:\\Users\\Administrator\\Desktop\\导出\\demo.xlsx");

        ExcelWriter writer = EasyExcelFactory.getWriter(out);

        // 写仅有一个 Sheet 的 Excel 文件, 此场景较为通用
        Sheet sheet1 = new Sheet(1, 0, WriteModel.class);

        // 第一个 sheet 名称
        sheet1.setSheetName("姓名簿");

        // 写数据到 Writer 上下文中
        // 入参1: 创建要写入的模型数据
        // 入参2: 要写入的目标 sheet
        writer.write(data(), sheet1);

        // 将上下文中的最终 outputStream 写入到指定文件中
        writer.finish();

        // 关闭流
        out.close();
    }

    private static List<WriteModel> data(){
        WriteModel model1 = new WriteModel("小A",18,"男");
        WriteModel model2 = new WriteModel("小B",19,"男");
        WriteModel model3 = new WriteModel("小C",20,"女");
        WriteModel model4 = new WriteModel("小D",18,"男");
        WriteModel model5 = new WriteModel("小E",22,"女");

        List<WriteModel> list = new ArrayList<>();
        list.addAll(Arrays.asList(model1,model2,model3,model4,model5));

        return list;
    }
}

4、运行结果

利用阿里EasyExcel实现excel的生成并下载

 

easyexcel项目源码:https://github.com/alibaba/easyexcel

 

初识easyexcel,先简单记录一个小demo了解一下,里面还有很多可以通过参数设置的样式,日后用到的时候继续研究。

想要学习更多请点

利用阿里EasyExcel实现excel的生成并下载