Tabelle per Makro in Writer erzeugen.
Moderator: Moderatoren
Tabelle per Makro in Writer erzeugen.
Hallo,
wie kann ich in Writer per Makro eine Tabelle erzeugen?
Die Tabelle soll an der Kursor-Position eingefügt werden.
z.B. eine Tabelle mit 4 Zeilen und 3 Spalten.
In der 1. Zeile stehen die Überschriften.
--------------------------
- Name - Text - Wert -
===============
- Müller - bla - 10,00€-
- Schulz- bla - frei -
- Maier - frei - frei -
mfg
mike6
wie kann ich in Writer per Makro eine Tabelle erzeugen?
Die Tabelle soll an der Kursor-Position eingefügt werden.
z.B. eine Tabelle mit 4 Zeilen und 3 Spalten.
In der 1. Zeile stehen die Überschriften.
--------------------------
- Name - Text - Wert -
===============
- Müller - bla - 10,00€-
- Schulz- bla - frei -
- Maier - frei - frei -
mfg
mike6
Hi,
Tabellen weden als neues Objekt erzeugt und eingefügt.
Danach kann man auf die Tabellezellen zugreifen.
mfg
Michael
Guten Rutsch!
Tabellen weden als neues Objekt erzeugt und eingefügt.
Code: Alles auswählen
Doc = thiscomponent
Cursor = Doc.Text.createTextCursor()
newtable = doc.createinstance("com.sun.star.text.TextTable")
newtable.initialize(4,3)
Doc.Text.insertTextContent(Cursor, newTable, false)
Danach kann man auf die Tabellezellen zugreifen.
mfg
Michael
Guten Rutsch!
__
FAQ zu Starbasic -> http://www.starbasicfaq.de
FAQ zu Starbasic -> http://www.starbasicfaq.de
Hey mike6,
ich hätte da noch einen netten "Lehrtext" zum Erzeugen einer Writer Tabelle. Zu finden unter:
http://www.amt-wiesbaden.de/ooo/Dok_Wri ... zeugen.pdf
(ist nur so zu erreichen - noch nicht weiter verlinkt)
Vielleicht hilft es Dir.
Gruss
Thomas
ich hätte da noch einen netten "Lehrtext" zum Erzeugen einer Writer Tabelle. Zu finden unter:
http://www.amt-wiesbaden.de/ooo/Dok_Wri ... zeugen.pdf
(ist nur so zu erreichen - noch nicht weiter verlinkt)
Vielleicht hilft es Dir.
Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Zusatzfrage.
über folgendes Makro schreibe ich eine Tabelle in ein Writer Dokument:
********************************************************************************************
Sub Abstimmung
Dim oDoc as Object
Dim oText as Object
Dim oTextCursor as Object
oDoc = ThisComponent
oText = oDoc.Text
oTextCursor = oText.createTextCursor()
oTextCursor.gotoStart( FALSE )
oText.insertString( oTextCursor, "" , FALSE )
oTextCursor.ParaStyleName = "Überschrift 1"
oText.insertControlCharacter( oTextCursor,com.sun.star.text.ControlCharacter.PARAGRAPH_BREAK, FALSE )
oTextTable = oDoc.createInstance( "com.sun.star.text.TextTable" )
oTextTable.initialize( 4,2 )
oText.insertTextContent( oTextCursor, oTextTable, FALSE)
oTextTable.getCellByPosition(0,0).String = "Abstimmungsergebnis:"
oTextCursor = oTextTable.getCellByPosition(0,0).createTextCursor()
oTextCursor.ParaStyleName = "Überschrift 1"
oTextCursor.ParaAdjust = com.sun.star.style.ParagraphAdjust.CENTER
oTextTable.getCellByPosition(1,0).BackColor = RGB( 200,200,200 )
oTextTable.getCellByPosition(1,0).String = ""
oTextTable.getCellByPosition(1,0).BackColor = RGB( 200,200,200 )
oTextCursor = oTextTable.getCellByPosition(1,0).createTextCursor()
oTextCursor.ParaStyleName = "Überschrift 1"
oTextCursor.ParaAdjust = com.sun.star.style.ParagraphAdjust.CENTER
oTextTable.getCellByPosition(0,1).String = ""
oTextTable.getCellByPosition(1,1).String = "5 Ja-Stimmen"
oTextTable.getCellByPosition(0,2).String = ""
oTextTable.getCellByPosition(1,2).String = "0 Nein-Stimmen"
oTextTable.getCellByPosition(0,3).String = ""
oTextTable.getCellByPosition(1,3).String = "0 Enthaltungen "
oTextCursor = oTextTable.getCellByPosition(1,1).createTextCursor()
oTextCursor.ParaStyleName = "Überschrift 2"
oTextCursor = oTextTable.getCellByPosition(1,2).createTextCursor()
oTextCursor.ParaStyleName = "Überschrift 2"
oTextCursor = oTextTable.getCellByPosition(1,3).createTextCursor()
oTextCursor.ParaStyleName = "Überschrift 2"
End Sub
********************************************************************************************
Dazu habe ich noch 3 Fragen:
1.) Wie bekomme ich die Umrandung der Tabellen weg ?
2.) Wie kann ich die Schrift direkt formatieren _( nicht über die Formatvorlage z.B. Überschrift 2 )
3.) Wie kann ich die Höhe der Tabellenzeilen festschreiben ( z.B.1,7 cm )
mfg
mike6
********************************************************************************************
Sub Abstimmung
Dim oDoc as Object
Dim oText as Object
Dim oTextCursor as Object
oDoc = ThisComponent
oText = oDoc.Text
oTextCursor = oText.createTextCursor()
oTextCursor.gotoStart( FALSE )
oText.insertString( oTextCursor, "" , FALSE )
oTextCursor.ParaStyleName = "Überschrift 1"
oText.insertControlCharacter( oTextCursor,com.sun.star.text.ControlCharacter.PARAGRAPH_BREAK, FALSE )
oTextTable = oDoc.createInstance( "com.sun.star.text.TextTable" )
oTextTable.initialize( 4,2 )
oText.insertTextContent( oTextCursor, oTextTable, FALSE)
oTextTable.getCellByPosition(0,0).String = "Abstimmungsergebnis:"
oTextCursor = oTextTable.getCellByPosition(0,0).createTextCursor()
oTextCursor.ParaStyleName = "Überschrift 1"
oTextCursor.ParaAdjust = com.sun.star.style.ParagraphAdjust.CENTER
oTextTable.getCellByPosition(1,0).BackColor = RGB( 200,200,200 )
oTextTable.getCellByPosition(1,0).String = ""
oTextTable.getCellByPosition(1,0).BackColor = RGB( 200,200,200 )
oTextCursor = oTextTable.getCellByPosition(1,0).createTextCursor()
oTextCursor.ParaStyleName = "Überschrift 1"
oTextCursor.ParaAdjust = com.sun.star.style.ParagraphAdjust.CENTER
oTextTable.getCellByPosition(0,1).String = ""
oTextTable.getCellByPosition(1,1).String = "5 Ja-Stimmen"
oTextTable.getCellByPosition(0,2).String = ""
oTextTable.getCellByPosition(1,2).String = "0 Nein-Stimmen"
oTextTable.getCellByPosition(0,3).String = ""
oTextTable.getCellByPosition(1,3).String = "0 Enthaltungen "
oTextCursor = oTextTable.getCellByPosition(1,1).createTextCursor()
oTextCursor.ParaStyleName = "Überschrift 2"
oTextCursor = oTextTable.getCellByPosition(1,2).createTextCursor()
oTextCursor.ParaStyleName = "Überschrift 2"
oTextCursor = oTextTable.getCellByPosition(1,3).createTextCursor()
oTextCursor.ParaStyleName = "Überschrift 2"
End Sub
********************************************************************************************
Dazu habe ich noch 3 Fragen:
1.) Wie bekomme ich die Umrandung der Tabellen weg ?
2.) Wie kann ich die Schrift direkt formatieren _( nicht über die Formatvorlage z.B. Überschrift 2 )
3.) Wie kann ich die Höhe der Tabellenzeilen festschreiben ( z.B.1,7 cm )
mfg
mike6
Hey Mikle,
na gut, den einfacherern Teil hast du ja schon geschafft, dann ist der Rest auch zu lösen
Packen wir es an:
Der Weg wäre : Du definierst dir ein Linienobjekt, da du keine Linie willst, kann dies einfach leer sein:
Dim oLinie as new com.sun.star.table.BorderLine
Das weist du nun dem jeweiligen Zellenobjekt zu (z.B. der Zelle 0,0:
With oTextTable.getCellByPosition(0,0)
.topBorder = oLinie
.leftBorder = oLinie
.rightBorder = oLinie
.bottomBorder = oLinie
end with
So, diese Zelle wäre jetzt ohne LInie. Das solltest du natürlich über Schleifen vereinfachen!
Beispiel: Die Schrift in Zelle (0,0) soll blau werden:
oTextCursor = oTable.getCellByPosition(0,0).createTextCursor()
oTextCursor.gotoEnd(true)
oTextCursor.CharColor = RGB(0, 0, 255)
Da kannst du natürlich auch alle anderen Zeichen- und Absatzeigenschaften direkt setzen.
Natürlich kannst du die Zeilen auch manuell manipulieren. Dazu benötigst du zunächst das Zeilenobjekt:
oRow = oDoc.TextTables(0).rows.getByIndex(0)
Hier beispielsweise die erste Reihe der Tabelle.
Jetzt kannst du die Höeh direkt setzen (in 100 stel Milimeter):
oRow.height = 1700 ' entspricht 17 mm = 1,7 cm
Ich hoffe, es hilft erst einmal.
na gut, den einfacherern Teil hast du ja schon geschafft, dann ist der Rest auch zu lösen

Packen wir es an:
Die Umrahmung ist eine Eigenschaft der Tabellenzelle, und die hat bei einer Texttabelle vier Linienobjekte, die alle automatisch gesetzt werden. Willst du also keine Linie, musst du Zelle für Zelle alle Border quasi auf Null setzen! Es gibt zwar auch ein Objekt der Tabelle (TableBorder), ob du das aber einfach auf 0 setzen kannst, weiss ich nicht.1.) Wie bekomme ich die Umrandung der Tabellen weg ?
Der Weg wäre : Du definierst dir ein Linienobjekt, da du keine Linie willst, kann dies einfach leer sein:
Dim oLinie as new com.sun.star.table.BorderLine
Das weist du nun dem jeweiligen Zellenobjekt zu (z.B. der Zelle 0,0:
With oTextTable.getCellByPosition(0,0)
.topBorder = oLinie
.leftBorder = oLinie
.rightBorder = oLinie
.bottomBorder = oLinie
end with
So, diese Zelle wäre jetzt ohne LInie. Das solltest du natürlich über Schleifen vereinfachen!
Na, so wie du Text direkt formatiert. Textcursor erzeugen, Textcursor (der ja nun ein Textobjektdarstellt) formatieren.2.) Wie kann ich die Schrift direkt formatieren _( nicht über die Formatvorlage z.B. Überschrift 2 )
Beispiel: Die Schrift in Zelle (0,0) soll blau werden:
oTextCursor = oTable.getCellByPosition(0,0).createTextCursor()
oTextCursor.gotoEnd(true)
oTextCursor.CharColor = RGB(0, 0, 255)
Da kannst du natürlich auch alle anderen Zeichen- und Absatzeigenschaften direkt setzen.
Die hängen automatisch von der Absatzvorlage der Zellinhalte ab, sie werden dynamisch angepasst.3.) Wie kann ich die Höhe der Tabellenzeilen festschreiben ( z.B.1,7 cm )
Natürlich kannst du die Zeilen auch manuell manipulieren. Dazu benötigst du zunächst das Zeilenobjekt:
oRow = oDoc.TextTables(0).rows.getByIndex(0)
Hier beispielsweise die erste Reihe der Tabelle.
Jetzt kannst du die Höeh direkt setzen (in 100 stel Milimeter):
oRow.height = 1700 ' entspricht 17 mm = 1,7 cm
Ich hoffe, es hilft erst einmal.
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
D a n k e !!
Hallo,
vielen Dank für die schnelle und umfangreiche Info.
Hat mir sehr weitergeholfen.
mfg
mike6
vielen Dank für die schnelle und umfangreiche Info.
Hat mir sehr weitergeholfen.
mfg
mike6
Warum eigentlich so kompliziert?
Man kann Tabellen als Textbausteine definieren und dann an jeder beliebigen Stelle des Textes einfügen.
Ich habe zum Beispiel eine Rechnungsvorlage, in der vier verschiedene Tabellen mit unterschiedlichen Berechnungen vorkommen.
Gruß, Joke
Man kann Tabellen als Textbausteine definieren und dann an jeder beliebigen Stelle des Textes einfügen.
Ich habe zum Beispiel eine Rechnungsvorlage, in der vier verschiedene Tabellen mit unterschiedlichen Berechnungen vorkommen.
Gruß, Joke
OpenSUSE Leap 43, LibreOffice 6
Win7, LibreOffice 6
Win7, LibreOffice 6