当前位置: 首页 > news >正文

Python 在Word中添加、或删除超链接

在Word文档中,超链接是一种将文本或图像连接到其他文档、网页或同一文档中不同部分的功能。通过添加超链接,用户可以轻松地导航到相关信息,从而增强文档的互动性和可读性。本文将介绍如何使用Python在Word中添加超链接、或删除Word文档中的超链接

文章目录

    • Python 在Word中添加超链接
    • Python 删除Word中的超链接

要实现通过Python操作Word文档,我们需要安装 Spire.Doc for Python 库。该库的pip安装命令如下:

pip install Spire.Doc

Python 在Word中添加超链接

Spire.Doc for Python 库提供了 AppendHyperlink() 方法来添加超链接,其中三个参数:
link – 代表超链接地址
text – 代表显示文本 (也可传入picture来为图片添加超链接)
type – 代表超链接类型 (包括网页链接WebLink、邮件链接EMailLink、书签链接Bookmark、文件链接FileLink

示例代码如下:

from spire.doc import *
from spire.doc.common import *# 创建Word文档
doc = Document()# 添加一节
section = doc.AddSection()# 添加一个段落
paragraph = section.AddParagraph()# 添加一个简单网页链接
paragraph.AppendHyperlink("https://ABCD.com/", "主页", HyperlinkType.WebLink)# 添加换行符
paragraph.AppendBreak(BreakType.LineBreak)
paragraph.AppendBreak(BreakType.LineBreak)# 添加一个邮箱链接
paragraph.AppendHyperlink("mailto:support@e-iceblue.com", "邮箱地址", HyperlinkType.EMailLink)# 添加换行符
paragraph.AppendBreak(BreakType.LineBreak)
paragraph.AppendBreak(BreakType.LineBreak)# 添加一个文档链接
filePath = "C:\\Users\\Administrator\\Desktop\\排名.xlsx"
paragraph.AppendHyperlink(filePath, "点击查看文件", HyperlinkType.FileLink)# 添加换行符
paragraph.AppendBreak(BreakType.LineBreak)
paragraph.AppendBreak(BreakType.LineBreak)# 添加一个新节并创建书签
section2 = doc.AddSection()
bookmarkParagrapg = section2.AddParagraph()
bookmarkParagrapg.AppendText("添加一个新段落")
start = bookmarkParagrapg.AppendBookmarkStart("书签")
bookmarkParagrapg.Items.Insert(0, start)
bookmarkParagrapg.AppendBookmarkEnd("书签")# 链接到书签
paragraph.AppendHyperlink("书签", "点击跳转到文档指定位置", HyperlinkType.Bookmark)# 添加换行符
paragraph.AppendBreak(BreakType.LineBreak)
paragraph.AppendBreak(BreakType.LineBreak)# 添加一个图片超链接
image = "C:\\Users\\Administrator\\Desktop\\work1.jpg"
picture = paragraph.AppendPicture(image)
paragraph.AppendHyperlink("https://ABCD.com/", picture, HyperlinkType.WebLink)# 保存文档
doc.SaveToFile("Word超链接.docx", FileFormat.Docx2019);
doc.Dispose()

生成文档:
Word超链接

Python 删除Word中的超链接

要删除 Word 文档中的所有超链接,先用到了自定义方法 FindAllHyperlinks() 来查找文档中的所有超链接,然后再通过自定义方法 FlattenHyperlinks() 来扁平化超链接。

示例代码如下:

from spire.doc import *
from spire.doc.common import *# 查找文档中的所有超链接
def FindAllHyperlinks(document):hyperlinks = []for i in range(document.Sections.Count):section = document.Sections.get_Item(i)for j in range(section.Body.ChildObjects.Count):sec = section.Body.ChildObjects.get_Item(j)if sec.DocumentObjectType == DocumentObjectType.Paragraph:for k in range((sec if isinstance(sec, Paragraph) else None).ChildObjects.Count):para = (sec if isinstance(sec, Paragraph)else None).ChildObjects.get_Item(k)if para.DocumentObjectType == DocumentObjectType.Field:field = para if isinstance(para, Field) else Noneif field.Type == FieldType.FieldHyperlink:hyperlinks.append(field)return hyperlinks# 扁平化超链接域
def FlattenHyperlinks(field):ownerParaIndex = field.OwnerParagraph.OwnerTextBody.ChildObjects.IndexOf(field.OwnerParagraph)fieldIndex = field.OwnerParagraph.ChildObjects.IndexOf(field)sepOwnerPara = field.Separator.OwnerParagraphsepOwnerParaIndex = field.Separator.OwnerParagraph.OwnerTextBody.ChildObjects.IndexOf(field.Separator.OwnerParagraph)sepIndex = field.Separator.OwnerParagraph.ChildObjects.IndexOf(field.Separator)endIndex = field.End.OwnerParagraph.ChildObjects.IndexOf(field.End)endOwnerParaIndex = field.End.OwnerParagraph.OwnerTextBody.ChildObjects.IndexOf(field.End.OwnerParagraph)FormatFieldResultText(field.Separator.OwnerParagraph.OwnerTextBody,sepOwnerParaIndex, endOwnerParaIndex, sepIndex, endIndex)field.End.OwnerParagraph.ChildObjects.RemoveAt(endIndex)for i in range(sepOwnerParaIndex, ownerParaIndex - 1, -1):if i == sepOwnerParaIndex and i == ownerParaIndex:for j in range(sepIndex, fieldIndex - 1, -1):field.OwnerParagraph.ChildObjects.RemoveAt(j)elif i == ownerParaIndex:for j in range(field.OwnerParagraph.ChildObjects.Count - 1, fieldIndex - 1, -1):field.OwnerParagraph.ChildObjects.RemoveAt(j)elif i == sepOwnerParaIndex:for j in range(sepIndex, -1, -1):sepOwnerPara.ChildObjects.RemoveAt(j)else:field.OwnerParagraph.OwnerTextBody.ChildObjects.RemoveAt(i)# 将域转换为文本范围并清除文本格式
def FormatFieldResultText(ownerBody, sepOwnerParaIndex, endOwnerParaIndex, sepIndex, endIndex):for i in range(sepOwnerParaIndex, endOwnerParaIndex + 1):para = ownerBody.ChildObjects[i] if isinstance(ownerBody.ChildObjects[i], Paragraph) else Noneif i == sepOwnerParaIndex and i == endOwnerParaIndex:for j in range(sepIndex + 1, endIndex):if isinstance(para.ChildObjects[j], TextRange):FormatText(para.ChildObjects[j])elif i == sepOwnerParaIndex:for j in range(sepIndex + 1, para.ChildObjects.Count):if isinstance(para.ChildObjects[j], TextRange):FormatText(para.ChildObjects[j])elif i == endOwnerParaIndex:for j in range(0, endIndex):if isinstance(para.ChildObjects[j], TextRange):FormatText(para.ChildObjects[j])else:for j, unusedItem in enumerate(para.ChildObjects):if isinstance(para.ChildObjects[j], TextRange):FormatText(para.ChildObjects[j])# 设置文本样式
def FormatText(tr):tr.CharacterFormat.TextColor = Color.get_Black()tr.CharacterFormat.UnderlineStyle = UnderlineStyle.none# 加载Word文档
doc = Document()
doc.LoadFromFile("Word超链接.docx")# 获取所有超链接
hyperlinks = FindAllHyperlinks(doc)# 扁平化超链接
for i in range(len(hyperlinks) - 1, -1, -1):FlattenHyperlinks(hyperlinks[i])# 保存文件
doc.SaveToFile("删除超链接.docx", FileFormat.Docx)
doc.Close()

生成文件:
删除超链接


如何去除水印?点击申请一个月试用授权:
https://www.e-iceblue.com/TemLicense.html

相关文章:

Python 在Word中添加、或删除超链接

在Word文档中,超链接是一种将文本或图像连接到其他文档、网页或同一文档中不同部分的功能。通过添加超链接,用户可以轻松地导航到相关信息,从而增强文档的互动性和可读性。本文将介绍如何使用Python在Word中添加超链接、或删除Word文档中的超…...

基于 WPF 平台使用纯 C# 实现动态处理 json 字符串

一、引言 在当今的软件开发领域,数据的交换与存储变得愈发频繁,JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,以其简洁、易读、便于解析和生成的特点,被广泛应用于各种应用程序中。在 W…...

「全网最细 + 实战源码案例」设计模式——单例设计模式

核心思想: 属于创建型设计模式,核心目的是确保一个类在整个程序运行期间只有一个实例,并提供一个全局访问点来获取该实例。 控制共享资源的访问(如数据库链接、配置管理、日志处理器等) 真实世界类比:政府…...

第01章 19 通过点数据逐级构建球体体数据的综合性小例子

用VTK库来创建一个三维图像数据(vtkImageData),并填充标量数据以表示一个球体的体数据。球的半径为50,体数据的空间间隔为1.0/1000。 首先,我需要包含VTK的头文件,并且创建一个vtkImageData对象。然后&…...

CVE-2024-23897-Jenkins任意文件读取漏洞复现

content Jenkins是什么CVE-2024-23897总结修复建议 Jenkins是什么 Jenkins是一人基于Java开发的、可扩展的持续集成引擎,用于持续、自动地构建/测试软件项目,可以监控一些定时执行的任务。 官网文档: Jenkins是一款开源 CI&CD 软件&…...

前端react后端java实现提交antd form表单成功即导出压缩包

前端&#xff08;React Ant Design&#xff09; 1. 创建表单&#xff1a;使用<Form>组件来创建你的表单。 2. 处理表单提交&#xff1a;在onFinish回调中发起请求到后端API&#xff0c;并处理响应。 import React from react; import { Form, Input, Button } from ant…...

基于ESP32的桌面小屏幕实战[6]:环境搭建和软件基础

摘要 本文分为两部分&#xff1a;Linux开发环境搭建和软件基础。Linux开发环境搭建介绍了Ubuntu虚拟机安装及SSH、Samba配置&#xff0c;可以实现用VSCode操作虚拟机。为了后续工作&#xff0c;搭建了乐鑫ESP32 SDK环境。软件基础介绍了Linux开发常用的软件基础&#xff0c;包…...

接口(完)

大家好&#xff0c;今天我们着重来总结一下接口的知识&#xff0c;并且将接口和抽象类的区别罗列一下&#xff0c;帮助我们更好的认识抽象类和接口。 2.7 抽象类和接口的区别. 抽类和接口都是Java中多态的常见使用方式,都需要重点掌握,同时又要认清两者的区别(重要!!&#xf…...

数据结构——实验七·排序

欢迎各位大佬们来到Tubishu的博客&#x1f31f; Tubishu是一名计算机本科生&#xff0c;不定期发送一些在学校的成果供佬们消遣~希望能为佬的编程之路添砖加瓦⭐&#x1f525; 求各位大佬们垂怜&#x1f525;点赞评论一下呗&#x1f525;&#x1f525; 本文专栏 ➡️ 数据结构 …...

JVM堆空间

JVM&#xff08;Java虚拟机&#xff09;堆空间是Java内存管理的核心区域之一&#xff0c;用于存储Java对象实例。以下是关于JVM堆空间的详细介绍&#xff1a; 1. 堆空间的作用 • 存储对象实例&#xff1a;几乎所有的Java对象实例&#xff08;通过new关键字创建的对象&#xf…...

【详细】SSH公私钥认证与渗透测试攻击场景

SSH&#xff08;Secure Shell&#xff09;是一个用于远程登录和执行命令的网络协议&#xff0c;其认证方式通常有两种&#xff1a;基于密码的认证和基于公私钥的认证。本文将详细介绍SSH公私钥认证机制&#xff0c;并探讨在渗透测试场景中&#xff0c;如何利用对靶机具有读取和…...

常见的多媒体框架(FFmpeg GStreamer DirectShow AVFoundation OpenMax)

1.FFmpeg FFmpeg是一个非常强大的开源多媒体处理框架&#xff0c;它提供了一系列用于处理音频、视频和多媒体流的工具和库。它也是最流行且应用最广泛的框架&#xff01; 官方网址&#xff1a;https://ffmpeg.org/ FFmpeg 的主要特点和功能&#xff1a; 编解码器支持: FFmpe…...

C++异步future

&#x1f30e; C11异步futrue 文章目录&#xff1a; C11异步futrue future介绍     应用场景     future操作       std::async函数模版       std::packaged_task类模版       std::promise类模版 &#x1f680;future介绍 std::future是C11标准库…...

Oracle 12c 中的 CDB和PDB的启动和关闭

一、简介 Oracle 12c引入了多租户架构&#xff0c;允许一个容器数据库&#xff08;Container Database, CDB&#xff09;托管多个独立的可插拔数据库&#xff08;Pluggable Database, PDB&#xff09;。本文档旨在详细描述如何启动和关闭CDB及PDB。 二、容器数据库 (CDB) 2.1…...

Vue组件开发-使用 html2canvas 和 jspdf 库实现PDF文件导出 设置页面大小及方向

在 Vue 项目中实现导出 PDF 文件、调整文件页面大小和页面方向的功能&#xff0c;使用 html2canvas 将 HTML 内容转换为图片&#xff0c;再使用 jspdf 把图片添加到 PDF 文件中。以下是详细的实现步骤和代码示例&#xff1a; 步骤 1&#xff1a;安装依赖 首先&#xff0c;在项…...

chrome插件:网页图片高清下载

前置条件&#xff1a; 安装有chrome谷歌浏览器的电脑 使用步骤&#xff1a; 1.打开chrome扩展插件 2.点击管理扩展程序 3.加载已解压的扩展程序 4.选择对应文件夹 5.成功后会出现一个扩展小程序 6.点击对应小程序 7.输入需要访问的网址&#xff0c;点击扩展插件即可进行图片…...

汽车定速巡航

配备定速巡航功能的车型&#xff0c;一般在方向盘附近设有4~6个按键&#xff08;可能共用键位&#xff09;。 要设置定速巡航&#xff0c;不仅需要方向盘上的按键&#xff0c;还要油门配合。 设置的一般流程&#xff1a; 开关&#xff1a;类似步枪上的“保险”&#xff0c;按…...

CNN-BiLSTM卷积双向长短期记忆神经网络时间序列预测(Matlab完整源码和数据)

CNN-BiLSTM卷积双向长短期记忆神经网络时间序列预测&#xff08;Matlab完整源码和数据&#xff09; 目录 CNN-BiLSTM卷积双向长短期记忆神经网络时间序列预测&#xff08;Matlab完整源码和数据&#xff09;预测效果基本介绍 CNN-BiLSTM卷积双向长短期记忆神经网络时间序列预测一…...

WPF基础 | WPF 布局系统深度剖析:从 Grid 到 StackPanel

WPF基础 | WPF 布局系统深度剖析&#xff1a;从 Grid 到 StackPanel 一、前言二、Grid 布局&#xff1a;万能的布局王者2.1 Grid 布局基础&#xff1a;构建网格世界2.2 子元素定位与跨行列&#xff1a;布局的精细操控2.3 自适应布局&#xff1a;灵活应变的秘诀 三、StackPanel…...

14-6-2C++STL的list

(一&#xff09;list对象的带参数构造 1.list&#xff08;elem);//构造函数将n个elem拷贝给本身 #include <iostream> #include <list> using namespace std; int main() { list<int> lst(3,7); list<int>::iterator it; for(itlst.begi…...

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

JavaSec-RCE

简介 RCE(Remote Code Execution)&#xff0c;可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景&#xff1a;Groovy代码注入 Groovy是一种基于JVM的动态语言&#xff0c;语法简洁&#xff0c;支持闭包、动态类型和Java互操作性&#xff0c…...

ES6从入门到精通:前言

ES6简介 ES6&#xff08;ECMAScript 2015&#xff09;是JavaScript语言的重大更新&#xff0c;引入了许多新特性&#xff0c;包括语法糖、新数据类型、模块化支持等&#xff0c;显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var&#xf…...

DockerHub与私有镜像仓库在容器化中的应用与管理

哈喽&#xff0c;大家好&#xff0c;我是左手python&#xff01; Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库&#xff0c;用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地

借阿里云中企出海大会的东风&#xff0c;以**「云启出海&#xff0c;智联未来&#xff5c;打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办&#xff0c;现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

【磁盘】每天掌握一个Linux命令 - iostat

目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat&#xff08;I/O Statistics&#xff09;是Linux系统下用于监视系统输入输出设备和CPU使…...

Java多线程实现之Callable接口深度解析

Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...

【算法训练营Day07】字符串part1

文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接&#xff1a;344. 反转字符串 双指针法&#xff0c;两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...

高危文件识别的常用算法:原理、应用与企业场景

高危文件识别的常用算法&#xff1a;原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件&#xff0c;如包含恶意代码、敏感数据或欺诈内容的文档&#xff0c;在企业协同办公环境中&#xff08;如Teams、Google Workspace&#xff09;尤为重要。结合大模型技术&…...

css3笔记 (1) 自用

outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size&#xff1a;0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格&#xff…...