什么?你还在用POI导出数据?EasyExcel解决大数据量导出OOM(内存溢出)

本文介绍了如何使用EasyExcel代替POI处理大数据量的Excel导出,避免内存溢出。EasyExcel是阿里巴巴的一个高性能的Excel处理工具,通过减少内存消耗和提供简单的API使用方式,有效解决了POI在处理大量数据时的内存问题。文章包括EasyExcel的简介、快速使用指南以及在实际项目中的应用示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

今天忙完,上面派发了一个任务,有个项目的导出接口数据量太大了,导出直接内存溢出(OOM),暂时做法是限制导出的行数,然后让我去研究一下,通过一下午的研究,通过EasyExcel解决了这个问题,并且大幅度提高了映射速度,如下图:
在这里插入图片描述

EasyExcel介绍

EasyExcel是一个基于Java的简单、省内存的读写Excel的开源项目,alibaba旗下的高性能处理Excel工具。在尽可能节约内存的情况下支持读写百M的Excel.

Java解析、生成Excel比较常用的框架有Apache POI、JXL,但是他们都有一个严重的问题就是耗内存,POI有一套SAX模式的API可以一定程度上解决一些内存溢出的问题,但POI还是有一些缺陷

比如:07版本的Excel解压后存储都是在内存中完成的,内存消耗依旧很大。EasyExcel重写了POI对07版本Excel的解析,能够让原本一个3M的Excel用POI SAX需要用到100M左右内存降低到几M,并且再大的Excel都不会出现内存溢出,并且它在上层做了模型转换的封装,让使用者更简单。

在这里插入图片描述
64M内存1分钟内读取75M(46W行25列)的Excel,以上来源于官网↑↑

Github 开源地址:GitHub地址
语雀案例地址:官网案例

快速使用

导入Maven依赖 ps:这里只做导出数据示范,更多操作请参考官网

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

实体类(模版对象):

@Data
public class DemoData {
   
	@ExcelProperty("字符串标题")
	private String string;
	// 这里用string 去接日期才能格式化。我想接收年月日格式
	@DateTimeFormat("yyyy年MM月dd日HH时mm分ss秒")
	@ExcelProperty("日期标题")
	private Date date;
	@ExcelProperty("数字标题")
	//我想接收百分比的数字
	// @NumberFormat("#.##%")
	private Double doubleData;
	//忽略这个字段
	@ExcelIgnore
	private String ignore;
}

测试:

@Test
public void yy(){
   
  // 写法1
  String fileName = 
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值