Использование констант формата файла при сохранении презентации PowerPoint с комтипами - PullRequest
0 голосов
/ 10 сентября 2018

Как получить доступ к константам, доступным в виде форматов файлов, при сохранении презентации Powerpoint с помощью комтипов?

В следующем примере 32 используется в качестве формата, но я хотел бы использовать перечисленные константы здесь ) или, по крайней мере, найти документированный список со значением для каждой константы.

Для Word есть этот список , который также содержит значение для каждой константы.

import comtypes.client

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

Ответы [ 3 ]

0 голосов
/ 13 сентября 2018

Вот список от Microsoft, который содержит значения каждой константы:

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

0 голосов
/ 13 сентября 2018

Вы можете получить доступ ко всем именам перечислений, связанным с 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.

0 голосов
/ 12 сентября 2018

Предполагая, что у вас есть копия PowerPoint, запустите ее, нажмите ALT + F11, чтобы открыть редактор VBA, нажмите F2, чтобы открыть обозреватель объектов, затем выполните поиск в SaveAs, чтобы получить этот список. Нажмите на любое имя константы, чтобы увидеть значение константы в нижней части диалогового окна.

SaveAs members

...