EasyExcel 支持流式导出,这是它的一个重要特性。流式导出可以有效解决大数据量导出时的内存溢出问题。

流式导出的优势

  1. 内存友好 :不会一次性将所有数据加载到内存中
  2. 适合大数据量 :可以处理百万级甚至更多的数据
  3. 性能稳定 :内存占用相对固定,不会随数据量增长而线性增加

基本用法示例

1. 简单流式导出

@GetMapping("/export")
public void export(HttpServletResponse response) throws IOException {// 设置响应头response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");response.setCharacterEncoding("utf-8");response.setHeader("Content-disposition", "attachment;filename=data.xlsx");// 创建ExcelWriter对象ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream(), DemoData.class).build();// 分页查询数据并写入int pageSize = 1000;int pageNum = 1;while (true) {List<DemoData> dataList = getDataFromDatabase(pageNum, pageSize);if (dataList.isEmpty()) {break;}// 写入当前页数据WriteSheet writeSheet = EasyExcel.writerSheet("Sheet1").build();excelWriter.write(dataList, writeSheet);pageNum++;}// 关闭流excelWriter.finish();
}

2. 使用分页助手

@GetMapping("/exportWithPage")
public void exportWithPage(HttpServletResponse response) throws IOException {response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");response.setCharacterEncoding("utf-8");response.setHeader("Content-disposition", "attachment;filename=data.xlsx");EasyExcel.write(response.getOutputStream(), DemoData.class).sheet("Sheet1").doWrite(() -> {// 分页查询数据List<DemoData> dataList = new ArrayList<>();int pageSize = 1000;int pageNum = 1;while (true) {List<DemoData> pageData = getDataFromDatabase(pageNum, pageSize);if (pageData.isEmpty()) {break;}dataList.addAll(pageData);pageNum++;}return dataList;});
}

3. 手动控制写入过程

@GetMapping("/exportManual")
public void exportManual(HttpServletResponse response) throws IOException {response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");response.setCharacterEncoding("utf-8");response.setHeader("Content-disposition", "attachment;filename=data.xlsx");ExcelWriter excelWriter = null;try {excelWriter = EasyExcel.write(response.getOutputStream(), DemoData.class).build();WriteSheet writeSheet = EasyExcel.writerSheet("Sheet1").build();// 分批写入数据int pageSize = 1000;int pageNum = 1;while (true) {List<DemoData> dataList = getDataFromDatabase(pageNum, pageSize);if (dataList.isEmpty()) {break;}excelWriter.write(dataList, writeSheet);pageNum++;}} finally {if (excelWriter != null) {excelWriter.finish();}}
}

4. 多Sheet流式导出

@GetMapping("/exportMultiSheet")
public void exportMultiSheet(HttpServletResponse response) throws IOException {response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");response.setCharacterEncoding("utf-8");response.setHeader("Content-disposition", "attachment;filename=data.xlsx");ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream(), DemoData.class).build();try {// 第一个SheetWriteSheet sheet1 = EasyExcel.writerSheet(0, "Sheet1").build();List<DemoData> data1 = getDataForSheet1();excelWriter.write(data1, sheet1);// 第二个SheetWriteSheet sheet2 = EasyExcel.writerSheet(1, "Sheet2").build();List<DemoData> data2 = getDataForSheet2();excelWriter.write(data2, sheet2);} finally {excelWriter.finish();}
}

注意事项

  1. 及时关闭资源 :使用完后要调用 excelWriter.finish() 关闭流
  2. 异常处理 :要做好异常处理,确保资源能够正确释放
  3. 数据分页 :合理设置分页大小,一般建议1000-5000条数据为一批
  4. 内存监控 :虽然流式导出内存友好,但仍需监控JVM内存使用情况

流式导出是EasyExcel处理大数据量导出的最佳实践,特别适合需要导出大量数据的业务场景。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/90532.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/90532.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/90532.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

广州 VR 安全用电技术:工作原理、特性及优势探析​

&#xff08;一&#xff09;沉浸式学习体验​ 在广州&#xff0c;VR 用电安全培训技术给用电安全培训带来变革。借助头戴式显示设备等硬件&#xff0c;结合 3D 建模和实时渲染技术&#xff0c;打造广州特色用电场景。员工戴上 VR 设备进入虚拟电力场景&#xff0c;能看到电气设…

2.Linux 网络配置

Linux: 网络配置 版本为centos7 网卡配置文件&#xff1a; /etc/sysconfig/network-scripts/ifcfg-ens33 [rootkami /]# cat /etc/sysconfig/network-scripts/ifcfg-ens33 TYPEEthernet /类型&#xff1a;以太网 PROXY_METHODnone BROWSER_ONLYno BOOTPROTOnone /网络配…

FPGA Verilog 入门语法指南

FPGA Verilog 入门语法指南 📋 目录 Verilog与C语言对比 基础关键字 数据类型 运算符 控制结构 数值表示 阻塞与非阻塞赋值 模块结构 预处理指令

【鸿蒙HarmonyOS Next App实战开发】视频提取音频

在多媒体处理场景中&#xff0c;经常需要从视频文件中提取纯净的音频轨道。本文将介绍如何在HarmonyOS应用中实现这一功能&#xff0c;核心代码基于ohos/mp4parser库的FFmpeg能力。 功能概述 我们实现了一个完整的视频音频提取页面&#xff0c;包含以下功能&#xff1a; 通过…

OpenHands:Manus 最强开源平替——本地部署与实战指南

文章目录⚙️ 一、OpenHands 核心优势&#xff1a;为何是 Manus 最佳平替&#xff1f;&#x1f9e0; 二、核心架构解析&#xff1a;多智能体如何协同工作&#xff1f;&#x1f6e0;️ 三、本地化部署指南&#xff1a;Docke部署Docker 极速部署&#xff08;推荐&#xff09;&…

用 AI 做数据分析:从“数字”里挖“规律”

数据整理干净后&#xff0c;就得分析了——算平均值、看差异、找关系&#xff0c;这些都能靠 AI 搞定。这节以“大学生在线学习满意度”数据为例&#xff0c;教你用 AI 做描述性统计、假设检验、相关性分析&#xff0c;一步步从数据里挖规律&#xff0c;超详细&#xff5e; 1. …

小程序安卓ApK转aab文件详情教程MacM4环境

根据Google Play的政策要求&#xff0c;自 2021 年 8 月起&#xff0c;Google Play 将开始要求新应用使用 Android App Bundle&#xff08;以下简称aab&#xff09; 进行发布。该格式将取代 APK 作为标准发布格式。 想了解更多关于aab的介绍可以直接阅读android官方文档&#x…

率先通过自动制冰性能认证,容声冰箱推动行业品质升级

日前&#xff0c;容声冰箱“电冰箱自动制冰性能认证”由中国家用电器研究院测试并通过&#xff0c;该认证为行业首次。这标志着中国家电行业在冰箱自动制冰功能的技术规范与品质保障领域树立了全新里程碑&#xff0c;也将洁净、高效的制冰体验带入中国家庭日常生活。目前&#…

大模型-batch之continuous batching

一、ORCA1.1 ORCA 概览看下Continuous Batching 技术的开山之作ORCA,这个其实是融合的思路。ORCA&#xff1a;把调度粒度从请求级别调整为迭代级别&#xff0c;并结合选择性批处理&#xff08;selective batching&#xff09;来进行优化。Sarathi[2] &#xff1a;利用Chunked P…

主要分布在背侧海马体(dHPC)CA1区域(dCA1)的时空联合细胞对NLP中的深层语义分析的积极影响和启示

时空联合细胞&#xff08;Spatiotemporal Conjunctive Cells&#xff09;主要分布在背侧海马体CA1区&#xff08;dCA1&#xff09;&#xff0c;其核心功能是​​同步编码空间位置、时间信息和行为意图​​&#xff0c;形成动态的情景记忆表征。这种神经机制为自然语言处理&…

操作系统:系统程序(System Programs)

目录 常见的系统程序类型 1️⃣ 文件管理&#xff08;File Management&#xff09; 2️⃣ 状态信息&#xff08;Status Information&#xff09; 3️⃣ 编译器和程序开发&#xff08;Program Language Support&#xff09; 4️⃣ 程序执行控制类&#xff08;Program Load…

【知识图谱】Neo4j Desktop桌面版中国区被禁(无法打开)问题解决方法

【知识图谱】Neo4j Desktop桌面版进程运行无法打开,UI 界面无法显示问题解决办法 前言 1.问题形式 2.原因分析 3.解决方法 3.1 方法一,断网 3.2 方法二,手动设置代理 4.启动Neo4j Desktop 前言 Neo4j Desktop桌面版安装教程参考链接: https://zskp1012.blog.csdn.net/artic…

安装acunetix软件之后改www.ddosi.org.bat文件

安装环境&#xff1a;windows11 通过网盘分享的文件&#xff1a;Acunetix_15.2.221208162_www.ddosi.org.zip 链接: https://pan.baidu.com/s/1FPFFr583FFFj6hxWB-Ygng?pwdjpim 提取码: jpim 下载后文件是&#xff1a; 解压之后&#xff0c;如下图&#xff1a; 安装步骤如…

pycharm安装教程-PyCharm2023安装详细步骤【MAC版】【安装包自取】

pycharm安装教程-PyCharm2025安装详细步骤【MAC版】安装安装包获取&#xff08;文章末尾&#xff09;今天来给大家分享 Mac 系统安装 PyCharm&#xff0c;附带安装包资源安装&#xff0c; PyCharm 相关就不叙述了&#xff0c;直接开始安装&#xff01; 安装 2024版本、2025年…

Linux(centos7)安装 docker + ollama+ deepseek-r1:7b + Open WebUI(内含一键安装脚本)

windows版本的 ollama &#xff1a;https://blog.csdn.net/YXWik/article/details/143871588 环境&#xff1a;centos7 文中各个脚本 1.docker安装 或者 需要重新安装&#xff1a; install_docker.sh 2.docker已安装只需要安装 ollama deepseek-r1:7b Open WebUI &#xff1…

深度解析:在Odoo 18中基于原生Owl框架为PWA定制功能丰富的底部导航栏

本文旨在提供一个从架构设计、核心功能实现到高级用户体验优化的全面指南&#xff0c;详细阐述如何在Odoo 18中&#xff0c;完全利用其原生的Owl前端框架&#xff0c;为渐进式网络应用&#xff08;PWA&#xff09;从零开始开发一个功能完备、数据驱动且高度可定制的底部导航栏。…

Java泛型初始化ArrayList<String>()和ArrayList<>()的区别

文章目录前言Java 泛型初始化&#xff1a;ArrayList<String>() vs ArrayList<>() 的区别1. 语法差异1.1 显式泛型初始化 (ArrayList<String>())1.2 钻石操作符初始化 (ArrayList<>())2. 编译与运行时的区别3. 使用场景对比3.1 显式泛型初始化的适用情况…

ubuntu25.04+4070+cuda+docker安装

目录 1.4070nvidia驱动安装 2.CUDA安装 3.docker安装 4.docker的GPU支持 1.4070nvidia驱动安装 首先从软件源获取最新的软件包信息&#xff0c;然后升级一下安装好的软件包 #从软件源获取最新的软件包信息 apt update -y #将已安装的软件包升级到最新版本 apt upgrade -y 然…

Mac m系列 VMware Fusion虚拟机安装ARM contos

一、下载虚拟机 VMware Fusion和 CentOS 安装 VMware Fusion下载地址下载好镜像文件CentOS-Stream-9-20230516.0-aarch64-boot.iso下载地址 二、打开VMware Fusion新建虚拟机 选择从光盘或映像中安装点击继 选择刚才下载的镜像&#xff0c;点击继续选择 Linux > 其他Linu…

MYSQL中NOT IN和NOT EXISTS

NOT IN 和 NOT EXISTS 是 MySQL 中用于排除某些数据的两种常见查询方式。它们的功能相似&#xff0c;都用于返回不满足某一条件的结果&#xff0c;但是它们在内部的实现方式以及某些特定场景下的行为有所不同。1. NOT INNOT IN 是用来排除在指定值集合中存在的值。通常用来与子…