TextTables und BorderLines

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

chrdz
**
Beiträge: 39
Registriert: Mi, 19.04.2006 11:57
Wohnort: Bayern

TextTables und BorderLines

Beitrag von chrdz »

Hallo,

und wieder ein Problem. Ich habe in irgendeinem Thread schon etwas gelesen, das hat mir jedoch nicht wirklich geholfen. Daher meine Frage:

mit folgendem Code erzeuge ich eine einfache Tabelle in einem Writer Dokument und schreibe Text hinein:

Code: Alles auswählen

Table = oMyDoc.createInstance("com.sun.star.text.TextTable")
Table.Initialize(2,1)
oMyDoc.Text.insertTextContent(Cursor, Table, False)
Cell = Table.getCellByPosition(0,0)
CellCursor = Cell.CreateTextCursor()
CellCursor.ParaStyleName = "Überschrift 3"
CellCursor.String = ResultSet1.getString(1)+" "+ResultSet1.getString(2)
Standardmäßig scheint eine Umrandung gesetzt zu sein.

Mit Table.BorderLine geht scheinbar auch nichts. Ich weiß, dass es viele Wege zum Ziel gibt. Könnte mir jemand einen anderen aufzeigen?

Grüße

Christian
Viele Wege führen zum Ziel, aber alle nach Rom.
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

Hey Christian,
Mit Table.BorderLine geht scheinbar auch nichts
na ja, so verkehrt war das gar nicht. Nur: BorderLine trifft nur auf die einzelne Zelle zu.
Eine Texttabelle unterstützt wie auch jede Zelle die Eigenschaften TableBorder, die die Umrahmung eines Zellbereiches regelt.
Beide Eigenschaften erwarten einen Struct (ein Objekt), einmal des Typs com.sun.star.table.BorderLine und einmal des Typs com.sun.star.table.TableBorder.
Um also deiner Tabelle eine Umrahmung zu geben, musst du dies zunächst definieren (Prinzip):

Code: Alles auswählen

 dim oLinie as new com.sun.star.table.BorderLine
with oLinie
   .Color = rgb(41, 191, 20)  'grün
   .outerLineWidth =50
end with
dim oRahmen as new com.sun.star.table.TableBorder
with oRahmen
   .TopLine = oLinie
   .BottonLine = oLinei
end with
table.TableBorder = oRahmen
Also, du brauchst zuerst ein Linienobjekt, hier hier Farbe "grün" und Breite 0,5 mm
Dann das Rahmenobjekt - mit Ober- und Unterlinie
Das weist du dann der Tabelle zu, erst dann fügst du sie in den Text ein.
Rahmen sind Fleissarbeit....

Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
chrdz
**
Beiträge: 39
Registriert: Mi, 19.04.2006 11:57
Wohnort: Bayern

gelöst, Danke

Beitrag von chrdz »

Hallo Thomas,

jetzt funktionierts endlich. Danke!

Mein Fehler war von vornherein, dass ich versucht habe die Tabelle vorzubereiten, anstatt sie nachträglich zu formatieren. Das heißt, dass ich die Tabelle erst mit vorgefertigten Rahmen darstellen wollte.

so sieht es jetzt aus:

Code: Alles auswählen

Table = oMyDoc.createInstance("com.sun.star.text.TextTable")
REM
Table.Initialize(2,1)
oMyDoc.Text.insertTextContent(Cursor, Table, False)
with oLinie
   .Color = rgb(0,0,0)
   .outerLineWidth = 0
   .LineDistance = 0
   .innerLineWidth = 0
end with
with oRahmen
   .TopLine = oLinie
   .BottomLine = oLinie
   .LeftLine = oLinie
   .RightLine = oLinie
   .VerticalLine = oLinie
   .HorizontalLine = oLinie
   .IsBottomLineValid = true
   .IsDistanceValid = true
   .IsHorizontalLineValid = true
   .IsLeftLineValid = true
   .IsRightLineValid = true
   .IsTopLineValid = true
   .IsVerticalLineValid = true
end with
table.TableBorder = oRahmen 
Cell = Table.getCellByPosition(0,0)
CellCursor = Cell.CreateTextCursor()
CellCursor.ParaStyleName = "Überschrift 3"
CellCursor.String = ResultSet1.getString(1)+" "+ResultSet1.getString(2)
Aber wie immer: Man lernt nie aus.

Grüße

Christian
Viele Wege führen zum Ziel, aber alle nach Rom.
Antworten