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文件,里面简单写点模板:

Java如何使用spire进行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);
   }
}

Java如何使用spire进行word文档的替换详解

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

Java如何使用spire进行word文档的替换详解

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

批量内容替换

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

方式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);
   }
}

Java如何使用spire进行word文档的替换详解

虽然笨,但是可行:

Java如何使用spire进行word文档的替换详解

方式2

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

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

Java如何使用spire进行word文档的替换详解

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);
   }
}

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

Java如何使用spire进行word文档的替换详解

来源:https://blog.csdn.net/weixin_46713508/article/details/128601214

标签:spire,word文档,替换
0
投稿

猜你喜欢

  • java 多线程的三种构建方法

    2023-07-01 22:18:26
  • Android中Notification用法实例总结

    2023-03-16 23:05:38
  • 浅谈Spring与SpringMVC父子容器的关系与初始化

    2023-02-08 12:09:05
  • C#实现类似新浪微博长URL转短地址的方法

    2023-06-02 12:59:28
  • Java GZIP压缩与解压缩代码实例

    2023-11-20 15:57:17
  • jdk-logging log4j logback日志系统实现机制原理介绍

    2022-03-22 11:45:28
  • Android第三方控件PhotoView使用方法详解

    2021-12-07 20:35:48
  • C#实现异步GET的方法

    2022-08-17 11:52:55
  • Android按钮单击事件的四种常用写法总结

    2023-07-15 09:05:18
  • 基于rocketmq的有序消费模式和并发消费模式的区别说明

    2021-10-29 08:41:02
  • springcloud使用feign调用服务时参数内容过大问题

    2022-08-31 11:23:26
  • 浅谈SpringMVC HandlerInterceptor诡异问题排查

    2023-07-24 05:34:06
  • 详解C#开发Android应用程序的流程

    2021-08-11 21:32:59
  • Android中RecyclerView实现分页滚动的方法详解

    2023-11-13 13:59:53
  • Android基于Fresco实现圆角和圆形图片

    2023-02-14 20:03:29
  • 详解Android中Activity运行时屏幕方向与显示方式

    2022-02-12 03:51:06
  • IDEA中的maven没有dependencies解决方案

    2021-08-01 11:58:50
  • 详解spring中aop不生效的几种解决办法

    2022-07-24 18:11:40
  • c#的异或运算符介绍

    2021-08-09 03:17:51
  • java数据结构与算法之双向循环队列的数组实现方法

    2022-08-12 23:24:44
  • asp之家 软件编程 m.aspxhome.com