Writer: TextTable Tabelle kippen (Zeilen -> Spalten)

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

Moderator: Moderatoren

hld
Beiträge: 1
Registriert: Di, 31.08.2010 20:16

Writer: TextTable Tabelle kippen (Zeilen -> Spalten)

Beitrag von hld »

Hallo Zusammen.

wir generieren odt Dokumente mit Hilfe von Java und Jodreports (eine template Lösung für ODF-Dateien). NAch der Generierung können wir noch beliebige Macros ausführen lassen.

Was ist unser Problem:

Die Tabellen sind in ODF Zeilenbasiert - wie die folgende:

a b c d
1 2 3 4
5 6 7 8

Nun suchen wir eine Möglichkeit diese Tabelle "zukippen". Hierbei werden die Zeilen zu Spalten:

a 1 5
b 2 6
c 3 7
d 4 8

Folgendes sollte Berücksichtigt werden:
- Zellenformatierung sollte übernommen werden
- Spalten müssen auf die Seite ausgerichtet werden.


Es kam in den Sinn, dass wir dies mit Hilfe eines Macros lösen können. Einen ersten Versuch (bei weitem noch nicht am Ziel habe ich angehängt)

Code: Alles auswählen

Sub Test
	Dim Doc As Object
	Dim Table As Object
	Dim Cursor As Object
	Dim Rows As Object
	Dim RowIndex As Integer
	Dim Cols As Object
	Dim ColIndex As Integer
	Dim CellName As String
	Dim Cell As Object
	Dim myCell1 As Object
	Dim myCell2 As Object
	Dim myText As String
	Dim TextTables As Object
	
	Doc = StarDesktop.CurrentComponent
	ThisComponent.createInstance("com.sun.star.text.TextTable")
	Dim oCursor As Object
	Dim oTable As Object
	Dim oText As Object
	oText = ThisComponent.Text
	oCursor = oText.createTextCursor()
	oCursor.gotoStart(FALSE)
	oTable = oDocument.createInstance("com.sun.star.text.TextTable")
	oTable.initialize(5,9)
	oText.insertTextContent(oCursor, oTable, FALSE)
	
	
	TextTables = ThisComponent.getTextTables()
	For I = 0 to TextTables.count - 1
	Table = TextTables(I)
	If Left(Table.name,3) = "alt" then
	Rows = Table.getRows
	Cols = Table.getColumns
	
	For RowIndex = 0 To Rows.getCount()-1
	For ColIndex = 0 To Cols.getCount()-1
	If RowIndex < ColIndex then
	myCell1 = Table.getCellByPosition(RowIndex,ColIndex)
	myCell2 = Table.getCellByPosition(ColIndex,RowIndex)
	myText = myCell1.String
	myCell1.String = myCell2.String
	myCell2.String = myText
	end If
	Next
	Next
	End If
	Next
End Sub
Ist dies mit einem Macro möglich oder liege ich da komplett auf dem Holzweg? Leider steht die Anzahl der gewünschten Spalten erst am Ende des Generierungsprozesses fest und ist damit dynamisch. Ich würde ungern dies schon programatisch im Generierungsprozess berückscihtigen...

Vielen Dank im Voraus.

Thies.