【问题标题】:Removing hyperlinks in PowerPoint with python-pptx使用 python-pptx 删除 PowerPoint 中的超链接
【发布时间】:2023-03-24 10:50:02
【问题描述】:

对 XML 和 python-pptx 模块非常陌生,我想删除每个页面上存在的单个超链接

到目前为止,我自己的尝试是检索我的文件,更改为zip 格式并将它们解压缩到单独的文件夹中

然后我找到以下属性<a:hlinkClick r:id="RelId4">

并删除它,同时删除与此幻灯片对应的 xml.rels 文件中的 Relationshipattribute。

然后我重新压缩并将扩展名更改为 pptx,这会加载罚款。然后我尝试在 Python 中复制它,这样我就可以创建一个持续的自动化。

我的尝试:

from pathlib import Path
import zipfile as zf
from pptx import Presentation
import re
import xml.etree.ElementTree as ET

path = 'mypath'
ppts = [files for files in Path(path).glob('*.pptx')]
for file in ppts:
    file.rename(file.with_suffix('.zip'))
zip_files = ppts = [files for files in Path(path).glob('*.zip')]

for zips in zip_files:
    with zf.ZipFile(zips,'r') as zip_ref:
        zip_ref.extractall(Path(path).joinpath('zipFiles',zips.stem))

然后我做一些进一步的过滤,最终得到来自 rels 文件夹和 ppt/slide 文件夹的我的 xml。

我在这里卡住了我可以使用ElementTree 模块读取我的xml,但我找不到要删除的相关标签?

for file in normal_xmls:
    tree = (ET.parse(file).getroot())
    y = tree.findall('a')
    print(y)

这不会产生任何结果,我尝试使用 python-pptx 模块,但 .Action.Hyperlink 似乎不是一个完整的功能,除非我误解了 API。

【问题讨论】:

  • 这真的是两个问题@datanovice。 SO 确实是为单问题/单答案格式设置的,这使得人们更有可能在搜索中找到他们正在寻找的内容。如果你把它分成两个单独的问题,我会看看它们。
  • @scanny 刚要去健身房,但我回来后会尽快编辑,谢谢,如果这很酷,我会提到你
  • @scanny 编辑成一个问题,如果您需要查看 pptx 的 XML,请告诉我。
  • 请描述多张幻灯片上的超链接。它是超链接形状还是在文本中?你能认出它所在的形状吗?
  • @scanny 如果图像在形状下,那么是的,它在形状内。 pptx 中没有任何文字,所以只能是一个形状。

标签: python powerpoint python-pptx


【解决方案1】:

要从形状中删除超链接(单击形状会在某处导航),请将超链接地址设置为None

shape.click_action.hyperlink.address = None

【讨论】:

  • 该死的,这很简单,我想我在阅读文档方面还有很长的路要走,感谢您的回答和提供如此出色的开源软件包。一旦我们上线,我将在英国的一家大公司使用它,如果您愿意,我会向您发送有关该项目的电子邮件。
  • 我很想听听@Datanovice,祝你好运:)
猜你喜欢
  • 2022-08-16
  • 1970-01-01
  • 1970-01-01
  • 2013-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-09
相关资源
最近更新 更多