Java如何使用spire进行word文档的替换详解
作者:小花皮猪 发布时间:2022-10-15 09:59:21
前言
今天遇到一个需求,需要对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");
//模板变量map
HashMap<String, Object> paramsMap = new HashMap<>();
// 填充key和vaulue key=模板变量,value=替换后的值
paramsMap.put("${name}","张三丰");
paramsMap.put("${age}","18");
paramsMap.put("${sex}","男");
// 循环key
for(String key:paramsMap.keySet()){
// 根据key得到value
String value = paramsMap.get(key).toString();
//使用新文本替换文档中的指定文本 也就是value替换key
document.replace(key, value, false, true);
}
//保存文档
document.saveToFile("C:\\Users\\PC\\Desktop\\test3.docx", FileFormat.Docx_2013);
}
}
再次运行代码,文档里面的变量以及全部完成了替换。
来源:https://blog.csdn.net/weixin_46713508/article/details/128601214
猜你喜欢
- 前几篇主要集中在注册中心eureka的使用上,接下来可以创建服务提供者provider来注册到eureka。demo源码见: https:/
- 1.概述在本快速教程中,我们将学习如何设置Spring Security LDAP。在我们开始之前,了解一下LDAP是什么? - 它代表轻量
- 这篇文章主要介绍了JAVA如何按字节截取字符串,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参
- 昨天给各位总结了本人学习springboot整合mybatis第一阶段的一些学习心得和源码,主要就算是敲了一下SpringBoot的门儿,希
- 想在Linux进行JAVA开发吗?环境如何搭建,第一个HelloWorld如何实现,下面马上奉献:1、环境搭建1.1 Java JDK 的安
- 基于servlet+jsp+jdbc的后台管理系统,包含5个模块:汽车账户部管理、租车账户部管理、汽车信息管理表、租车记录表、租车租聘表。功
- 请求参数解析客户端请求在handlerMapping中找到对应handler后,将会继续执行DispatchServlet的doPatch(
- 先给出网页地址:https://wall.alphacoders.com/featured.php?lang=Chinese主要步骤:利用J
- 服务端package lesson02;import java.io.*;import java.net.ServerSocket;impo
- 这个小游戏是我和我姐们儿的JAVA课程设计,也是我做的第一个JAVA项目,适合初学者,希望能帮到那些被JAVA课设所困扰的孩纸们~~~一、该
- C#接口的学习,在编程中,我们经常会用到接口,那什么是接口呢?接口描述的是可属于任何类或结构的一组相关功能,所以实现接口的类或结构必须实现接
- 今天在做项目的时候突然遇到一个问题:启动服务器的时候spring没报错,可是当我访问某个页面的时候spring报Request bean i
- 本文实例讲述了Android编程之手机壁纸WallPaper设置方法。分享给大家供大家参考,具体如下:/** * Andorid设置手机屏幕
- 解决Long型数据转换成json格式时丢失精度最近项目中突然发现雪花算法生成的数据库主键id返回给前端时和本身的值不一致,于是后端进行断点调
- JAVA关键字final用于修饰数据、方法或类,通常意味着“无法改变的”,既数据不能改变,方法不能覆盖,类不能继承。一般采用final有两种
- 1.登录腾讯云点击登录选择浏览器登录。输入用户名 按回车键 然后输入 密码。2.安装java环境直接命令:yum -y install ja
- synchronized原理在java中,每一个对象有且仅有一个同步锁。这也意味着,同步锁是依赖于对象而存在。当我们调用某对象的synchr
- 所谓c#的委托就是说把函数当参数来传递。这个在js完全就用不着搞什么委托东西,直接转就是了。而对于C#来说则不是这样!一个函数,如果它的参数
- Java中Stop-The-World机制简称STW,是在执行垃圾收集算法时,Java应用程序的其他所有线程都被挂起(除了垃圾收集帮助器之外
- 什么是抽象类什么是抽象类呢?抽象类顾名思义就是很抽象,就是当我们没有足够的信息去描述这个类的时候我们就可以先不用描述,这样的类就是抽象类。用