使用EasyExcel根据模板导出文件

基于EasyExcel实现模板导出功能(含查数据库下拉,市州区县级联下拉) 基于EasyExcel实现模板导出功能(含下拉,市州区县级联下拉) 阅读详情

概要

在企业级应用开发中,Excel数据导出是一个常见的需求。本文实现一个基于阿里巴巴EasyExcel库实现的根据模板导出文件的工具类,它通过预定义的Excel模板来生成结构化的数据报表,提高了导出功能的开发效率和灵活性。

工具类核心功能

该ExportUtil工具类主要提供以下功能:

  1. 模板化导出:基于预定义的Excel模板填充数据
  2. 灵活数据支持:支持列表数据和离散对象数据的填充
  3. 自动响应设置:自动处理HTTP响应头,实现文件下载
  4. 异常处理:统一的异常处理机制,确保导出过程稳定性

核心代码解析

类结构与常量定义

@Slf4j
@Component
public class ExportUtil {
    public static final String TEMPLATE_ROOT_PATH = "template";
    public static final String EXCEL_POSTFIX = "." + CommonConst.EXCEL_TYPE_XLSX;
    // ...
}

使用Lombok注解简化日志管理。定义了模板根路径和Excel文件后缀常量(可自行定义)。

模板导出核心方法

public static void downloadExcelByTemplate(String templatePath, String fileName, 
                                         List<?> list, Object obj) {
    String templateFileName = TEMPLATE_ROOT_PATH + File.separator + templatePath;
    download(fileName + EXCEL_POSTFIX, outputStream -> {
        try (ExcelWriter excelWriter = EasyExcel.write(outputStream)
                .withTemplate(ExportUtil.class.getClassLoader()
                .getResourceAsStream(templateFileName)).build()) {
            WriteSheet writeSheet = EasyExcel.writerSheet().build();
            FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build();
            excelWriter.fill(list, fillConfig, writeSheet);
            excelWriter.fill(obj, fillConfig, writeSheet);
        } catch (Exception e) {
            log.error("Writing template failed:{}", e.getMessage());
            throw new BusinessException(BusinessExceptionEnum.EXPORT_FAILED);
        }
    });
}

该方法接收四个参数:

  1. templatePath: 模板文件路径
  2. fileName: 导出文件名(不含后缀)
  3. list: 列表数据(用于填充模板中的表格区域)
  4. obj: 离散数据(用于填充模板中的单个字段)

文件下载处理

public static void download(String fileName, Consumer<ServletOutputStream> write) {
    HttpServletResponse response = getHttpServletResponse(fileName);
    ServletOutputStream outputStream;
    try {
        outputStream = response.getOutputStream();
    } catch (IOException e) {
        log.error("Failed to read response and write stream:{}", e.getMessage());
        throw new BusinessException(BusinessExceptionEnum.EXPORT_FAILED);
    }
    write.accept(outputStream);
}

封装了文件下载的通用逻辑,接收一个文件名和一个用于写入输出流的Consumer函数式接口。

HTTP响应设置

@SneakyThrows
public static HttpServletResponse getHttpServletResponse(String fileName) {
    ServletRequestAttributes servletRequestAttributes = 
        (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
    if (servletRequestAttributes == null || servletRequestAttributes.getResponse() == null) {
        log.error("Unable to obtain HttpServletResponse.");
        throw new BusinessException(BusinessExceptionEnum.EXPORT_FAILED);
    }
    HttpServletResponse res = servletRequestAttributes.getResponse();
    res.setContentType("application/octet-stream; charset=" + StandardCharsets.UTF_8);
    res.setHeader("Content-disposition", "attachment;filename=" + 
        URLEncoder.encode(fileName, StandardCharsets.UTF_8) + ";" + 
        "filename*=utf-8''" + URLEncoder.encode(fileName, StandardCharsets.UTF_8));
    return res;
}

负责设置HTTP响应头,包括内容类型和内容处置头,确保浏览器正确处理文件下载。使用URLEncoder对文件名进行编码,解决中文文件名乱码问题。

文件下载处理

使用示例

1. 准备Excel模板

在resources/template目录下创建模板文件,例如user_template.xlsx。在模板中使用{}占位符表示离散数据,使用{.}表示列表数据。

2. 调用导出方法

// 准备数据
UserInfo userInfo = new UserInfo("张三", "技术部");
List<Order> orders = Arrays.asList(
    new Order("订单001", new Date(), 2999.0),
    new Order("订单002", new Date(), 3999.0)
);

// 执行导出
ExportUtil.downloadExcelByTemplate("user_template.xlsx", "用户订单", orders, userInfo);
使用easyexcel填充模板数据,并导出excel 阅读详情

相关推荐

easyexcel复杂模板导出(合并行列,列统计汇总)

easyexcel复杂模板导出

weixin_39172079的博客 1万+

EasyExcel根据自定义模板导出Excel(包含图片、表格)

提示:EasyExcel请使用 3.0 以上版本,我这里使用的是 3.0.2 版本:提示:我的需求是,前端页面有个 echarts 图,需要导出到excel,当然前端也可以直接导出图片;但是我是需要将图片插入到模板指定位置,模板中还有其他内容,所以需要前端先将图片传给我,后台再写入到模板中请点击这里。

ViperWhip的博客 1万+

【Java】- EasyExcel模板导出

根据自定义模板导出Excel,包含图片、表格,采用EasyExcel导出

用来当笔记本 1220

easyExcel - 根据模板文件导出

这个变量需要和你的实体类字段一致哈..别整差咯..直接上代码 复制粘贴即可。占位符为列表,则使用。{age} 一条数据。

边走、边悟、迟早变好 1724

EasyExcel 导出大文件

大文件导出

lierjun 的专栏 1416

easyExcel - 按模板导出

之前有介绍过如何使用easyExcel,以及写了两个入门的demo,这两个demo能应付在开发中大多数的导入和导出需求,不过有时候面对一些复杂的表格,就会有点不够用,该篇是如何使用模板实现导出功能在实际的开发过程中可能会遇到需要导出一些带有复杂表头的表格,比如:工资表和考勤表或者是类似于发票、报价单这种具有模板性质的表格如果仅仅通过代码去实现是比较困难的,通常情况下会写一个模板excel,模板中的需要变动的数据用占位符替代,导出的文件按照该模板填充数据easyexcel① 读取模板文件。

xhmico的博客 2万+

easyexcel根据模板导出Excel文件,表格自动填充问题

easyexcel根据模板导出Excel文件,表格自动填充问题

qq_38254635的博客 2420

基于LTspice的共模电感差模/共模插入损耗仿真指南

在电源与EMC设计领域,插入损耗是衡量滤波器件抑制噪声能力的核心指标。共模电感作为EMI滤波器中最常见的元器件之一,其差模与共模插入损耗特性直接影响整体滤波方案的合规性。然而,仅依赖规格书曲线往往难以覆盖真实应用中的阻抗条件,借助SPICE仿真工具进行电路级验证已成为工程师常用的手段。LTspice凭借其轻量、高效的交流分析能力,能够帮助设计者快速搭建共模电感等效模型,并通过调整耦合系数、寄生电容等参数,还原漏感与谐振行为。本文以Wurth Elektronik的WE 744821201型号为例,从基本测试

weixin_27252001的博客 293

EasyExcel根据项目模板导出Excel带公式的Excel文件

随着对需求的分析与理解,我觉得POI手动设置公式做的有点复杂了,我转换了公式的展现形式,开始不纠结与代码层面去展现公式了,于是我直接打起了Excel的公式的想法,于是我尝试了一下IF(ISBLANK(I5)," ",I6/SUM(D5:I5)*30),这种写法,直接判断需要填写的cell是否为空,为空则对应的计算也不存在直接显示空字符串,不为空,则使用计算公式,直接完美的以最小的代价解决了我的需求,问题就告一段落了。项目中有个功能是根据填写的数据,计算对应的值,前端已经实现了对应的计算公式。

weixin_43262857的博客 4835

别再死记硬背Payload了!深入理解Flask/Jinja2 SSTI的Python对象继承链与魔术方法

本文深入解析Flask/Jinja2 SSTI漏洞的底层原理,从Python对象模型出发,详细讲解如何通过魔术方法链实现RCE。文章揭示了Python对象继承链与魔术方法的精妙设计,提供了防御与绕过SSTI漏洞的实用技巧,帮助开发者深入理解漏洞本质并采取有效防护措施。

weixin_42525738的博客 356

Seurat3.0小提琴图腰围的参数

小提琴图没有有些群没有出现小提琴只有点点,是由于0值比例太多, 一个关键的参数scale = "width"导致了这种局面,应加上上述参数 ggplot(p$data,aes(ident,CD4)) + geom_violin(scale = "width", adjust =1, trim = TRUE) + geom_jitter()+ theme_bw() adjust参数可以调整腰的粗细,eg: ggplot(p$data,aes(ident,CD4)) + geom_violin(scale

Demomwu的博客 1661

使用EasyExcel 根据模板导出多个Sheet格式相同内容不同的文件

文件格式为:最后成型:循环多个会生成多个一样的结构,数据不一样的文件我们可以使用easyExcel 的模板填充写入数据使用poi复制多个Sheet模板。

呋喃的博客 6100

深度学习-155-RAG技术之嵌入模型Embedding怎么选

Embedding技术在大型语言模型中发挥着至关重要的作用。它将文本转化为向量,使模型能够理解和处理复杂的语言信息。通过选择合适的Embedding方法和优化文本匹配策略,我们可以在搜索引擎、问答系统、推荐系统等领域实现高效且精准的文本匹配。

qq_20466211的博客 405

easyexcel根据模板导出数据

已经无法满足正常列表数据的导出,该死的甲方爸爸出了新的需求,根据一个模板进行导出所勾选的数据去导出 准备工作 引入jar包依赖,坐标如下 <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>2.2.6</version> </dependency> excel模板文件示例 ex.

zhangzeshan 4733

5、硬件工程师笔试面试——上拉电阻、下拉电阻(2025版本)

本文系统介绍了上拉电阻和下拉电阻的原理与应用。上拉电阻通过连接电源确保电路高电平状态,常用于数字电路防抖、OC门驱动等场景;下拉电阻连接地线维持低电平,适用于低电平触发电路。文章详细分析了两种电阻的选择方法、功耗与响应速度的平衡策略,以及在高速信号传输中的影响差异。同时对比了二者的优缺点,并提供了模拟电路中的应用实例。最后给出了电阻值计算的工程方法,为硬件工程师的电路设计提供了实用参考。

XU157303764的博客 2868

199、影像技术 roadmap 规划:未来移动影像的技术趋势与芯片算力展望

本文探讨了未来移动影像技术的发展趋势与芯片算力规划。作者从实际案例出发,指出影像技术演进需平衡传感器、ISP、算力和功耗。文章分为三部分:1)传感器将从堆像素转向提升信息密度,重点关注双层晶体管结构、混合快门和多光谱技术;2)ISP架构将向可编程计算单元转型,强调神经网络加速、硬件化多帧融合和语义处理;3)芯片算力瓶颈在于数据搬运,需优化存算一体架构、专用DMA和统一内存。最后给出五点建议:避免盲目追高像素、重视持续功耗、平衡ISP灵活性、预留算力余量、加强传感器与ISP协同设计。作者强调,影像技术的突破在

sundong_81的博客 57

EasyExcel基于模板导出

【代码】EasyExcel基于模板导出。

Chuk 2211

宇树科技嵌入式面试题及参考答案(春晚机器人的公司)

内存对齐是指在内存中为数据对象分配存储空间时,按照一定的规则将数据存储在特定的地址上,以提高内存访问效率。不同的数据类型在内存中都有其特定的对齐要求,例如,int类型通常要求 4 字节对齐,double类型通常要求 8 字节对齐。这意味着数据的存储地址必须是其对齐字节数的整数倍。如果不进行内存对齐,处理器在访问数据时可能需要进行多次内存访问,从而降低了访问效率。指令可以用于控制结构体内存布局,它允许程序员指定结构体成员的对齐方式。其基本用法是在结构体定义之前使用来指定对齐字节数n,其中n。

大模型大数据攻城狮的专栏 3224

Java根据模板生成excel文件【Java】【EasyExcel】【xls】

Background 前两天客户反应对数据导出的文件格式不太满意,然后给了我们模板,让我们按照模板导出数据。于是一通修改(excel数据量有限制他们也不管,之前我们给的csv格式)。 Java操作excel常用的有poi和阿里开源的easyexcel两种方式,poi太麻烦了这里用的easyexcel。 根据模板生成文件还是比较简单的,因为我们不需要在代码中再设置各种格式、样式,模板设置好所有格式、样式以及占位符,只用写数据就行了,easyexcel使用个数据类非常方便。 1、简介 如下图所示,t

on the way . . . 1万+

计算机网络基础:认识网络硬件与传输介质

计算机网络基础:认识网络硬件与传输介质,在计算机网络的庞大体系中,网络硬件与传输介质犹如坚实的骨架与脉络,支撑并承载着信息的流动。从家庭中的小型网络,到企业复杂的办公网络,再到覆盖全球的互联网,各类网络硬件设备各司其职,不同的传输介质发挥着独特的传输作用。它们相互协作,使得数据能够在不同设备之间快速、准确地传输,为人们的日常沟通、工作办公、娱乐休闲等活动提供了基础保障。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 3万+

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

SpringBoot通过模板导出表格文件

@Operation(summary = "查询患者年龄分析导出") @PostMapping("/getPatientAgeAnalysis/export") public void getPatientAgeAnalysisExcel(@Valid @RequestBody Map<String, Object> map, HttpServletResponse response) throws IOException { PageResult<Map<String, Object>> object =

qq_67100468的博客 617

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

使用 eazyExcel 工具类二次封装实现根据实体类下载模板、导入数据和下载数据功能

在日常开发中,我们经常需要处理 Excel 文件,例如生成 Excel 模板、导入数据到 Excel 表格或者将数据从 Excel 表格中导出。为了简化这些操作,我们可以使用 EasyExcel 工具库进行封装,以提高开发效率。本文将介绍如何使用 EasyExcel 工具类进行二次封装,实现根据实体类下载模板、导入数据和下载数据的功能。

技术小白 1223

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

EasyExcel自定义多级表头导出

主要是封装好表头的list和数据的list。注意数据列的属性顺序和表头一致 package com.tgpms.web.common.controller; import com.alibaba.excel.EasyExcel; import com.alibaba.excel.write.metadata.style.WriteCellStyle; import com.alibaba.excel.write.style.HorizontalCellStyleStrategy; import com

江黎 5583

SpringBoot 整合Easyexcel,实现excel导出功能

最近在做业务报表,需要excel导出功能,就引进了easyexcel,直接上代码吧。

weixin_42682398的博客 632

SpringBoot集成阿里easyexcel(一)基础导入导出

easyexcel主要用于excel文件的读写,可使用model实体类来定义文件读写的模板,对开发人员来说实现简单Excel文件的读写很便捷。可参考官方文档。

是木子啦~ 518

Java使用EsayExcel导出模板,涉及多个sheet

java使用EasyExcel根据模板导出

qq_43457781的博客 1003
上一篇: SpringBoot整合Camunda工作流
下一篇: SpringBoot项目使用Liquibase 数据库版本管理
刘火锅
博客等级 码龄7年 121粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值