Tabelle per Makro in Writer erzeugen.

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

Moderator: Moderatoren

mike6
*****
Beiträge: 479
Registriert: Sa, 06.03.2004 13:58

Tabelle per Makro in Writer erzeugen.

Beitrag von mike6 »

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
ykcim
*****
Beiträge: 324
Registriert: Di, 29.07.2003 15:22
Wohnort: Neu-Isenburg
Kontaktdaten:

Beitrag von ykcim »

Hi,

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
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

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
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
mike6
*****
Beiträge: 479
Registriert: Sa, 06.03.2004 13:58

Beitrag von mike6 »

Hallo,

danke für die schnellen und ausführlichen Antworten.


Guten Rutsch in Jahr 2006.



mfg
mike6
mike6
*****
Beiträge: 479
Registriert: Sa, 06.03.2004 13:58

Zusatzfrage.

Beitrag von mike6 »

ü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
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

Hey Mikle,

na gut, den einfacherern Teil hast du ja schon geschafft, dann ist der Rest auch zu lösen :D

Packen wir es an:
1.) Wie bekomme ich die Umrandung der Tabellen weg ?
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.
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!

2.) Wie kann ich die Schrift direkt formatieren _( nicht über die Formatvorlage z.B. Überschrift 2 )
Na, so wie du Text direkt formatiert. Textcursor erzeugen, Textcursor (der ja nun ein Textobjektdarstellt) formatieren.
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.
3.) Wie kann ich die Höhe der Tabellenzeilen festschreiben ( z.B.1,7 cm )
Die hängen automatisch von der Absatzvorlage der Zellinhalte ab, sie werden dynamisch angepasst.
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
mike6
*****
Beiträge: 479
Registriert: Sa, 06.03.2004 13:58

D a n k e !!

Beitrag von mike6 »

Hallo,

vielen Dank für die schnelle und umfangreiche Info.
Hat mir sehr weitergeholfen.


mfg
mike6
Joke
*****
Beiträge: 378
Registriert: Sa, 19.02.2005 20:23

Beitrag von Joke »

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
OpenSUSE Leap 43, LibreOffice 6
Win7, LibreOffice 6
mike6
*****
Beiträge: 479
Registriert: Sa, 06.03.2004 13:58

Beitrag von mike6 »

Hallo,

wäre nett, wenn Du mir das Beispiel mal ins Netz
stellen könntest.

Mann lernt ja immer dazu.


mfg
mike6
Antworten