Вы можете получить доступ ко всем именам перечислений, связанным с COM-объектом, который вы загрузили через класс comtypes.client.Constants()
; передайте ему созданный вами объект COM PowerPoint.Application:
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
, хотя он был добавлен почти 10 лет назад .
Другим вариантом является доступ к атрибутам сгенерированного модуля в сгенерированной библиотеке типов , как показано в Свойства с аргументами (именованные свойства) section, Это даст вам доступ к любой из констант, связанных с IDL Powerpoint, включая 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; Снимок экрана в ответе Стива Риндсберга показывает, что для перечисления PpSaveAsFileType
это PowerPoint
. Я считаю, что это имя также используется в документации для ppSaveAsFileType
enum ; обратите внимание на (PowerPoint)
дополнение к названию документации.
Вы также можете использовать GUID библиотеки типов, плюс номер версии, но это не совсем раскручивает клавиатуру, если вам нужно набирать ее вручную.
Вы можете использовать from comtypes.gen import PowerPoint; help(PowerPoint)
, чтобы посмотреть, какие имена были определены, если вам нужно напоминание, или просто обратиться к документации Microsoft.
Любой метод позволяет избежать использования магических чисел; само определение библиотеки типов дает вам символические имена.
Если вы обнаружите примеры кода, использующие win32com
, то любое использование атрибутов win32com.client.constants
преобразуется непосредственно в атрибуты comtypes.client.Constant(...)
или comtypes.gen.<module>
.
У меня нет доступа к установке Windows, чтобы на самом деле протестировать все это, я извлекаю информацию из чтения документации и исходного кода comtypes
.