Seite 1 von 1

Excel: Celle zeilenweise formatieren

Verfasst: Freitag 10. Februar 2006, 10:27
von menno
hi,

ich suche schon eine ganze weile nach einer geeigneten lösung für mein problem.
ich habe vor / muß in einer excel-zelle mehrere textzeilen mit unterschiedlichem inhalt ablegen (xclSheet.Cells(2,10).Value = "...").
leider ist es aber auch erforderlich die textzeilen verschieden einzufärben.
und da hapert es gewaltig.
ich schaff es nur die textfarbe für die gesamte zelle (xclSheet.Cells(2,10).Font.ColorIndex = "3") zu ändern.

wie kann ich mein problem lösen?

vielen dank an euch
menno

Verfasst: Freitag 10. Februar 2006, 10:57
von N317V
Aus der Excel-Hilfe:
Wenn Sie nicht den gesamten in einer Zelle oder einem Grafikobjekt enthaltenen Text einheitlich formatieren möchten, verwenden Sie die Characters-Eigenschaft, um einen Teil des Textes zurückzugeben.
Als Beispiel wird dort aufgeführt:

Code: Alles auswählen

In diesem Beispiel wird das dritte Zeichen in Zelle A1 der "Sheet1" fett formatiert.

With Worksheets("Sheet1").Range("A1")
    .Value = "abcdefg"
    .Characters(3, 1).Font.Bold = True
End With
Das war das netteste RTFM, das ich jemals irgendwo gepostet hab :-) Hängt wohl damit zusammen, dass ich mich selbst ständig mit Excel rumärgern muss.

Verfasst: Freitag 10. Februar 2006, 11:56
von menno
hi,

danke schon mal für diese antwort ...
aber soweit bin ich seit dem stellen meiner frage auch gekommen ;o)

nur bekomme es aber scheinbar nicht hin, diese bsp-anweisung nach python zu portieren
xclSheet.Cells(2,10).Characters(1,4).Font.ColorIndex = "3" oder auch
xclSheet.Range("B10").Characters(1,4).Font.ColorIndex = "3"
brechen jeweils mit einem fehler ab:

Traceback (most recent call last):
File "D:\excel.py", line 17, in ?
xclSheet.Cells(2,10).Characters(1,4).Font.ColorIndex = "3"
File "C:\Python22\Core\lib\site-packages\win32com\client\dynamic.py", line 151, in __call__
return self._get_good_object_(apply(self._oleobj_.Invoke,allArgs),self._olerepr_.defaultDispatchName,None)
pywintypes.com_error: (-2147352573, 'Member nicht gefunden.', None, None)

Traceback (most recent call last):
File "D:\excel.py", line 17, in ?
xclSheet.Range("B10").Characters(1,4).Font.ColorIndex = "3"
File "C:\Python22\Core\lib\site-packages\win32com\client\dynamic.py", line 151, in __call__
return self._get_good_object_(apply(self._oleobj_.Invoke,allArgs),self._olerepr_.defaultDispatchName,None)
pywintypes.com_error: (-2147352573, 'Member nicht gefunden.', None, None)

thnx
menno

Verfasst: Freitag 10. Februar 2006, 12:24
von N317V
Tatsächlich scheint hier ein Fehler in makepy vorzuliegen. Das Characters-Objekt hat keine __call__-Methode, sondern nur folgende:

Delete None
Insert None
_ApplyTypes_ None
__cmp__ None
__getattr__ None
__init__ None
__len__ None
__nonzero__ None
__repr__ None
__setattr__ None
_get_good_object_ None
_get_good_single_object_ None

Leider kenn ich mich nicht gut genug aus mit Windows-Programmierung um das selbst zu implementieren. :-/

Verfasst: Freitag 10. Februar 2006, 13:05
von helmut
Hallo menno,

vielleicht waere folgende Vorgehensweise eine Loesung:
Du schreibst in VBA ein Macro, das die Formatierung uebernimmt. Dieses Macro wird von python gestartet. Die notwendigen Werte werden dem Macro als Parameter* uebergeben?!?

Gruss, Helmut

*Nachtrag: statt als Parameter könnten die Werte auch auf einem temporären xls-Tabellenblatt uebergeben werden.