当前位置: 首页 > news >正文

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

文章目录

  • 第一步、引入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";// 导出woldtry {// 导出Word文档为文件WordUtil.exportWord(templatePath, fileName, params,response);// 将导出的Word文件转换为流} catch (Exception e) {System.out.println("导出Word文档时出现异常:" + e.getMessage());}}

5.导出结果示例

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 我被手机所伤,竟如此憔悴。
  • 假期笔记1:anaconda的安装与pycharm中的引用
  • Linux 程序卡死的特殊处理
  • 进度条提示-在python程序中使用避免我误以为挂掉了
  • 微服务的分布式事务解决方案
  • Linux 初识
  • 通过Arcgis从逐月平均气温数据中提取并计算年平均气温
  • springboot 操作mongo
  • 云计算渲染时代:选择Blender或KeyShot进行高效渲染
  • 第一关:Linux基础知识
  • easy-poi实现动态列(标题)、多sheet导出excel
  • 爬虫:Sentry-Span参数逆向
  • mysql数据库被偷家,数据全部丢失。还勒索我给他比特币
  • vue extend的作用和使用方法
  • vue3 + tsx 表格 Action 单独封装组件用法
  • 【剑指offer】让抽象问题具体化
  • DataBase in Android
  • JS专题之继承
  • Linux各目录及每个目录的详细介绍
  • SSH 免密登录
  • thinkphp5.1 easywechat4 微信第三方开放平台
  • V4L2视频输入框架概述
  • 如何编写一个可升级的智能合约
  • 通过几道题目学习二叉搜索树
  • 我看到的前端
  • 小程序开发之路(一)
  • 移动端 h5开发相关内容总结(三)
  • 职业生涯 一个六年开发经验的女程序员的心声。
  • 【云吞铺子】性能抖动剖析(二)
  • CMake 入门1/5:基于阿里云 ECS搭建体验环境
  • postgresql行列转换函数
  • 小白应该如何快速入门阿里云服务器,新手使用ECS的方法 ...
  • # .NET Framework中使用命名管道进行进程间通信
  • # Swust 12th acm 邀请赛# [ K ] 三角形判定 [题解]
  • #微信小程序:微信小程序常见的配置传旨
  • #我与Java虚拟机的故事#连载02:“小蓝”陪伴的日日夜夜
  • $.each()与$(selector).each()
  • $con= MySQL有关填空题_2015年计算机二级考试《MySQL》提高练习题(10)
  • $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
  • (1)STL算法之遍历容器
  • (10)ATF MMU转换表
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (2024最新)CentOS 7上在线安装MySQL 5.7|喂饭级教程
  • (C语言)fgets与fputs函数详解
  • (k8s)Kubernetes 从0到1容器编排之旅
  • (ZT)薛涌:谈贫说富
  • (代码示例)使用setTimeout来延迟加载JS脚本文件
  • (二)斐波那契Fabonacci函数
  • (二十一)devops持续集成开发——使用jenkins的Docker Pipeline插件完成docker项目的pipeline流水线发布
  • (附源码)springboot助农电商系统 毕业设计 081919
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (三分钟)速览传统边缘检测算子
  • (实测可用)(3)Git的使用——RT Thread Stdio添加的软件包,github与gitee冲突造成无法上传文件到gitee
  • (实战)静默dbca安装创建数据库 --参数说明+举例
  • (转)ABI是什么