python - MS Word ændring for øjeblikket valgt bånd element ved hjælp af COM interface

Indlæg af Hanne Mølgaard Plasc

Problem



import comtypes.client as com

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

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


Ved hjælp af dette python script kan man oprette forbindelse til åbnet MS Word-dokument og ændre størrelsen på det.


Jeg skal programmatisk ændre det aktuelt valgte båndelement. Jeg skal efterligne klik på 'File', 'Home', 'Insert', 'Design' og så videre. Jeg er især
 interesseret i at åbne backstage-visning programmatisk. Gør du, hvis der er sådanne COM-grænseflader?

Bedste reference


Det er ikke muligt at automatisere Ribbon-grænsefladen i Office via de typiske COM-grænseflader - der er ingen. Dette er ved design, fordi de tidligere CommandBars-grænseflader er 'misbrugt' af nogle udviklere til i det væsentlige at deaktivere Office-applikationen. Derfor viser båndet ikke nogen interaktive grænseflader til bygherren.


Det er muligt i begrænset omfang at sende tastaturkommandoer, der simulerer brugerens tryk på en ALT-tastekombination. Men disse kombinationer er ikke pålidelige - de kan ændre sig dynamisk afhængigt af displaysprog og hvilke kommandoer der for øjeblikket er synlige i Bånd.


Det eneste pålidelige interface er tilgængelighedsgrænsefladen. Det kan tjene dit formål. Se f.eks. Https://docs.microsoft.com/en-us/previous-versions/office/developer/office-2007/bb404170(v=office.12)[7]

Andre referencer 1


Du kan komme til MS Word applikationen og dokumenter inde i det via COM.


Jeg har ikke brugt comtypes og jeg vil anbefale at du overvejer win32com i stedet for, fordi det vil generere tidligt bindende info fra COM-grænsefladen, der muliggør pop-up-tip. Jeg er helt sikker på [[comtypes gør det ikke.


Gå til applikationen som denne:


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


Dette giver dig adgang til applikationsobjektet (https://msdn.microsoft.com/en-us/library/microsoft.office.interop.word.application.aspx)[8]


En af de første ting, du vil have, er at kontrollere det aktive dokument


>>> doc = mswApp.ActiveDocument


Derefter har du adgang til dokumentobjektet (https://msdn.microsoft.com/en-us/library/microsoft.office.interop.word.document.aspx).[9]


At dømme efter dit spørgsmål, vil du have dit program til at trykke på knapper i Word-programmet. Det er ikke rigtigt, hvordan COM-objektmodellen fungerer. I stedet kalder du metoder og sætter egenskaber for applikations- og dokumentobjektet, så i stedet for at trykke på knapperne ringer du koden, der trykker på knappen inde i programmet, ville kalde. fungerer meget det samme som en VBA-makro inde i Word.