Tabstop mit win32com/Word setzen ?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
abgdf

Dienstag 4. September 2007, 01:23

Hallo,

ich möchte in Word über win32com einen rechtsbündigen Tabstop setzen. Dazu hab ich ein Word-Makro aufgenommen und mir den VBA-Code angesehen.
Was ich hab, geht:

Code: Alles auswählen

import win32com.client
word = win32com.client.Dispatch('Word.Application')
word.Visible = 1
word.WindowState = 1
document = word.Documents.Add()
selection = word.Selection
selection.ParagraphFormat.TabStops.Add(Position = 425.1968, Alignment = 2, Leader = 0)
, sieht aber uncool aus. Im VBA-Code sind die Werte der Argumente anders, z.B. für "Position" wird die Funktion "CentimetersToPoints(15)" aufgerufen. Die erscheint auch als Methode meines "word"-Objekts, ich erhalte aber von dieser keinen vernünftigen Rückgabewert (sondern stattdessen eine Fehlermeldung).
Weiß jemand, wie man mit dieser Funktion von Python aus umgehen kann ?

Viele Grüße
BlackJack

Dienstag 4. September 2007, 07:35

Verrate doch mal die Fehlermeldung.
abgdf

Dienstag 4. September 2007, 22:41

Gut, mach ich:

Code: Alles auswählen

import win32com.client
word = win32com.client.Dispatch('Word.Application')
document = word.Documents.Add()
selection = word.Selection

selection.ParagraphFormat.TabStops.Add(Position = word.CentimetersToPoints(15), Alignment = 2, Leader =  0)
ergibt

Code: Alles auswählen

Traceback (most recent call last):
  File "h.py", line 7, in ?
    selection.ParagraphFormat.TabStops.Add(Position = word.CentimetersToPoints(1
5), Alignment = 2, Leader =  0)
  File "C:\PYTHON24\lib\site-packages\win32com\gen_py\00020905-0000-0000-C000-00
0000000046x409x8x0.py", line 13572, in CentimetersToPoints
    return self._oleobj_.InvokeTypes(371, LCID, 1, (4, 0), ((4, 1),),Centimeters

pywintypes.com_error: (-2147467259, 'Unbekannter Fehler', None, None)
und

Code: Alles auswählen

import win32com.client
word = win32com.client.Dispatch('Word.Application')
document = word.Documents.Add()
selection = word.Selection

help(word.CentimetersToPoints)
ergibt

Code: Alles auswählen

Help on method CentimetersToPoints in module win32com.gen_py.00020905-0000-0000-
C000-000000000046x409x8x0:

CentimetersToPoints(self, Centimeters=<PyOleEmpty object>) method of win32com.ge
n_py.00020905-0000-0000-C000-000000000046x409x8x0._Application instance
Vielleicht muß man irgendwie mit "makepy.py" oder so arbeiten; weiß noch nicht, wie das geht ...

Viele Grüße
Andy
User
Beiträge: 196
Registriert: Sonntag 1. Januar 2006, 20:12
Wohnort: aus dem hohen Norden....

Dienstag 11. September 2007, 19:14

abgdf hat geschrieben:Gut, mach ich:

Code: Alles auswählen

import win32com.client
word = win32com.client.Dispatch('Word.Application')
document = word.Documents.Add()
selection = word.Selection

selection.ParagraphFormat.TabStops.Add(Position = word.CentimetersToPoints(15), Alignment = 2, Leader =  0)
ergibt

Viele Grüße
Hallo abgdf!

Tja, so hatte ich es auch vor Deinem Post versucht... weil es mich ein wenig interessiert hat. Schien mir auch die beste VB-Umsetzung in Python zu sein. Das merkwürdige an der Sache ist aber, sobald ich "word.CentimetersToPoints(" schreibe, kommt der Win-Tooltip:"(Centimeters=<PyOleEmpty object at 0x00E90F78>).

Daher gehe ich mal einfach von einem Bug aus. Denn das Traceback sagt ja, das CentimetersToPoints keine Integer oder gar LCID´s(locale identifiers) haben will.

Ich schieb´s mal wieder hoch, weil ich wissen möchte, ob´s wirklich ein Bug ist. :wink:
Antworten