🙏 Helfen Sie mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀

❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 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: 62
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
* LO-Experte *
Beiträge: 2533
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.5 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.0.3 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)

nitja
Beiträge: 190
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
* LO-Experte *
Beiträge: 2533
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.5 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.0.3 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)

Benutzeravatar
karolus
* LO-Experte *
Beiträge: 2533
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.5 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.0.3 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)

Benutzeravatar
karolus
* LO-Experte *
Beiträge: 2533
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.5 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.0.3 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)

StefKe
Beiträge: 62
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 gern nutzen und unterstützen wollen:


Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.



Antworten