保存带有演示文稿的PowerPoint演示文稿时使用文件格式常量

时间:2018-09-10 13:02:55

标签: python powerpoint comtypes

通过Comtype保存Powerpoint演示文稿时,如何访问作为文件格式可用的常量?

在下面的示例中,将32用作格式,但我想使用列出的here常量,或者至少找到一个文档列表,其中包含每个常量的值。

对于Word,此list还包含每个常量的值。

import comtypes.client

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

3 个答案:

答案 0 :(得分:1)

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

SaveAs members

答案 1 :(得分:1)

您可以访问与通过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实例加载基础类型库,并将属性查找动态转换为类型库访问。即使出于某种原因,它也没有包含在comtypes文档中,即使it was added nearly 10 years ago now也是如此。

另一种选择是访问generated type library中生成的模块上的属性,如shown in the Properties with arguments (named properties) section。这将使您能够访问与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's answer中的屏幕快照显示,对于PpSaveAsFileType枚举,其为PowerPoint。我相信documentation for the ppSaveAsFileType enum中也使用了相同的名称;请注意文档标题的(PowerPoint)补充。

您还可以使用类型库的GUID,以及版本号,但是如果您必须手动键入,那还不算键盘上的滚动。

如果需要提醒,可以使用from comtypes.gen import PowerPoint; help(PowerPoint)来查看已定义的名称,或者只是参考Microsoft文档。

这两种方法都可以避免使用幻数; 类型库定义本身为您提供符号名称。

如果找到使用win32com代替的任何代码示例,则对win32com.client.constants属性的任何使用都会直接转换为comtypes.client.Constant(...)comtypes.gen.<module>属性。


我无权访问Windows设置来实际测试其中的任何一项,而是从阅读文档和comtypes的源代码中推导出信息。

答案 2 :(得分:0)

这是Microsoft列出的列表,其中包含每个常量的值:

https://docs.microsoft.com/en-us/office/vba/api/powerpoint.ppsaveasfiletype