Seite 1 von 1
Writer-Tabelle Spaltenbreiten-Macro
Verfasst: So, 26.09.2010 18:39
von plohrer
Hallo Basic-Profis.
Ich bin ehrgeiziger Makro-Anfänger und möchte gerne folgendes Problem lösen. Ich erhalte von Extern eine
ooo Writer "Tabelle1" mit 9 Spalten und voller Zahlen. Die
9 Spalten möchte ich per Makro mit folgenden Abständen (cm) darstellen : 50-20-14-14-14-14-... mm. Die Formatvorlagen sind nichts Neues oder Eigenes : "Tabellen-Überschrift und Tabellen-Inhalt".
Meine Makro-Tastatur-Eingaben sind : (Curser in der ersten Zeile), alt-a (alles Markieren), alt-t,alt-c (Tabelleneigenschaften), alt-m (Ausrichtung Manuell), ctrl-tab,ctrl-tab (Spalten), alt-1 (erste Spalte),5,2,2, ... , Return (OK). Makro beenden. Diese Tabelle sieht perfekt aus, genau so wie erwünscht. Das Makro-Resultat ist enttäuschend. Die Basic Procedur sagt mir (als Anfänger) nichts. Ich habe im Forum (auch bei Dannenhöfer) seit Tagen nach der Lösung gesucht, aber nichts entsprechendes gefunden. Hat jemand Lust und Laune mir bei diesem Problem behilflich zu sein ? Es ist nichts Dringendes, mein persönlicher Ehrgeiz ist geweckt und das MUSS doch machbar sein. Wo liegt überhaupt das Problem ?

Re: Writer-Tabelle Spaltenbreiten-Macro
Verfasst: Di, 28.09.2010 15:12
von GrobMakrobiker
Hallo,
direkt kann man die Spaltenbreite soweit ich weiß nicht ansprechen. Es gibt da aber einen Abschnitt in Andrews Makro-Dokument (
http://www.pitonyak.org/oo.php):
Code: Alles auswählen
'Spaltenbreite anpassen nach Pintoyak
Dim oTblColSeps 'The array of table column separators.
oTblColSeps = oTable.TableColumnSeparators
Rem Change the positions of the two separators.
oTblColSeps(0).Position = 8000
oTblColSeps(0).IsVisible = True
oTblColSeps(1).Position = 1000
oTblColSeps(1).IsVisible = True
oTblColSeps(2).Position = 7000
oTable.TableColumnSeparators = oTblColSeps
Das habe ich mal probiert, hat bei mir aber nicht geklappt
Dann hatte ich die Idee, es ginge auch mit unsichtbaren Bildern oder Shapes, die man in die unterste Zeile einfügt und deren Breite man bestimmt (die Bilder können ja sehr schmal, dafür sehr breit sein):
Code: Alles auswählen
' unsichtbare Objekte in letzte Zeile einfügen, damit die Spaltenbreite
' eingestellt werden kann
' das Shape wird auf der Draw-Page-Ebene eingefügt
oDP = oDok.getDrawPage()'.getByIndex( 0 )
oZeilen.InsertByIndex(nZeile-1,1)
For n = 0 to 2 ' einmal die Spalten durchgehen
oZelle = oTable.GetCellByPosition(n,nZeile-1)'nSpalte,nZeile)
oZellCursor = oZelle.CreateTextCursor
oPlatz = oDok.createInstance("com.sun.star.drawing.RectangleShape")
oGroesse.Height = 100
Select Case n
Case 0
oGroesse.Width = 3000
Case 1
oGroesse.Width = 1000
Case 2
oGroesse.Width = 8000
End Select
oPlatz.Size = oGroesse
oPlatz.FillStyle = com.sun.star.drawing.FillStyle.SOLID
oPlatz.FillTransparence = 50
oPlatz.TextAutoGrowWidth = FALSE 'Anpassen des Shapes an Text
' xray objLinie
oZelle.InsertTextContent(oZellCursor, oPlatz, false)
Die unsichtbaren Shapes werden eingefügt und man müsste noch bestimmen, dass sie nicht über die Spalten rausragen. Ich hab dann rgendwann aber aufgehört und mein Projekt anders weitergemacht.
Vieleicht kommst Du ja weiter?
LG Groby
Re: Writer-Tabelle Spaltenbreiten-Macro
Verfasst: Di, 28.09.2010 23:06
von DPunch
Aloha
Der Codeausschnitt von GrobMakrobiker erfüllt schon seinen Zweck.
Zu beachten ist dabei allerdings, dass
GrobMakrobiker hat geschrieben:Code: Alles auswählen
'Spaltenbreite anpassen nach Pintoyak
Dim oTblColSeps 'The array of table column separators.
oTblColSeps = oTable.TableColumnSeparators
Rem Change the positions of the two separators.
oTblColSeps(0).Position = 8000
oTblColSeps(0).IsVisible = True
oTblColSeps(1).Position = 1000
oTblColSeps(0).IsVisible = True
oTblColSeps(2).Position = 7000
oTable.TableColumnSeparators = oTblColSeps
nicht wirklich funktionieren kann, da .Position keine relative, sondern eine absolute Angabe ist.
Im Besipiel würde der erste Spaltentrenner entsprechend bei Position 7000 stehen, der zweite Spaltentrenner bei Position 1000. Das geht logischerweise nicht.
Möglicherweise hat es deshalb nicht geklappt.
Der richtige Ansatz wäre:
Code: Alles auswählen
oTblColSeps = oTable.TableColumnSeparators
oTblColSeps(0).Position = 8000
oTblColSeps(1).Position = 9000
oTblColSeps(2).Position = 16000
oTable.TableColumnSeparators = oTblColSeps
Irgendwo habe ich allerdings gelesen, dass die Breiten sich insgesamt auf 10000 addieren müssen oder so - am besten einfach mal mit rumspielen, ich werd das bei Gelegenheit auch mal selber testen.
Re: Writer-Tabelle Spaltenbreiten-Macro
Verfasst: Mi, 29.09.2010 23:17
von plohrer
Super. Ich sehe, dieses Forum ist gut besetzt... Danke viel mal . Ich werde es auch mal durchtesten .... recht herzlichen Dank trotzdem für die Bemühungen.