Java使用spire进行word文档的替换

news/2024/11/7 6:43:22/

前言

今天遇到一个需求,需要对word模板进行替换制定的变量

在网上找了很多方案,做了很多的demo,下面就把我觉得比较简单的一种分享给大家

本次的主角是:spire.doc

spire.doc是专门实现对word的操作(包括文字,表格,图片)

spire.doc介绍

Spire.Doc for .NET 是一款专门对 Word 文档进行操作的 .NET类库。这款控件的主要功能在于帮助开发人员轻松快捷高效地创建、编辑、转换和打印 Microsoft Word 文档。作为一款独立的 Word .NET 控件,Spire.Doc for .NET 的运行系统(服务器端或客户端)均无需安装 Microsoft Word,但是它却可以将 Microsoft Word 文档的操作功能集成到任何开发人员的 .NET 应用程序中。

Spire.Doc for .NET 能执行多种 Microsoft Word 文档处理任务的 .NET API。支持 Word97-2003,Word2007,Word2010 以及 Word2013。能在 Word 97/2003/2007/2010/2013 和 XML、RTF、TXT、XPS、EPUB、EMF、HTML、ODT 等格式文件之间进行双向转换,还能将 Word 文件高质量地转换为 PDF 和 SVG 文件格式。

具体使用可以参考文档: Spire.Doc for .NET 中文教程

前提准备

准备word模板

准备一个word文件,里面简单写点模板:

在这里插入图片描述

引入spire.do依赖

spire.doc比较小众,因此需要在pom.xml中导入spire.doc的仓库,导入之后直接导包,如果不配置仓库直接下载依赖是不行的!

	  <dependency><groupId>e-iceblue</groupId><artifactId>spire.doc.free</artifactId><version>3.9.0</version></dependency><repositories><repository><id>com.e-iceblue</id><url>http://repo.e-iceblue.cn/repository/maven-public/</url></repository></repositories>

案例演示

前提工作准备好之后,就可以开始编写demo了

单个内容替换

短短的三行代码,就完成了读取,替换,保存的功能:

package com.test;import com.spire.doc.Document;
import com.spire.doc.FileFormat;/*** @description: 替换word文档中的变量* @author: 魏一鹤* @createDate: 2023-01-08 10:51**/public class FileTest3 {public static void main(String[] args) {//加载Word文档Document document = new Document("C:\\Users\\PC\\Desktop\\test.docx");//使用新文本替换文档中的指定文本document.replace("${name}", "张三丰", false, true);//保存文档document.saveToFile("C:\\Users\\PC\\Desktop\\test2.docx", FileFormat.Docx_2013);}
}

在这里插入图片描述

这时候打开桌面生成的文件查看,${name}的变量以及被替换掉了

在这里插入图片描述

但是这只是单独替换一个变量,一般一个模板里面是会有很多的变量的,这事我们需要支持批量替换变量

批量内容替换

想要实现批量内容替换,其实也很简单,还是拿上面举例的模板进行操作:

方式1

笨点的方式:既然我们使用的是document.replace进行替换,那么模板里面有多少个变量,我们就写多少个document.replac即可:

package com.test;import com.spire.doc.Document;
import com.spire.doc.FileFormat;/*** @description: 替换word文档中的变量* @author: 魏一鹤* @createDate: 2023-01-08 10:51**/public class FileTest3 {public static void main(String[] args) {//加载Word文档Document document = new Document("C:\\Users\\PC\\Desktop\\test.docx");//使用新文本替换文档中的指定文本document.replace("${name}", "张三丰", false, true);document.replace("${age}", "18", false, true);document.replace("${sex}", "男", false, true);//保存文档document.saveToFile("C:\\Users\\PC\\Desktop\\test2.docx", FileFormat.Docx_2013);}
}

在这里插入图片描述

虽然笨,但是可行:

在这里插入图片描述

方式2

虽然上面的方式可行,但是维护起来比较麻烦,这时候我们可以采取这种方式:

声明一个map,把一组组的key和value进行保存,key就是变量, value就是模板值,然后循环map进行替换,这样不管多少个变量,我们都只需要在map里配置即可

在这里插入图片描述

package com.test;import com.spire.doc.Document;
import com.spire.doc.FileFormat;import java.util.HashMap;
import java.util.Set;/*** @description: 替换word文档中的变量* @author: 魏一鹤* @createDate: 2023-01-08 10:51**/public class FileTest3 {public static void main(String[] args) {//加载Word文档Document document = new Document("C:\\Users\\PC\\Desktop\\test.docx");//模板变量mapHashMap<String, Object> paramsMap = new HashMap<>();// 填充key和vaulue key=模板变量,value=替换后的值paramsMap.put("${name}","张三丰");paramsMap.put("${age}","18");paramsMap.put("${sex}","男");// 循环keyfor(String key:paramsMap.keySet()){// 根据key得到valueString value = paramsMap.get(key).toString();//使用新文本替换文档中的指定文本 也就是value替换keydocument.replace(key, value, false, true);}//保存文档document.saveToFile("C:\\Users\\PC\\Desktop\\test3.docx", FileFormat.Docx_2013);}
}

再次运行代码,文档里面的变量以及全部完成了替换。

在这里插入图片描述

总结

能够实现这样的例子很多,我个人也花了两天试了很多的demo,包括Apache下的poi的XWPFDocument,Java File文件流等,经过大量的常识,我个人更倾向于这种方式,不仅代码量少,而且spire本身就是支持对于word文档操作的,功能更多且强大。所以在次推荐给大家

另外,我也收藏了一些其他博主写的相关功能的问题,个人觉得也不错,在次推荐给大家,希望对大家有用!

Java实现替换Word中文本

Java File文件流读取文件夹内的文件并替换文件内容

XWPFDocument导出Word文档简单操作


http://www.ppmy.cn/news/10360.html

相关文章

QT 学习笔记(十四)

文章目录一、TCP/IP 通信过程简介1. Socket 通信2. Linux 下的 TCP/IP 通信过程3. QT 下的 TCP/IP 通信过程3.1 在 QT 中实现 TCP/IP 服务器端通信的流程3.2 在 QT 中实现 TCP/IP 客户端通信的流程二、TCP/IP 通信过程操作实现1. 服务器端2. 客户端三、服务器端和客户端实现代码…

智公网:这几类人员报考公务员无法被录取

对于很多人来讲&#xff0c;毕业之后都想找一份稳定的工作&#xff0c;目前最受欢迎的就是公务员和教师编了&#xff0c;我们今天来说下公务员这个铁饭碗。 公务员考试可是很不容易的&#xff0c;有两场考试&#xff0c;第一场是笔试&#xff0c;第二场是面试。笔试通过之后才…

GPS北斗卫星同步时钟(NTP时间服务器)助力某局指挥中心

GPS北斗卫星同步时钟&#xff08;NTP时间服务器&#xff09;助力某局指挥中心 GPS北斗卫星同步时钟&#xff08;NTP时间服务器&#xff09;助力某局指挥中心 以大数据为核心的数据服务层&#xff0c;围绕各警种业务需求&#xff0c;实现时空关联、综合研判、立体防控等各类实战…

位运算做加法,桶排序找消失元素,名次与真假表示,杨氏矩阵,字符串左旋(外加两道智力题)

Tips 1. 2. 3. 大小端字节序存储这种顺序只有在放进去暂时存储的时候是这样的&#xff0c;但是一旦我里面的数据需要参与什么运算之类的&#xff0c;会“拿出来”先恢复到原先的位置再参与运算&#xff0c;因此&#xff0c;大小端字节序存储的什么顺序不影响移位运算等等…

基于融合SPD+BIFPN+CBAM改进YOLOv5的奶牛检测识别分析系统开发

在我之前的几篇文章中分别应用了不同的tricks来改进yolov5模型如下&#xff1a;加入针对小目标的SPD-Conv模块《yolov5s融合SPD-Conv用于提升小目标和低分辨率图像检测性能实践五子棋检测识别》加入BIFPN特征融合模块《基于yolov5sbifpn实践隧道裂缝裂痕检测》加入注意力机制模…

Go第 12 章 :1-家庭收支记账软件项目

Go第 12 章 &#xff1a;1-家庭收支记账软件项目 12.1 项目开发流程说明 12.2 项目需求说明 模拟实现基于文本界面的《家庭记账软件》该软件能够记录家庭的收入、支出&#xff0c;并能够打印收支明细表 12.3 项目的界面 12.4 项目代码实现 12.4.1 实现基本功能(先使用面向过…

声学特征提取普及笔记

声学特征如何提取? 一、声学特征预处理 首先进行预处理,就是我们最后要提取一帧一帧的这种声学特征,这个语音信号经过预处理然后提取特征,那么特征也有用原始的傅里叶变换,STFT短时傅里叶变换得到这个语谱图特征,也有用FBANK就没有滤波器的输出,还有用MFCC。预处理包括…

Java--经典五道练习题(较难)

文章目录 一、转换罗马数字 二、调整字符串 三、键盘输入任意字符串&#xff0c;打乱里面的内容 四、生成验证码 五、返回两数乘积 一、转换罗马数字 键盘录入一个字符串&#xff0c; 要求1&#xff1a;长度为小于等于9 要求2&#xff1a;只能是数字 将内容变成罗马数…