利用阿里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项目源码:https://github.com/alibaba/easyexcel
初识easyexcel,先简单记录一个小demo了解一下,里面还有很多可以通过参数设置的样式,日后用到的时候继续研究。
上一篇: Springboot 整合easyExcel导出excel表格数据
下一篇: 二分查找
推荐阅读
-
PHP实现实时生成并下载超大数据量的EXCEL文件详解
-
AngularJS基于http请求实现下载php生成的excel文件功能示例
-
java实现阿里云上传图片,并解决上传图片文件的强制性下载
-
Asp.net MVC 简单实现生成Excel并下载
-
利用PHPexcel生成对应多张excel表格并打包提供下载功能(生成的表格里面是包含图片的)
-
使用Ajax生成的Excel文件并下载的实例
-
PHP实现实时生成并下载超大数据量的EXCEL文件详解
-
java实现excel的生成,利用poi jar包实现excel的生成
-
使用Ajax生成的Excel文件并下载的实例
-
AngularJS基于http请求实现下载php生成的excel文件功能示例