前言

今天遇到一个需求,需要对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文档简单操作

Java使用spire进行word文档的替换相关推荐

  1. java重新组合_Java 合并Word文档

    在日常工作中,难免会遇到需要将多个Word文档合并到一个文档中,对其进行重新整理的情况,为了能帮助大家高效快速的完成这个操作,接下来本文就将介绍两种在Java程序中合并Word文档的方法. 方法一:如 ...

  2. java word 文档合并_如何通过java将多个word文档合成一个wor

    展开全部 国内有个免费32313133353236313431303231363533e78988e69d8331333431356133的jar(Free Spire.Doc for Java),可 ...

  3. Spire操作word文档

    Spire操作word文档 1.基本文档方面 // 测试用例PersonalCreditRecord credit = getPersonalCreditRecord();//Create word ...

  4. Java使用poi-tl生成word文档

    Java使用poi-tl生成word文档,可以对模板文件进行文本替换,图片.表格.超链接添加.图表处理等.大概的说明都在代码注释里,只有一个地方需要注意,就是图表的替换,占位符{{barChart}} ...

  5. (一)JAVA基于OPENXML的word文档插入、合并、替换操作系列之基础篇

    (一)JAVA基于OPENXML的word文档插入.合并.替换操作系列之基础篇 前言 什么是Open Xml? Open XML SDK 这系列笔记要做点什么? 涉及技术点 关于word.openxm ...

  6. Java使用freemarker生成word文档并转pdf文档

    Java使用freemarker生成word文档后转pdf 先来看看效果图 进入正题 项目需求: 为订单后生成对应的pdf文档,文档内包含图片. 方案一:使用freemarker和itext把html ...

  7. (五)、JAVA基于OPENXML的word文档插入、合并、替换操作系列之word文件合并[支持多文件]

    (五).JAVA基于OPENXML的word文档插入.合并.替换操作系列之word文件合并[支持多文件] 二.word合并的多种方案简单比较 三.基于Open Xml WordprocessingML ...

  8. java填充wordxml格式,java xml转成word文档格式

    xml格式如何转换成doc格式文件 通过jodconveter来实现转化(http://www.artofsolving.com/opensource/jodconverter). 这种方式实现起来比 ...

  9. java openxml 操作 word,(三)、JAVA基于OPENXML的word文档插入、合并、替换操作系列之html转word...

    (三).JAVA基于OPENXML的word文档插入.合并.替换操作系列之html转word 系列笔记传送门 富文本转word文档 准备待转换内容 内容清理与格式化 转换成word文档 输出结果展示 ...

最新文章

  1. 三层交换机与路由器的主要区别
  2. ISA2006 之 域环境下部署
  3. spring配置druid连接池和监控数据库访问性能
  4. 关于SharePoint中管理列表项权限
  5. 句柄与指针的区别(二)
  6. 冷启动阶段的多规则策略如何筛选?
  7. 有没有人告诉你联合贷款的这些细则
  8. 1000个网络摄像头如何组网?
  9. linux 无法启动matlab,在具有 jre 1.7.0 _05的科学linux上,无法启动 MATLAB gui ( 指南)_matlab_开发99编程知识库...
  10. OSPFv3中LSA详解(五)——Intra-Area-Prefix LSA详解
  11. 游泳,情人节纪念一下。
  12. 图文详解互联网根基之HTTP
  13. 可视化:这十个数据可视化工具软件平台你必须知道
  14. 软件设计师中级-软件工程
  15. 2021Web前端中高级面试题复盘
  16. LISP 圆孔标记_【CAD】〖30〗生成圆孔明细表
  17. B. Catching Cheaters(cf)dp
  18. Tomcat+Servlet面试题都在这里(修订版)
  19. 在Typora路上愈走愈远,几乎涵盖所有入门攻略和常见问题以及typora继续探索~
  20. 计算机无法启动bios,开机进入bios无法进入系统怎么办_电脑开机就进入bios的解决方法...

热门文章

  1. kaze算法的图像配准研究(2)-匹配
  2. BZOJ3681: Arietta
  3. IT过来人的10点经验谈
  4. Opencv Mat数据类型操作
  5. 狗眼看人低的10个经典场景(组图)
  6. 处理谷歌跨域不好使问题
  7. wi-fi和路由器怎么连接_解决Wi-Fi问题的最简单方法:严重移动路由器
  8. Google Code Search
  9. 阿里新零售中的智能补货(I)— 库存模型
  10. 打标工具brat的安装与使用