🙏 Helfen Sie jetzt 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!🍀
>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗
Alles zur Programmierung im LibreOffice.
-
StefKe
- Beiträge: 62
- Registriert: Sa 5. Nov 2022, 18:47
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
-
karolus
- * LO-Experte *
- Beiträge: 2534
- Registriert: Fr 10. Dez 2010, 10:01
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
Beitrag
von nitja » Mo 8. Jul 2024, 09:18
StefKe hat geschrieben: ↑So 7. Jul 2024, 20:38
… Farbe der … Rahmenlinie …
Python …
keine 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.BorderLine
2"?
LO 24.2.0.3 (X86_64) auf Linux 6.6.26-1-MANJARO, gnome 45.4, (gtk 4) gtk3 für LO
-
karolus
- * LO-Experte *
- Beiträge: 2534
- Registriert: Fr 10. Dez 2010, 10:01
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 …
Python …
keine 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.BorderLine
2"?
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)
-
karolus
- * LO-Experte *
- Beiträge: 2534
- Registriert: Fr 10. Dez 2010, 10:01
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)
-
karolus
- * LO-Experte *
- Beiträge: 2534
- Registriert: Fr 10. Dez 2010, 10:01
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
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.