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

news2024/11/18 11:27:35

前言

今天遇到一个需求,需要对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);
    }
}

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

在这里插入图片描述

总结

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

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

Java实现替换Word中文本

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

XWPFDocument导出Word文档简单操作

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/148295.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

「数据密集型系统搭建」原理篇|OLAP、OLTP,竟是两个世界

本篇来聊聊OLAP与OLTP的区别以及它们各自的适用场景&#xff0c;以此话题为导引和大家聊聊技术视野与知识储备对于研发同学的重要性&#xff0c;最后站在事务处理与在线分析的角度分别论述下两个数据世界的底层构建逻辑。 OLAP、OLTP的概念与区别 概念 了解OLAP、OLTP的概念&…

【CANN训练营第三季】学习ascend-CANN遇到的经典疑难问题总结

1、/home/HwHiAiUser/samples_1/cplusplus/level2_simple_inference/1_classification/resnet50_imagenet_classification/src/…/inc/utils.h:13:10: fatal error: acl/acl.h: No such file or directory #include “acl/acl.h” 原因&#xff1a;放错了DDK——PATH export D…

【Unity3D】快速上手 EasyAR

目录 一&#xff0c;AR技术 1.AR简介 2.AR特点 3.AR工作原理 二&#xff0c;EasyAR 插件 1.获取Key 2.EasyAR 插件下载和导入 三&#xff0c;快速上手 EasyAR 废话不多说上运行效果 一&#xff0c;AR技术 1.AR简介 AR&#xff08;Augmented Reality&#xff0c;增强现…

RedLock算法(红锁算法)介绍

文章目录一. 部署图二. RedLock算法简单介绍加锁解锁一. 部署图 各redis独立部署&#xff0c;各自独立 二. RedLock算法简单介绍 加锁 应用程序获取系统当前时间应用程序使用相同的kv值依次从多个redis实例中获取锁。 如果某一个节点超过一定时间依然没有获取到锁则直接放…

Porjet1 小白学习CANoe16安装、新建工程、新建数据库、简单运行

准备工作 1&#xff0c;下载CANoe16&#xff08;因为笔者只找到了官方提供的CANoe16的DEMO license&#xff09; 2&#xff0c;安装CANoe16&#xff0c;点击默认安装即可&#xff0c;不需要安装驱动。 3&#xff0c;如果桌面没有找到CANoe16的打开方式可以参考 解决安装CANoe1…

OpenGL之Shader编程入门

1.shader 编程基础 1.1 Vertex shader与Fragment shader Vertex shader即顶点着色器&#xff0c;用来改变顶点的属性。Fragment shader即片元着色器&#xff0c;用来改变片元的颜色&#xff0c;在Direct3D中称为Pixel shader&#xff0c;像素着色器。 1.2 编程语言 面向OpenG…

C语言快速互转HEX(16进制)和原始字符串/数组

C语言快速互转HEX&#xff08;16进制&#xff09;和原始字符串/数组缘由这个起因是昨晚群里有人在讨论怎么把字符串转成HEX方法最佳&#xff0c;讨论到最后变成哪种方法效率最优了。毕竟这代码是要在MCU上面跑的&#xff0c;要同时考虑到时间和空间的最优解。当然讨论的是有结果…

Java8流式计算相关

目录 lambda 优点 语法介绍 语法格式一 : 语法格式二 : 语法格式三 : 语法格式四 : 语法格式五 : 语法格式六 : 方法引用 stream Stream流的常用方法&#xff1a; 创建动态list 创建固定长度list map filter groupingBy sum list转map&#xff1a; map转li…

谷粒商城学习笔记

docker 安装docker docker官方centos镜像下载地址&#xff1a;https://docs.docker.com/engine/install/centos/ 步骤&#xff1a; 先卸载&#xff0c;如果不是root用户在前边加上sudo sudo yum remove docker \docker-client \docker-client-latest \docker-common \docke…

C 程序设计教程(05)—— C 语言的数据类型(三):指针类型

C 程序设计教程&#xff08;05&#xff09;—— C 语言的数据类型&#xff08;三&#xff09;&#xff1a;指针类型 该专栏主要介绍 C 语言的基本语法&#xff0c;作为《程序设计语言》课程的课件与参考资料&#xff0c;用于《程序设计语言》课程的教学&#xff0c;供入门级用…

MySql中json类型数据的查询以及在MyBatis-Plus中的使用

表结构和初始数据 新建表结构 CREATE TABLE json_test (id int NOT NULL AUTO_INCREMENT,roles json DEFAULT NULL COMMENT 角色,project json DEFAULT NULL COMMENT 项目,PRIMARY KEY (id) ) ENGINEInnoDB;初始数据 INSERT INTO ctts_dev.json_test(id, roles, project) VALU…

SpringBoot 整合 xxl-job

文章目录部署 xxl-jobSpringBoot 配置maven 配置application.yaml配置 XxlJobConfigXxlJobSpringExecutor新建执行任务配置 xxl-job-admin执行器管理任务管理部署 xxl-job K8S 部署 xxl-job 参考文档&#xff1a;https://blog.csdn.net/weixin_42555971/article/details/12489…

【Web开发】Python实现Web服务器(Docker下部署Flask)

&#x1f37a;基于Python的Web服务器系列相关文章编写如下&#x1f37a;&#xff1a; &#x1f388;【Web开发】Python实现Web服务器&#xff08;Flask快速入门&#xff09;&#x1f388;&#x1f388;【Web开发】Python实现Web服务器&#xff08;Flask案例测试&#xff09;&a…

分享112个PHP源码,总有一款适合您

PHP源码 分享112个PHP源码&#xff0c;总有一款适合您 链接&#xff1a;https://pan.baidu.com/s/1MaBtjYZk08o0eJT5_E79aQ?pwduldm 提取码&#xff1a;uldm 下面是文件的名字&#xff0c;我放了一些图片&#xff0c;文章里不是所有的图主要是放不下...&#xff0c;大家下载…

实战丨从0到1搭建结算平台

一、概述我们最开始分享了O2O电商支付清结算体系&#xff0c;接着分享了如何从0-1搭建计费体系&#xff0c;接下来我们分享&#xff1a;各方的钱算完之后怎么付出去&#xff0c;也即结算平台建设的实操与设计思路。1.什么是结算&#xff1f;说结算平台之前&#xff0c;先说一下…

22年 | 年前总结 | 主业谋生存,副业谋发展

22年关键词 复盘 | 极简 | 长期主义 | 阅读 | 斜杠青年 | 一事无成 | … 当然了&#xff0c;2023也会继续延续某些关键词。 一壶清酒&#xff0c;敬这红尘也敬我 很多人都在说&#xff0c;疫情存在的时间比任何一段恋情还要长。 而我想说&#xff0c;我失败的次数还超过了做…

Java设计模式中策略模式是怎么回事/怎么替代繁琐if-else语句/如何优化条件选择语句

继续整理记录这段时间来的收获&#xff0c;详细代码可在我的Gitee仓库SpringBoot克隆下载学习使用&#xff01; 6.3 策略模式 6.3.1 概述 定义了一系列算法&#xff0c;并将每个算法封装起来&#xff0c;使它们可以相互替代&#xff0c;且算法的变化不会影响使用算法的用户属…

【自学Python】Python注释

文章来源嗨客网&#xff08;www.haicoder.net&#xff09; Python注释 Python注释教程 用于注解说明解释程序的文字就是注释&#xff0c;注释提高了代码的阅读性。一旦程序中某部分内容被注释掉&#xff0c;则该内容将会被 Python 解释器忽略&#xff0c;换句话说&#xff0c…

一般颜色直方图

颜色直方图是一种用于图像处理和分析的图表&#xff0c;它可以显示图像中不同颜色的数量。通常&#xff0c;颜色直方图会将颜色分成几个色调区间&#xff0c;每个区间对应一个条形图&#xff0c;其中条形图的高度表示该色调区间中的像素数量。通过颜色直方图&#xff0c;你可以…

Mask RCNN网络源码解读(Ⅰ) --- 语义分割前言与转置卷积

目录 1.什么是语义分割 2.语义分割常见的数据集格式 3.常见的语义分割评价指标 4.转置卷积 1.什么是语义分割 常见分割任务&#xff1a;语义分割、实例分割、全景分割 图一 原始图片图二 语义分割图三 实例分割语义分割&#xff08;例如FCN网络&#xff09;可以理解为一个…