在通过comtypes保存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)
您可以访问与通过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
实例加载基础类型库并动态转换属性查找到typelib访问。尽管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
的源代码中推断出信息。
以下是Microsoft的列表,其中包含每个常量的值:
https://docs.microsoft.com/en-us/office/vba/api/powerpoint.ppsaveasfiletype