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.
