💚 BITTE helfen Sie uns das LibreOffice Forum zu erhalten! 💚
Helfen Sie uns bitte noch HEUTE!

❤️ DANKE >><< DANKE ❤️

Vielen Dank für Ihre SPENDE.

> KEINE WERBUNG FÜR REGISTRIERTE BENUTZER!<
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des LibreOffice Forums verwendet.
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

BorderLine.Color mittels Python setzen.

Alles zur Programmierung im LibreOffice.
Antworten
StefKe
Beiträge: 47
Registriert: Sa 5. Nov 2022, 18:47

BorderLine.Color mittels Python setzen.

Beitrag von StefKe » So 7. Jul 2024, 20:38

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

Benutzeravatar
karolus
Beiträge: 2291
Registriert: Fr 10. Dez 2010, 10:01

Re: BorderLine.Color mittels Python setzen.

Beitrag von karolus » Mo 8. Jul 2024, 09:12

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.
Zuletzt geändert von karolus am Mo 8. Jul 2024, 10:51, insgesamt 2-mal geändert.
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.3.2 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)

nitja
Beiträge: 182
Registriert: Di 20. Okt 2020, 15:55

Re: BorderLine.Color mittels Python setzen.

Beitrag von nitja » 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"?
LO 24.2.0.3 (X86_64) auf Linux 6.6.26-1-MANJARO, gnome 45.4, (gtk 4) gtk3 für LO

Benutzeravatar
karolus
Beiträge: 2291
Registriert: Fr 10. Dez 2010, 10:01

Re: BorderLine.Color mittels Python setzen.

Beitrag von karolus » Mo 8. Jul 2024, 09:41

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!
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.3.2 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)

Benutzeravatar
karolus
Beiträge: 2291
Registriert: Fr 10. Dez 2010, 10:01

Re: BorderLine.Color mittels Python setzen.

Beitrag von karolus » Mo 8. Jul 2024, 10:31

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()
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.3.2 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)

Benutzeravatar
karolus
Beiträge: 2291
Registriert: Fr 10. Dez 2010, 10:01

Re: BorderLine.Color mittels Python setzen.

Beitrag von karolus » Mo 8. Jul 2024, 15:17

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.
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.3.2 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)

StefKe
Beiträge: 47
Registriert: Sa 5. Nov 2022, 18:47

Re: BorderLine.Color mittels Python setzen.

Beitrag von StefKe » Di 9. Jul 2024, 09:35

Hallo, danke an alle ... der Code läuft.
Das hier ist ein wirklich sehr hilfsbereites Forum :-)

Stefan

An alle, die das LibreOffice-Forum nutzen:


Bitte beteiligen Sie sich mit 7 Euro pro Monat und helfen uns bei unserem Budget für das Jahr 2024.
Einfach per Kreditkarte oder PayPal.
Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet.

❤️ Vielen lieben Dank für Ihre Unterstützung ❤️

Antworten