java使用easypoi模版导出word详细步骤

news2025/2/26 15:02:37

文章目录

  • 第一步、引入pom依赖
  • 第二步、新建导出工具类WordUtil
  • 第三步、创建模版word
  • 4.编写接口代码
  • 5.导出结果示例

第一步、引入pom依赖

<dependency>
     <groupId>cn.afterturn</groupId>
     <artifactId>easypoi-spring-boot-starter</artifactId>
     <version>4.4.0</version>
</dependency>

第二步、新建导出工具类WordUtil


import cn.afterturn.easypoi.word.WordExportUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.springframework.stereotype.Component;
import org.springframework.util.Assert;

import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLEncoder;
import java.util.Map;

@Component
@Slf4j
public class WordUtil {

    /**
     * 导出word
     * 模版变量中变量格式:{{a}}
     *
     * @param templatePath word模板地址
     * @param fileName     文件名
     * @param params       替换的参数
     * @param response     响应头
     * 
     */
    public static void exportWord(String templatePath, String fileName, Map<String, Object> params, HttpServletResponse response) {
        Assert.notNull(templatePath, "模板路径不能为空");
        Assert.notNull(fileName, "导出文件名不能为空");
        Assert.isTrue(fileName.endsWith(".docx"), "word导出请使用docx格式");

        try {
            XWPFDocument doc = WordExportUtil.exportWord07(templatePath, params);
            //设置响应体内容类型
            response.setContentType("application/octet-stream");
            //添加响应头
            response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
            //暴露新添加的响应头
            response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");
            //将word文档流输出到输出流中
            doc.write(response.getOutputStream());
            //关闭流
            doc.close();
        } catch (Exception e) {
            log.error("exportWord方法出现问题", e);
            e.printStackTrace();
        }
    }

}

第三步、创建模版word

在静态资源目录下resources/static/templates新建exportWord.docx,编写以下模版内容:
在这里插入图片描述

4.编写接口代码

    @GetMapping("/exportWord")
    public void exportWord(HttpServletResponse response) throws FileNotFoundException {
        //存放数据,也就是填充在word里面的值
        Map<String, Object> params = new HashMap<>();
        params.put("ceshi","测试使用easypoi模版导出word");
        params.put("name","张三");
        params.put("text","知之为知之不知为不知");

        //模板路径
        // String templatePath = "E:\\demo\\word.docx";
        // 或模板在静态资源的相对路径
        File rootFile = new File((ResourceUtils.getURL("classpath:").getPath()));
        File templateFile = new File(rootFile, "/static/templates/exportWord.docx");
        //jar包获取不到文件路径
        //URLDecoder.decode() 解决获取中文名称文件路径乱码
        String templatePath = URLDecoder.decode(templateFile.getPath());
        //生成文件名
        String fileName = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + "_" + System.currentTimeMillis() + ".docx";
        // 导出wold
        try {
            // 导出Word文档为文件
           WordUtil.exportWord(templatePath, fileName, params,response);
            // 将导出的Word文件转换为流
        } catch (Exception e) {
            System.out.println("导出Word文档时出现异常:" + e.getMessage());
        }
    }

5.导出结果示例

通过浏览器访问接口:http://localhost:8080//exportWord,导出word内容如下
在这里插入图片描述

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

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

相关文章

旗晟智能巡检机器人:开启工业运维的智能化新篇章

在当今快速发展的工业领域&#xff0c;安全、效率和成本控制是企业运营的核心。旗晟科技以创新为驱动&#xff0c;推出了一站式的工业级智能巡检机器人数字化全景运维解决方案&#xff0c;为石油、天然气、化工、电力等高危行业提供了一个全新的运维模式。 一、面对挑战&#x…

在 Linux 上设置 RAID 阵列的全面指南

引言 在这篇博文中&#xff0c;我们将深入探讨如何在 Linux 上设置 RAID 阵列。本文将涵盖 RAID 的定义、架构、原理、应用场景、常见命令体系&#xff0c;并通过详细的实战模拟展示如何在 Linux 系统上实际操作。希望通过这篇文章&#xff0c;您能深入理解 RAID 技术&#xff…

初识C++ | 基本介绍、命名空间、输入输出、缺省函数、函数重载、引用、内联函数、nullptr

基本介绍 C的起源 1979年&#xff0c;当时的 Bjarne Stroustrup 正在⻉尔实验室从事计算机科学和软件⼯程的研究⼯作。⾯对项⽬中复杂的软件开 发任务&#xff0c;特别是模拟和操作系统的开发⼯作&#xff0c;他感受到了现有语⾔&#xff08;如C语⾔&#xff09;在表达能⼒、可…

获取网页logo图标

怎么获取网页logo图标的URL链接 第一种方法&#xff1a; 最常用的方法&#xff08;适用于90%的站点&#xff09;是&#xff0c;直接在访问网址首页链接后加上上/favicon.ico&#xff0c;例如&#xff1a; https://www.baidu.com/favicon.ico 第二种方法&#xff1a; 按F12&…

Photoshop套索工具使用指南:解锁自由选区的艺术

在Adobe Photoshop的强大工具箱中&#xff0c;套索工具组是每位图像处理爱好者与专业人士的得力助手。这组工具&#xff0c;包括套索工具、多边形套索工具和磁性套索工具&#xff0c;为用户提供了高度灵活的选择区域方式&#xff0c;无论是处理复杂的图像边缘还是进行精细的抠图…

Flexcel学习笔记

1.引用的单元 FlexCel.Core 始终需要使用的一个单元。 多系统运行时。{$IFDEF LINUX}SKIA.FlexCel.Core{$ELSE}{$IFDEF FIREMONKEY}FMX.FlexCel.Core{ $ELSE}VCL.FlexCel.Core{$ENDIF}{$ENDIF} FlexCel.XlsAdapter这是FlexCel的xls/x引擎。如果您正在处理xls或xlsx文件&#x…

Centos7 新增yum源

背景&#xff1a;原来的yum源&#xff0c;无法下载yum包了。新增一个阿里云的&#xff08;网易163的源失效了&#xff0c;无法使用&#xff09; Could not retrieve mirrorlist http://mirrorlist.centos.org/?release7&archx86_64&repoos&infrastock error was …

PyCharm 2023.3.2 关闭时一直显示正在关闭项目

文章目录 一、问题描述二、问题原因三、解决方法 一、问题描述 PyCharm 2023.3.2 关闭时一直显示正在关闭项目 二、问题原因 因为PyCharm还没有加载完索引导致的 三、解决方法 方法一&#xff1a; 先使用任务管理器强制关闭&#xff0c;下次关闭时注意要等待PyCharm加载完索…

AI软件测试工程师需要学习什么,怎么学习

对于已经从事软件测试工作的人来说真是需要补充的是以下部分的内容 1.AI概念和原理:了解人工智能的基本概念、发展历史、应用领域等 对应内容 https://cloud.baidu.com/article/31805742.机器学习基础知识:学习机器学习的基本概念、算法和框架&#xff0c;如线性回归、迈辑回归…

第一次参加数学建模竞赛新手小白备赛经验贴

2024年暑假已经来临&#xff0c;下半年的数学建模竞赛非常多&#xff0c;许多同学可能是第一次参赛&#xff0c;对于如何准备感到迷茫和无从下手。在这种情况下&#xff0c;我们将分享一些备赛的小技巧&#xff0c;帮助大家在这个暑假更好的入门&#xff0c;即便是零基础的小白…

计算机视觉之ShuffleNet图像分类

前言 ShuffleNetV1是一种计算高效的CNN模型&#xff0c;旨在在移动端利用有限的计算资源达到最佳的模型精度。其设计核心是引入了Pointwise Group Convolution和Channel Shuffle两种操作&#xff0c;以降低模型的计算量并保持精度。与MobileNet类似&#xff0c;ShuffleNetV1通…

【Docker系列】Docker 镜像源:优化你的容器化开发流程

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

第18章 概率潜在语义分析:课后习题

本章概要&#xff1a; 1.概率潜在语义分析是利用概率生成模型对文本集合进行话题分析的方法。概率潜在语义分析受潜在语义分析的启发提出两者可以通过矩阵分解关联起来。 给定一个文本集合&#xff0c;通过概率潜在语义分析&#xff0c;可以得到各个文本生成话题的条件概率分布…

WebDriver与浏览器通信的深度剖析与探索

在自动化测试的世界里&#xff0c;WebDriver无疑是连接测试脚本与浏览器之间的桥梁&#xff0c;它让复杂的自动化测试成为可能。本文将深入探讨WebDriver与浏览器之间的通信机制&#xff0c;揭示它们之间如何协同工作&#xff0c;以及这一过程中涉及的关键技术和挑战。 一、We…

2493-04A-6 同轴连接器

型号简介 2493-04A-6是Southwest Microwave的连接器。该连接器是一种端子连接器&#xff0c;采用 1.0 毫米插头&#xff08;公头&#xff09;进行连接。它由多个部件组成&#xff0c;包括过渡块、接地板、螺纹夹紧板、发射针、冷板、底座、电路板和外壳等。 型号特点 外壳&…

stm32——AD采集以及DMA

今天继续我们的STM32的内容学习&#xff0c;我使用的单片机是STM32F103VCT6,通过Keil Array Visualization软件来观测AD采样出来的波形。先来看看本次实验用到的硬件知识。 首先是ADC&#xff08;Analog-to-Digital Converter&#xff09;是模拟信号转数字信号的关键组件&#…

[Linux]五种IO模型(图文讲解+故事讲解)

目录 一、对IO的理解&#xff1a;等拷贝 等 拷贝 二、五种IO模型&#xff08;解释其概念&#xff09; 1.阻塞IO 2.非阻塞IO 3.信号驱动IO 4.IO多路复用 5.异步IO IO速度比较 三、一个故事让你了解五种IO模型 四、同步VS异步 阻塞VS非阻塞 同步VS异步 阻塞VS非阻…

常用录屏软件,分享这四款宝藏软件!

在数字化时代&#xff0c;录屏软件已经成为我们日常工作、学习和娱乐中不可或缺的工具。无论你是需要录制教学视频、游戏过程&#xff0c;还是进行产品演示&#xff0c;一款高效、易用的录屏软件都能让你的工作事半功倍。今天&#xff0c;就为大家揭秘四款宝藏级录屏软件&#…

深度|不同数据系统中的“一致性”(Consistency)含义的区别

“你们的系统能实现强一致性吗&#xff1f;”作为过去几年一直在开发流处理系统的从业者&#xff0c;我经常被问到这个问题。我时常想自信地推销我们的产品&#xff0c;但现实情况是&#xff0c;回答这个问题并不简单。其中的挑战并不在于问题本身&#xff0c;而在于 “一致性”…

【芯片方案】珠宝手机秤方案

珠宝手机秤作为一种便携式电子称重设备&#xff0c;因其小巧、便携、精度高等特点&#xff0c;广泛应用于各种需要精确称重的场景。可能这个目前在国内使用的人比较少&#xff0c;但在西方国家珠宝手机秤却是可以用来送礼的物品。因为珠宝手机秤的外观跟手机外观大多相似&#…