ComboBox 或 ListBox 控件是否可以使用 python-pptx 进行操作

Can ComboBox or ListBox controls be maniputed with python-pptx

我想分发一个带有 Python 脚本的 pptx 文件,该脚本使用 python-pptx 添加自定义图表。要自定义图表,我希望有一张幻灯片充当表单以允许用户设置一些值。我可以使用“开发人员”选项卡上显示的控件将组合框和列表框添加到幻灯片,但我不确定 python-pptx 是否可以访问这些控件设置的值。我宁愿不使用 VBA 宏,因为这样演示文稿就需要是 pptm 文件而不是 pptx 文件,而且许多用户的组织不允许来自 Microsoft Office 的宏文件。当组合框和列表框控件位于幻灯片上时,python-pptx 是否可以访问用户设置的值?是否可以设置这些控件中显示的选项列表?

python-pptx 中没有 API 支持,反正现​​在还没有。

但是,如果一个项目存储在 .pptx 文件中,如果您愿意努力工作,则可以在 Python 中访问它。有多难取决于它在 .pptx 包中的存储位置。

首先,我建议检查包含您正在考虑使用的控件之一的幻灯片的 XML。 opc-diag (Python) 包非常适合这项工作。

当您从尽可能小的地方开始时,了解 XML 的速度最快,例如通过检查 slide1.xml 包含单个形状的幻灯片的演示文稿,比如矩形文本 "foobar"(这样可以很容易地通过搜索在 XML 中找到)。

一旦确定了您要查找的元素的外观,就可以使用 XPath 找到它们并 lxml 调用来读取它们的值。所以看起来大致像:

from pptx import Presentation

prs = Presentation("my-pptx.pptx")
sld = prs.slides[0]._element  # ---XML element of slide---
aliases = sld.xpath(".//p:stdPr/p:alias")
print(aliases[0]["val"])

您可能需要了解更多有关 lxml 的信息,而不是您真正想要了解的信息才能使其发挥作用。例如,名称空间处理起来有些痛苦。