Seite 1 von 1

Tabstop mit win32com/Word setzen ?

Verfasst: Dienstag 4. September 2007, 01:23
von abgdf
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

Verfasst: Dienstag 4. September 2007, 07:35
von BlackJack
Verrate doch mal die Fehlermeldung.

Verfasst: Dienstag 4. September 2007, 22:41
von abgdf
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

Verfasst: Dienstag 11. September 2007, 19:14
von Andy
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: