Seite 1 von 1

BorderLine.Color mittels Python setzen.

Verfasst: So 7. Jul 2024, 20:38
von StefKe
Hallo, wie kann die Farbe der unteren Rahmenlinie per Python gesetzt werden?

Code: Alles auswählen

oDoc = XSCRIPTCONTEXT.getDocument()
oBorder = CreateUnoStruct("com.sun.star.table.BorderLine") # Fehler

def range_border_color():
    oSheet = oDoc.Sheets[0]
    oBorder.Color = 16711680 
    oSheet.getCellRangeByPosition(1,1,10,1).BottomBorder.Color = 16711680 # bringt nix
    
if __name__ == "__main__":
    range_border_color()
bringt's leider nicht...

Danke für jede Hilfe
Stefan

Re: BorderLine.Color mittels Python setzen.

Verfasst: Mo 8. Jul 2024, 09:12
von karolus
Hallo

Das schöne an einer jupyter-notebook Sitzung ist ja die Möglichkeit zeitlich|räumlich-getrennt Code auf quasi-Modulebene auszuführen (was sonst eher nicht möglich ist …), um das hier mal beispielshaft aufzudröseln:
  • Ich selektiere irgendeinen Zellbereich und definiere manuell zb. den äusseren Rahmen drumrum in vier verschiedenen Farben|Stilen|Breiten
  • jetzt kopiere ich einfach die …TableBorder-Struktur global in die Variable »border« und zwar mit:

    Code: Alles auswählen

    doc = XSCRIPTCONTEXT.getDocument()
    sel = doc.CurrentSelection
    border = sel.TableBorder
  • Optional: Frühstücken|Einkaufen|…| anderes CalcDokument öffnen
    nicht optional: einen oder mehrere Zellbereiche selektieren und dann:

    Code: Alles auswählen

    doc = XSCRIPTCONTEXT.getDocument()
    sel = doc.CurrentSelection
    sel.TableBorder = border

Code: Alles auswählen

oBorder = CreateUnoStruct("com.sun.star.table.BorderLine") # Fehler
CreateUnoStruct gibts nicht gratis in python, wenn dann:

Code: Alles auswählen

import uno
oBorder = uno.createUnoStruct("com.sun.star.table.BorderLine")
aber »Structs« kannst du auch direkt importieren, siehe meinen übernächsten Beitrag.

Re: BorderLine.Color mittels Python setzen.

Verfasst: Mo 8. Jul 2024, 09:18
von nitja
StefKe hat geschrieben:
So 7. Jul 2024, 20:38
… Farbe der … Rahmenlinie … Pythonkeine Ahnung re. Python-Spezialitäten…

Code: Alles auswählen

oDoc = XSCRIPTCONTEXT.getDocument()
oBorder = CreateUnoStruct("com.sun.star.table.BorderLine") # Fehler
…
… aber braucht LO nicht "com.sun.star.table.BorderLine2"?

Re: BorderLine.Color mittels Python setzen.

Verfasst: Mo 8. Jul 2024, 09:41
von karolus
nitja hat geschrieben:
Mo 8. Jul 2024, 09:18
StefKe hat geschrieben:
So 7. Jul 2024, 20:38
… Farbe der … Rahmenlinie … Pythonkeine Ahnung re. Python-Spezialitäten…

Code: Alles auswählen

oDoc = XSCRIPTCONTEXT.getDocument()
oBorder = CreateUnoStruct("com.sun.star.table.BorderLine") # Fehler
…
… aber braucht LO nicht "com.sun.star.table.BorderLine2"?
Unabhängig von Basic|python: das ist uno! …BorderLine2 setzt auf …BorderLine auf, hat aber zusätzlich weitere Attribute.
genauso wie css.table.TableBorder2 noch ein paar Attribute auf css.table.TableBorder draufsetzt.

Du kannst natürlich nicht …TableBorder2 klonen und die geklonte Struktur woanders in eine ……TableBorder hineinwürgen!

Re: BorderLine.Color mittels Python setzen.

Verfasst: Mo 8. Jul 2024, 10:31
von karolus
Nach den speziellen Hacks die man sich (mit jupyter-notebook) in der Entwicklungsphase erlauben darf, das ganze from scratch und brav in Funktionen verpackt:

Code: Alles auswählen

from com.sun.star.table import BorderLine, TableBorder

def red_bottom_line():
    line = BorderLine()
    line.Color = int("ff0000",16) #red
    line.OuterLineWidth = 100 # 100 was?
    border = TableBorder()
    border.BottomLine = line
    border.IsBottomLineValid = True
    return border
    
def main(*_):
    doc = XSCRIPTCONTEXT.getDocument()
    sheet = doc.Sheets["Tabelle2"]
    cellrange = sheet["A14:F14"]
    cellrange.TableBorder = red_bottom_line()

Re: BorderLine.Color mittels Python setzen.

Verfasst: Mo 8. Jul 2024, 15:17
von karolus
Hallo

Meine Beispiele beziehen sich alle im Prinzip auf mehrzeilige Bereiche in denen aussschliesslich die (untere) Aussenlinie angesprochen wird, falls du aber entweder nur einzeilige Bereiche garantieren kannst oder in jeder Zeile einen farbigen Unterrand möchtest dann brauchst du kein …TableBorder… sondern kannst direkt Zellbereich.BottomBorder ansprechen.

Re: BorderLine.Color mittels Python setzen.

Verfasst: Di 9. Jul 2024, 09:35
von StefKe
Hallo, danke an alle ... der Code läuft.
Das hier ist ein wirklich sehr hilfsbereites Forum :-)

Stefan