超链接在 word 文档中起到了提供交互性和导航功能的作用,使读者能够方便地浏览相关内容,并且促进了文档的易读性和互动性。本文将介绍如何使用 spire.doc for python 在 python 中添加和删除 word 文档中的超链接。
安装 spire.doc for python
本教程需要使用 spire.doc for python 和 plum-dispatch v1.7.4。您可以通过以下 pip 命令将它们轻松安装到 vs code 中。
pip install spire.doc
如果您不确定如何安装,请参考此教程:如何在 vs code 中安装 spire.doc for python
python 添加超链接到 word 文档
spire.doc for python 提供了paragraph.appendhyperlink() 方法,可以将网页链接、电子邮件链接、文件链接或书签链接添加到段落内的文本或图像中。下面是详细的步骤:
- 创建 document 类的对象。
- 使用 document.addsection() 方法添加一个章节和使用 section.addparagraph() 方法添加一个段落。
- 使用 paragraph.appendhyerplink(link: str, text: str, type: hyperlinktype) 方法给文本添加超链接。
- 使用 paragraph.appendpicture() 方法向段落中添加图像。
- 使用 paragraph.appendhyerplink(link: str, picture: docpicture, type: hyperlinktype) 方法给图像添加超链接。
- 使用 document.savetofile() 方法保存结果文档。
- python
from spire.doc import *
from spire.doc.common import *
# 创建一个文档对象
doc = document()
# 添加一个章节
section = doc.addsection()
# 创建字符格式对象
characterformat = characterformat(doc)
# 设置字体为宋体
characterformat.fontname = "宋体"
# 设置字号为12
characterformat.fontsize = 12
# 添加段落
paragraph = section.addparagraph()
# 在段落中添加网页链接
field = paragraph.appendhyperlink("https://www.e-iceblue.cn/", "网站人生就是博尊龙凯时主页", hyperlinktype.weblink)
# 应用字符格式到超链接
field.applycharacterformat(characterformat)
# 在段落中添加换行符
paragraph.appendbreak(breaktype.linebreak)
paragraph.appendbreak(breaktype.linebreak)
# 在段落中添加邮件链接
field = paragraph.appendhyperlink("mailto:support @e-iceblue.com", "发邮件给我们", hyperlinktype.emaillink)
# 应用字符格式到超链接
field.applycharacterformat(characterformat)
paragraph.appendbreak(breaktype.linebreak)
paragraph.appendbreak(breaktype.linebreak)
# 定义文件路径
filepath = "report.xlsx"
# 在段落中添加文件链接
field = paragraph.appendhyperlink(filepath, "单击来打开一个excel报告", hyperlinktype.filelink)
# 应用字符格式到超链接
field.applycharacterformat(characterformat)
# 在段落中添加换行符
paragraph.appendbreak(breaktype.linebreak)
paragraph.appendbreak(breaktype.linebreak)
# 添加第二个章节
section2 = doc.addsection()
# 添加段落并插入书签
bookmarkparagrapg = section2.addparagraph()
bookmarkparagrapg.appendtext("一个书签")
start = bookmarkparagrapg.appendbookmarkstart("mybookmark")
bookmarkparagrapg.items.insert(0, start)
bookmarkparagrapg.appendbookmarkend("mybookmark")
# 在段落中添加链接,跳转到文档内的书签位置
field = paragraph.appendhyperlink("mybookmark", "跳转到该文档中的一个书签位置", hyperlinktype.bookmark)
# 应用字符格式到超链接
field.applycharacterformat(characterformat)
# 在段落中添加换行符
paragraph.appendbreak(breaktype.linebreak)
paragraph.appendbreak(breaktype.linebreak)
# 定义图片路径
image = "logo.png"
# 在段落中插入图片
picture = paragraph.appendpicture(image)
# 在段落中添加图片的网页链接
field = paragraph.appendhyperlink("https://www.e-iceblue.cn/", picture, hyperlinktype.weblink)
# 应用字符格式到超链接
field.applycharacterformat(characterformat)
# 保存文档
doc.savetofile("添加超链接.docx", fileformat.docx2016)
# 关闭文档
doc.close()
# 释放资源
doc.dispose()
python 从 word 文档中删除超链接
要一次性删除 word 文档中的所有超链接,您需要找到文档中的所有超链接,然后创建一个名为 flattenhyperlinks() 的自定义方法来依次删除。以下是详细步骤:
- 创建 document 类的对象。
- 使用 document.loadfromfile() 方法加载一个 word 文档。
- 使用自定义方法 findallhyperlinks() 找到文档中的所有超链接。
- 循环遍历超链接,并使用自定义方法 flattenhyperlinks() 将它们全部删除掉。
- 使用 document.savetofile() 方法保存结果文档。
- python
from spire.doc import *
from spire.doc.common import *
# 定义函数 findallhyperlinks,查找文档中的所有超链接
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 none
# 判断域类型是否为超链接
if field.type == fieldtype.fieldhyperlink:
# 将超链接对象添加到列表中
hyperlinks.append(field)
# 返回超链接列表
return hyperlinks
# 定义函数 flattenhyperlinks,移除超链接
def flattenhyperlinks(field):
# 获取超链接所属段落在文本主体中的索引
ownerparaindex = field.ownerparagraph.ownertextbody.childobjects.indexof(
field.ownerparagraph)
# 获取超链接在所属段落中的索引
fieldindex = field.ownerparagraph.childobjects.indexof(field)
# 获取超链接分隔符所在段落
sepownerpara = field.separator.ownerparagraph
# 获取超链接分隔符所在段落在文本主体中的索引
sepownerparaindex = 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)
# 定义函数 formatfieldresulttext,将超链接对象转换为文本并清除文本格式
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 none
if 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
# 创建一个文档对象
doc = document()
# 加载一个word文档
doc.loadfromfile("示例文档.docx")
# 获取所有的超链接
hyperlinks = findallhyperlinks(doc)
# 删除所有的超链接
for i in range(len(hyperlinks) - 1, -1, -1):
flattenhyperlinks(hyperlinks[i])
# 保存到一个新word文档
doc.savetofile("删除超链接.docx", fileformat.docx2016)
# 关闭文档
doc.close()
# 释放资源
doc.dispose()
申请临时 license
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用javascript。获取有效期 30 天的临时许可证。