Hallo Zusammen,
ich habe ein ganz einfaches Makro erstellt, dass auch unter 'normalen' Bedingungen einwandfrei funktioniert.
Das Makro erzeugt einfach einen bestimmten Abstand über einem Absatz per Tastendruck.
Nun habe ich eine lange Tabelle mit drei Spalten. In diese Tabelle schreibe ich viel rein. Ich habe das Makro erzeugt, damit das Geschriebene innerhalb der Tabelle optisch besser gegliedert ist.
Aber innerhalb der Tabelle funktioniert es nicht.
Befindet sich der Cursor innerhalb (!) der Tabelle und führe ich das Makro aus, wird der Abstand zum Absatz ganz oben am Anfang des Dokuments, also außerhalb der Tabelle, erzeugt.
Komisch, da ja auch innerhalb der Tabelle Absätze existieren (ich schreibe innerhalb der Tabelle ganz normal mit Absätzen).
Weiß jemand Rat?
Herzlichen Dank!
Makro funktioniert nicht innerhalb einer Tabelle
Moderator: Moderatoren
Makro funktioniert nicht innerhalb einer Tabelle
Dell D610 OO 3.2.1; 1,86 GHz Centrino; 2GB RAM; ATI Mobility Radeon X300 64 MB u. Dell D820 OO 4.0.1; CoreDuo T2500; 4GB RAM, NVIDIA Quadro NVS 110M; Dell D620 OO 4.0.1 Core Duo T2300, 3GB RAM, SSD Crucial 128GB; jew. XP Prof. Serv. P. 3
Re: Makro funktioniert nicht innerhalb einer Tabelle
Hallo Carlos,
um dir helfen zu können, müsste man dein Makro kennen.
Kopiere es doch mal, dann lässt sich Genaueres sagen!
Alles Gute
matthias
um dir helfen zu können, müsste man dein Makro kennen.
Kopiere es doch mal, dann lässt sich Genaueres sagen!
Alles Gute
matthias
Re: Makro funktioniert nicht innerhalb einer Tabelle
Hallo Matthias,
danke für Deine Antwort.
Hier ist es:
sub Absatz
rem ----------------------------------------------------------------------
rem define variables
dim document as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem ----------------------------------------------------------------------
dim args1(3) as new com.sun.star.beans.PropertyValue
args1(0).Name = "TopBottomMargin.TopMargin"
args1(0).Value = 101
args1(1).Name = "TopBottomMargin.BottomMargin"
args1(1).Value = 0
args1(2).Name = "TopBottomMargin.TopRelMargin"
args1(2).Value = 100
args1(3).Name = "TopBottomMargin.BottomRelMargin"
args1(3).Value = 100
dispatcher.executeDispatch(document, ".uno:TopBottomMargin", "", 0, args1())
end sub
Ich muss dazu sagen, dass ich keine eigentliche Programmierarbeit mache. Ich drücke auf Start, mache die Schritte per Maus und drücke auf 'Makro beenden'.
Wenn ich mir aber als Laie das Makro anschaue, fällt mir 'TopBottomMargin' auf. Ich weiß nicht wie das reinkommt. Mit dem Cursor war ich jedenfalls immer innerhalb (!) der Tabelle.
Vielleicht kann jemand etwas damit anfangen.
Vielen Dank!
danke für Deine Antwort.
Hier ist es:
sub Absatz
rem ----------------------------------------------------------------------
rem define variables
dim document as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem ----------------------------------------------------------------------
dim args1(3) as new com.sun.star.beans.PropertyValue
args1(0).Name = "TopBottomMargin.TopMargin"
args1(0).Value = 101
args1(1).Name = "TopBottomMargin.BottomMargin"
args1(1).Value = 0
args1(2).Name = "TopBottomMargin.TopRelMargin"
args1(2).Value = 100
args1(3).Name = "TopBottomMargin.BottomRelMargin"
args1(3).Value = 100
dispatcher.executeDispatch(document, ".uno:TopBottomMargin", "", 0, args1())
end sub
Ich muss dazu sagen, dass ich keine eigentliche Programmierarbeit mache. Ich drücke auf Start, mache die Schritte per Maus und drücke auf 'Makro beenden'.
Wenn ich mir aber als Laie das Makro anschaue, fällt mir 'TopBottomMargin' auf. Ich weiß nicht wie das reinkommt. Mit dem Cursor war ich jedenfalls immer innerhalb (!) der Tabelle.
Vielleicht kann jemand etwas damit anfangen.
Vielen Dank!
Dell D610 OO 3.2.1; 1,86 GHz Centrino; 2GB RAM; ATI Mobility Radeon X300 64 MB u. Dell D820 OO 4.0.1; CoreDuo T2500; 4GB RAM, NVIDIA Quadro NVS 110M; Dell D620 OO 4.0.1 Core Duo T2300, 3GB RAM, SSD Crucial 128GB; jew. XP Prof. Serv. P. 3
Re: Makro funktioniert nicht innerhalb einer Tabelle
Hallo Carlos,
Versuche mal folgenden Code:
Dieser durchläuft alle Tabellen in einem Dokument und setzt den eingestellten Abstand.
Wenn Du nur den Inhalt einer Tabelle formatieren willst, dann setze den Cursor in die Tabelle und starte folgendes Makro:
Hilft das weiter?
Jürgen
Man muss den Cursor zunächst per Code in die Tabelle setzen, dann mit dem Cursor den Text markieren und dann das Format zuweisen.Carlos hat geschrieben:Aber innerhalb der Tabelle funktioniert es nicht.
Versuche mal folgenden Code:
Code: Alles auswählen
Sub Absatz_Formatierung_Tab
Dim oDoc as Object
Dim oAlleTabellen as Object, oEinzeleneTab as Object
oDoc=ThisComponent
If Not oDoc.SupportsService("com.sun.star.text.TextDocument") then exit sub
oAlleTabellen=oDoc.getTextTables 'alle Tabellen "holen"
for iAnzTab = 0 to oAlleTabellen.Count-1 'Schleife für die Tabellen setzen
oEinzeleneTab = oAlleTabellen.getByIndex(iAnzTab)'Tabelle per Index ansprechen
oTableCurs = oEinzeleneTab.createCursorByCellName("A1")'Cursor in Zelle setzen
oTableCurs.gotostart (False) 'Cursor gehe zum Anfang
oTableCurs.gotoend(True) 'Cursor gehe zum Ende und markiere den Inhalt
oTableCurs.ParaTopMargin = 100 'zuweisen Format vor Absatz
oTableCurs.ParaBottomMargin = 0 'zuweisen Format nach Absatz
next iAnzTab 'Schleife nächste Tabelle
msgbox "Es wurde(n) " & iAnzTab & " Tabelle(n) aktualisiert",64, "Absatzformat Tabelle"
End Sub
Wenn Du nur den Inhalt einer Tabelle formatieren willst, dann setze den Cursor in die Tabelle und starte folgendes Makro:
Code: Alles auswählen
Sub Absatz_Formatierung_Tab1
oDoc = ThisComponent
oVC = oDoc.CurrentController.getViewCursor
If Not isEmpty(oVC.TextTable) then
TableName = oVC.TextTable.Name
oAlleTabellen=oDoc.getTextTables
oEinzeleneTab = oAlleTabellen.getByName(TableName)
oTableCurs = oEinzeleneTab.createCursorByCellName("A1")
oTableCurs.gotostart (False)
oTableCurs.gotoend(True)
oTableCurs.ParaTopMargin = 100 'vor Absatz
oTableCurs.ParaBottomMargin = 0 'nach Absatz
end if
End Sub
Jürgen
Software hat keinen Verstand - benutze deinen eigenen...!
Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
Re: Makro funktioniert nicht innerhalb einer Tabelle
Hallo Jürgen,
erst einmal sehr herzlichen Dank für Deine Mühe!
Leider hat es nicht ganz geklappt. Das liegt aber wahrscheinlich daran, dass ich versuchen sollte die Zielsetzung vom Makro genauer zu beschreiben.
Das Dokument besteht aus einer (!) Tabelle. Die Tabelle ist sehr groß (hat drei Spalten), sie geht über mehrere Seiten, hat also viele Zeilen.
Innerhalb der Spalten und Zeilen schreibe ich viel rein, mit kleiner Schrift und sehr eng zusammengedrückt (kaum Zeilenabstand).
Um die Masse an Geschriebenem besser visuell zu strukturieren, sollen bestimmte, nicht alle Zeilen einen größeren Abstand zur Zeile drüber erhalten, der vom Makro erzeugt werden soll.
Dein Makro (ich habe das zweite verwendet, weil ich ja nur eine Tabelle im Dokument habe) hat insofern funktioniert, da es den Abstand erzeugt hat. Jedoch leider für alle Zeilen.
Zielsetzung wäre also, mit dem Cursor in die betreffende Zeile reinzuspringen, die einen größeren Abstand erhalten soll und nur in dieser Zeile erzeugt das Makro den größeren Abstand. Ist dies möglich?
Herzlichen Dank!
Gruß, Carlos
erst einmal sehr herzlichen Dank für Deine Mühe!
Leider hat es nicht ganz geklappt. Das liegt aber wahrscheinlich daran, dass ich versuchen sollte die Zielsetzung vom Makro genauer zu beschreiben.
Das Dokument besteht aus einer (!) Tabelle. Die Tabelle ist sehr groß (hat drei Spalten), sie geht über mehrere Seiten, hat also viele Zeilen.
Innerhalb der Spalten und Zeilen schreibe ich viel rein, mit kleiner Schrift und sehr eng zusammengedrückt (kaum Zeilenabstand).
Um die Masse an Geschriebenem besser visuell zu strukturieren, sollen bestimmte, nicht alle Zeilen einen größeren Abstand zur Zeile drüber erhalten, der vom Makro erzeugt werden soll.
Dein Makro (ich habe das zweite verwendet, weil ich ja nur eine Tabelle im Dokument habe) hat insofern funktioniert, da es den Abstand erzeugt hat. Jedoch leider für alle Zeilen.
Zielsetzung wäre also, mit dem Cursor in die betreffende Zeile reinzuspringen, die einen größeren Abstand erhalten soll und nur in dieser Zeile erzeugt das Makro den größeren Abstand. Ist dies möglich?
Herzlichen Dank!
Gruß, Carlos
Dell D610 OO 3.2.1; 1,86 GHz Centrino; 2GB RAM; ATI Mobility Radeon X300 64 MB u. Dell D820 OO 4.0.1; CoreDuo T2500; 4GB RAM, NVIDIA Quadro NVS 110M; Dell D620 OO 4.0.1 Core Duo T2300, 3GB RAM, SSD Crucial 128GB; jew. XP Prof. Serv. P. 3
Re: Makro funktioniert nicht innerhalb einer Tabelle
Hi Carlos,
Das Makro ist so umfangreich weil zunächst abgefragt wird ob sich der Cursor überhaupt in einer Tabelle befindet und dann noch in welcher. Es können sich also auch mehrere Tabellen im Dokument befinden. Ausserdem wird auch die Anzahl der Spalten berücksichtigt.
Viel Spass damit.
Jürgen
Sollte so funktionieren:Carlos hat geschrieben:Zielsetzung wäre also, mit dem Cursor in die betreffende Zeile reinzuspringen, die einen größeren Abstand erhalten soll und nur in dieser Zeile erzeugt das Makro den größeren Abstand. Ist dies möglich?
Code: Alles auswählen
Sub Absatz_Formatierung_Tab2
Dim oAlleTabellen as Object, oEinzeleneTab as Object, oDoc as Object
Dim oVCurs, oTable, oCurCell
Dim i as integer, CellRow as integer
Dim myCell as String
oDoc = thisComponent
oAlleTabellen=oDoc.getTextTables
oVCurs = ThisComponent.getCurrentController().getViewCursor()
If IsEmpty(oVCurs.TextTable) Then
msgbox "Der Cursor befindet sich nicht innerhalb einer Zelle!", 48, "Absatz formatieren"
Else
oTable = oVCurs.TextTable
MyTable = oTable.name
oAll_Tables = oDoc.getTextTables
oAll_Tables=oDoc.getTextTables
oEinzeleneTab = oAll_Tables.getByName(MyTable)
myColumns=oEinzeleneTab.columns
Anz_Columns = myColumns.count
oCurCell = oVCurs.Cell
myCell = oCurCell.CellName
TabRows = CInt(Right(myCell, Len(myCell)-1)) -1
End If
If Not isEmpty(oTable) then
for i = 0 to Anz_Columns -1
oTableCurs = oTable.getCellByPosition(i,TabRows).createTextCursor()
oTableCurs.ParaTopMargin = 200 'vor Absatz
oTableCurs.ParaBottomMargin = 0 'nach Absatz
next i
end if
End Sub

Viel Spass damit.
Jürgen
Software hat keinen Verstand - benutze deinen eigenen...!
Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
Re: Makro funktioniert nicht innerhalb einer Tabelle
Hallo Jürgen,
vielen Dank für Deine nochmalige Mühe.
Leider funktioniert es nicht richtig. Es wird nicht ein größerer Abstand erzeugt für die Zeile in der der Cusor steht, sondern für die erste Zeile innerhalb einer Spalte.
Jetzt hätte ich aber ein schlechtes Gewissen dich nochmals um Hilfe zu bitten.
Ich denke, dass ich hier einfach manuell arbeite, das ist wirklich kein Drama.
Nochmals herzlichen Dank für deine Arbeit.
Gruß, Carlos
vielen Dank für Deine nochmalige Mühe.
Leider funktioniert es nicht richtig. Es wird nicht ein größerer Abstand erzeugt für die Zeile in der der Cusor steht, sondern für die erste Zeile innerhalb einer Spalte.
Jetzt hätte ich aber ein schlechtes Gewissen dich nochmals um Hilfe zu bitten.
Ich denke, dass ich hier einfach manuell arbeite, das ist wirklich kein Drama.
Nochmals herzlichen Dank für deine Arbeit.
Gruß, Carlos
Dell D610 OO 3.2.1; 1,86 GHz Centrino; 2GB RAM; ATI Mobility Radeon X300 64 MB u. Dell D820 OO 4.0.1; CoreDuo T2500; 4GB RAM, NVIDIA Quadro NVS 110M; Dell D620 OO 4.0.1 Core Duo T2300, 3GB RAM, SSD Crucial 128GB; jew. XP Prof. Serv. P. 3