在使用comtypes保存PowerPoint演示文稿时使用文件格式常量

7
如何通过comtypes在保存Powerpoint演示文稿时访问可用的文件格式常量?
在下面的示例中,使用32作为格式,但我想使用此处列出的常量,或者至少找到一个包含每个常量值的记录列表。
对于Word,有这个列表,其中还包含每个常量的值。
import comtypes.client

powerpoint = comtypes.client.CreateObject("Powerpoint.Application")
pres = powerpoint.Presentations.Open(input_path)
pres.SaveAs(output_path, 32)

考虑使用python-pptx包。 - Adam Ostrožlík
@AdamOstrožlík 我需要一个能够与完整的Office套件配合使用并且可以转换为所有支持格式的软件包。 - Oskar Persson
1
这本质上是 如何在Python中导入COM对象命名空间/枚举? 的重复(但使用 comtypes 而不是 win32com)。 - Martijn Pieters
3个回答

5
你可以通过comtypes.client.Constants()类访问与所加载的COM对象相关联的所有枚举名称;将其传递给你创建的PowerPoint.Application COM对象即可:
from comtypes.client import Constants, CreateObject

powerpoint = CreateObject("Powerpoint.Application")
pp_constants = Constants(powerpoint)

pres = powerpoint.Presentations.Open(input_path)
pres.SaveAs(output_path, pp_constants.ppSaveAsPDF)
Constants实例加载底层Type Library,并动态将属性查找转换为typelib访问。由于某种不明原因,它没有包含在comtypes文档中,即使它现在已经添加了近10年

另一种选择是在生成的类型库中访问生成模块上的属性,如“具有参数的属性(命名属性)”部分所示。这将使您可以访问与Powerpoint IDL相关联的任何常量,包括自动完成支持IDE(一旦通过第一次访问PowerPoint.Application对象生成)。

如果正在创建的对象暴露了类型信息,则当您使用CreateObject()时,模块会自动生成;这绝对适用于'Powerpoint.Application',因为您不需要显式设置接口。仅当有可用的类型信息时,才能自动选择接口。

枚举名称添加到生成的模块的顶层,因此直接使用它们:

import comtypes.client

powerpoint = comtypes.client.CreateObject("Powerpoint.Application")

# only import the generated namespace after the com object has been created
# at least once. The generated module is cached for future runs.
from comtypes.gen import PowerPoint

pres = powerpoint.Presentations.Open(input_path)
pres.SaveAs(output_path, PowerPoint.ppSaveAsPDF)

类型库的简称可以在VBA对象浏览器中找到;Steve Rindsberg的回答中的截图显示了PpSaveAsFileType枚举类型的简称是PowerPoint。我相信同样的名称也用于ppSaveAsFileType枚举类型的文档中;请注意文档标题中添加的(PowerPoint)
您还可以使用类型库的GUID加版本号,但如果您需要手动输入,这并不方便。
如果需要提醒,您可以使用from comtypes.gen import PowerPoint; help(PowerPoint)来查看已定义的名称,或者参考Microsoft的文档。
无论哪种方法,都避免了使用魔数;类型库定义本身为您提供了符号名称。
如果您发现任何使用win32com的代码示例,则win32com.client.constants属性的任何使用直接转换为comtypes.client.Constant(...)comtypes.gen.<module>属性。

我没有使用Windows设置来测试任何内容,我是通过阅读文档和comtypes源代码来推导信息的。


2

1
假设您已经拥有PowerPoint的副本,请启动它,按下ALT+F11打开VBA编辑器,按F2打开对象浏览器,然后搜索SaveAs以获取此列表。单击任何常量名称以查看对话框底部的常量值。

SaveAs members


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接