easyexcel根据模板下载文件

为什么要使用EasyExcel

easyExcel是阿里巴巴下在POI的基础上二次开发的开源api,以使用简单、节省内存著称。
POI由于在操作excel时是先将所有数据都读入内存后,再写入文件,比较消耗内存,特别是大数据量时,容易出现OOM
EasyExcel 能大大减少占用内存的主要原因是在解析 Excel 时没有将文件数据一次性全部加载到内存中,而是从磁盘上一行行读取数据,逐个解析
而使用EasyExcel进行导出Excel时候,可以根据模板进行生成Excel,具体操作如下
maven依赖:

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

注意easyexcel2.2.4版本的依赖包含poi的3.1.7版本的依赖

最终下载的Excel文件效果:
最终效果

1.根据要生成的文件格式创建模板文件,放到resource目录下

模板文件

resource文件

2.创建对应数据实体类,注意字段排序要和标题头排列顺序一致

package cn.test.user.excel;import com.alibaba.excel.annotation.format.DateTimeFormat;
import com.alibaba.excel.annotation.format.NumberFormat;
import com.alibaba.excel.annotation.write.style.ContentFontStyle;
import com.alibaba.excel.annotation.write.style.ContentRowHeight;
import com.alibaba.excel.annotation.write.style.ContentStyle;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.VerticalAlignment;import java.math.BigDecimal;
import java.util.Date;/*** @Author mark* @CreateTime: 2023-12-12  14:59*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@ContentRowHeight(value = (short)13.5)
@ContentFontStyle(fontName = "宋体",fontHeightInPoints = 11)
public class TransactionDto {/*** 付款单号*/@ContentStyle(horizontalAlignment = HorizontalAlignment.LEFT,verticalAlignment = VerticalAlignment.CENTER,wrapped = true)private String paymentId;/*** 交易状态*/@ContentStyle(horizontalAlignment = HorizontalAlignment.LEFT,verticalAlignment = VerticalAlignment.CENTER,wrapped = true)@ContentFontStyle(color = 10,fontHeightInPoints = 11)//红色private String tranState;/*** 交易金额*/@ContentStyle(horizontalAlignment = HorizontalAlignment.RIGHT,verticalAlignment = VerticalAlignment.CENTER,wrapped = true)@NumberFormat("###,###,##0.00")private BigDecimal transAmt;/*** 交易时间*/@ContentStyle(horizontalAlignment = HorizontalAlignment.LEFT,verticalAlignment = VerticalAlignment.CENTER,wrapped = true)@DateTimeFormat("yyyy-MM-dd HH:mm:ss")private Date transDate;
}

3.编写下载excel代码

package cn.test.user.excel;import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.support.ExcelTypeEnum;
import com.sun.deploy.net.URLEncoder;import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;/*** @Author mark* @CreateTime: 2023-12-12  15:06*/
public class DownloadExcel {public static void main(String[] args) {}public static void downExcel(HttpServletResponse response){//构造数据ArrayList<TransactionDto> list = new ArrayList<>();list.add(new TransactionDto("FX202311051000001", "交易成功", new BigDecimal(12202.15), new Date()));list.add(new TransactionDto("FX202311051000002", "交易失败", new BigDecimal(156.15), new Date()));list.add(new TransactionDto("FX202311051000003", "处理中", new BigDecimal(212202.15), new Date()));list.add(new TransactionDto("FX202311051000004", "交易成功", new BigDecimal(1889.15), new Date()));list.add(new TransactionDto("FX202311051000005", "交易成功", new BigDecimal(65.15), new Date()));//获取模板文件InputStream inputStream = null;try {inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("template/交易信息下载模板.xlsx");} catch (Exception e) {//读取模板文件失败}//根据模板生成excel文件try {response.setHeader("Connection","keep-alive");response.addHeader("Content-Type","application/octet-stream;charset=utf-8");response.addHeader("Content-Disposition","attachment:filename="+ URLEncoder.encode("交易信息下载.xlsx","utf-8"));EasyExcel.write(response.getOutputStream(), TransactionDto.class).autoCloseStream(true).withTemplate(inputStream).excelType(ExcelTypeEnum.XLSX)//excel格式.needHead(false).sheet("交易信息").doWrite(list);} catch (Exception e) {//出错}}
}

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

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

相关文章

(分页模拟)简单模拟操作系统分页管理

简单模拟一下内存分页&#xff0c;分配和回收。这里我就用最最最简化的方式没有技术含量。 每个进程维护一张页表&#xff0c;然后操作系统用位示图模拟内存分配情况(0: 未分配&#xff0c;1已经分配) import java.util.*;public class Main {public static int PAGE_COUNT …

Weblogic 数据库连接池溢出解决方法

引言 在信息运维工作中发现&#xff0c;由于部分应用系统编写的代码不够健壮&#xff0c;对于数据库连接没有及时进行回收处理&#xff0c;造成Weblogic数据库连接池溢出&#xff0c;影响系统的稳定运行。其实Weblogic提供了数据库连接的回收机制&#xff0c;可以将超过配置时…

基于redisson实现发布订阅(多服务间用避坑)

前言 今天要分享的是基于Redisson实现信息发布与订阅&#xff08;以前分享过直接基于redis的实现&#xff09;&#xff0c;如果你是在多服务间基于redisson做信息传递&#xff0c;并且有服务压根就收不到信息&#xff0c;那你一定要看完。 今天其实重点是避坑&#xff0…

【华为数据之道学习笔记】3-9以特征提取为核心的非结构化数据管理

随着业务对大数据分析的需求日益增长&#xff0c;非结构化数据的管理逐 渐成为数据管理的重要组成部分。非结构化数据包括无格式文本、各类格式文档、图像、音频、视频等多种异构的格式文件&#xff0c;较之结构化数据&#xff0c;其更难标准化和理解&#xff0c;因此在存储、检…

第二证券:结构性行情或将延续 泛科技有望继续走强

展望未来&#xff0c;当时已进入重要的方针窗口期&#xff0c;能否有超预期的新方针推出是改变商场的要害。但复盘2023年的行情来看&#xff0c;过早买卖方针预期的成功率并不高&#xff0c;因而主张该方位以防御性资产为主&#xff0c;高股息资产从本年9月份至今现已调整了2个…

MMdetection3.0 训练DETR问题分析

MMdetection3.0 训练DETR问题分析 针对在MMdetection3.0框架下训练DETR模型&#xff0c;验证集AP值一直为0.000的原因作出如下分析并得出结论。 条件&#xff1a; 1、NWPU-VHR-10数据集&#xff1a;共650张&#xff0c;训练&#xff1a;验证611&#xff1a;39&#xff1b; 2、…

K8S学习指南(11)-k8s中配置pod的服务质量(QOS)

文章目录 前言什么是服务质量&#xff08;QoS&#xff09;&#xff1f;如何配置服务质量&#xff1f;CPU资源配置示例 内存资源配置示例 服务质量等级的判断服务质量的最佳实践结论 前言 Kubernetes&#xff08;简称K8s&#xff09;是一种开源的容器编排平台&#xff0c;用于简…

Linux vmstat命令:监控系统资源

vmstat命令&#xff0c;是 Virtual Meomory Statistics&#xff08;虚拟内存统计&#xff09;的缩写&#xff0c;可用来监控 CPU 使用、进程状态、内存使用、虚拟内存使用、硬盘输入/输出状态等信息。此命令的基本格式有如下 2 种&#xff1a; [rootlocalhost ~]# vmstat [-a…

FFmpeg-基础组件-AVFrame

本章主要介绍FFmpeg基础组件AVFrame. 文章目录 1.结构体成员2.成员函数AVFrame Host内存的获取 av_frame_get_bufferAVFrame device内存获取av_hwframe_get_buffer&#xff08;&#xff09; 1.结构体成员 我们把所有的代码先粘贴上来&#xff0c;在后边一个一个解释。 typede…

SpringBoot中实现跨域的几种常用方式

在SpringBoot中实现跨域请求可以通过以下几种方式&#xff1a; 1. 使用CrossOrigin注解&#xff0c;可以直接在Controller层的方法上使用&#xff0c;用来指定允许跨域请求的来源、方法和头信息。例如&#xff1a; CrossOrigin(origins "http://localhost:8080") …

[MySQL]SQL优化之sql语句优化

&#x1f308;键盘敲烂&#xff0c;年薪30万&#x1f308; 目录 一、索引优化 回顾&#xff1a; &#x1f4d5;索引分类&#xff1a; &#x1f4d5;索引失效&#xff1a; &#x1f4d5;设计原则&#xff1a; &#x1f4d5;SQL性能分析 二、SQL优化 语句优化 &#x1f4d…

越南语翻译,人工翻译哪个值得信赖?

近年来&#xff0c;随着中越两国的交流日益频繁&#xff0c;为了促进双方的交流与理解&#xff0c;市场上对越南语翻译的需求也日益增加。那么&#xff0c;如何做好越南语翻译&#xff0c;人工翻译哪家公司值得信赖呢&#xff1f; 据了解&#xff0c;中文翻译越南语是一项颇具挑…

科技与艺术相结合,虚拟人裸眼3D动画亮相城市商圈

随着元宇宙概念的火爆&#xff0c;虚拟制作技术的快速发展&#xff0c;虚拟人可以将虚拟世界与现实世界相结合&#xff0c;为用户带来沉浸式体验。如虚拟人壬子希以裸眼3D动画的形式亮相城市商圈&#xff0c;助力文旅以科技与艺术相结合的形式&#xff0c;展现城市文化与科技成…

从运维角度去了解redis

一、介绍 1.简介 redis是一个开源的、使用C语言编写的、可基于内存也可持久化的Key-Value数据库&#xff0c;采用单线程基于epoll模型实现IO多路复用非阻塞的处理模式。 2.特点 1.丰富的数据结构 -----Redis支持五种数据类型&#xff1a;string&#xff08;字符串&#xf…

【数据结构(九)】顺序存储二叉树(2)

文章目录 1. 相关概念2. 顺序存储二叉树的遍历 1. 相关概念 从数据存储来看&#xff0c;数组存储方式和树的存储方式可以相互转换&#xff0c;即数组可以转换成树&#xff0c;树也可以转换成数组&#xff0c;看右面的示意图。 转换原则:     1.上图的二叉树的结点&#xff…

项目包管理工具_poetry

1 介绍 Poetry 是一个用于 Python 项目的包管理工具&#xff0c;它相对于传统的 pip 和 requirements.txt 的优势在于&#xff1a;使得项目依赖管理更加方便&#xff0c;且结合了更多新工具&#xff0c;还提供命令行进一步配置。 当在同一系统或在同一个 docker 中&#xff0…

Java对List<Map>进行合并去重

对List进行合并去重&#xff0c;首先创建一个新的 List 用于存储合并去重后的结果&#xff0c;遍历原始的 List&#xff0c;将每个 Map 对象中的键值对放入一个 Set 中进行去重&#xff0c;最后将去重后的键值对重新组装成一个新的 Map 对象&#xff0c;并添加到新的 List 中。…

每日一练【长度最小的子数组】

一、题目描述 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 连续子数组 [numsl, numsl1, ..., numsr-1, numsr] &#xff0c;并返回其长度。如果不存在符合条件的子数组&#xff0c;返回 0 。 二、题目解析 经…

DeepDrive双转子径向磁通电机

DeepDrive公司开发的是一种高效、高性能、低成本的双转子径向磁通电机系统&#xff08;含控制器&#xff09;。该系统具有较高的成本效益和资源效率&#xff0c;并拥有更高的能效&#xff0c;能显著提升电动车续航能力&#xff0c;同时亦能有效控制生产成本&#xff0c;减少自然…

3_流量预测综述阅读_Cellular traffic prediction with machine learning: A survey

为了方便学习英语书写&#xff0c;总结的一些话用英语书写 ♥目录♥ 0、文献来源and摘要1、introduction2、prediction problems and datasets2.1 prediction problems2.2 dataset&#xff08;1&#xff09;Telecom Italia 意大利电信 2015&#xff08;2&#xff09;City Cell…