MS Word изменить текущий выбранный элемент ленты с помощью интерфейса COM - PullRequest
0 голосов
/ 18 мая 2018
import comtypes.client as com

app=com.GetActiveObject('Word.Application')

app.Visible = True
app.Resize(400, 400)

С помощью этого скрипта Python можно подключиться к открытому документу MS Word и изменить его размер.

Мне нужно программно изменить текущий выбранный элемент ленты.Мне нужно эмулировать клик на «Файл», «Домой», «Вставить», «Дизайн» и так далее.Мне особенно интересно открывать представление за кулисами программно.Есть ли у вас такие COM-интерфейсы?

Ответы [ 2 ]

0 голосов
/ 18 мая 2018

Невозможно автоматизировать интерфейс ленты в Office через типичные интерфейсы COM - их нет.Это сделано из-за того, что предыдущий интерфейс CommandBars был «неправильно использован» некоторыми разработчиками для существенного отключения приложения Office.Таким образом, лента не предоставляет никаких интерактивных интерфейсов для разработчика.

Можно в ограниченной степени отправлять команды клавиатуры, эмулируя нажатие пользователем комбинации клавиш ALT.Но эти комбинации ненадежны - они могут изменяться динамически, в зависимости от языка отображения и того, какие команды в настоящее время видны на ленте.

Единственный надежный интерфейс - это интерфейс специальных возможностей.Это может служить вашей цели.См. Например, https://docs.microsoft.com/en-us/previous-versions/office/developer/office-2007/bb404170(v=office.12)

0 голосов
/ 18 мая 2018

Вы можете получить доступ к приложению MS Word и документам внутри него через COM.

Я не использовал comtypes, и я бы порекомендовал вместо этого рассмотреть win32com, потому что он генерирует раноинформация привязки из интерфейса COM, которая позволяет всплывающие подсказки.Я почти уверен, что comtypes этого не делает.

Получите приложение следующим образом:

>>> from win32com.client import Dispatch
>>> mswApp = Dispatch('Word.Application')

Это даст вам доступ к объекту приложения (https://msdn.microsoft.com/en-us/library/microsoft.office.interop.word.application.aspx)

Первое, что вам нужно - это управлять активным документом

>>> doc = mswApp.ActiveDocument

Тогда у вас есть доступ к объекту Document (https://msdn.microsoft.com/en-us/library/microsoft.office.interop.word.document.aspx).

Судя по вашему вопросувы хотите, чтобы ваша программа фактически нажимала кнопки в приложении Word. Это не совсем так, как работает объектная модель COM. Вместо этого вы вызываете методы и устанавливаете свойства объектов Application и Document, поэтому вместо нажатия кнопок, вы вызываете код, который вызовет нажатие кнопки внутри приложения. Это работает почти так же, как макрос VBA внутри Word.

...