Makro funktioniert nicht innerhalb einer Tabelle

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Makro funktioniert nicht innerhalb einer Tabelle

Re: Makro funktioniert nicht innerhalb einer Tabelle

von Carlos » Di, 02.06.2009 21:30

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

Re: Makro funktioniert nicht innerhalb einer Tabelle

von turtle47 » Di, 02.06.2009 09:59

Hi Carlos,
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?
Sollte so funktionieren:

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
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. :lol:

Viel Spass damit.

Jürgen

Re: Makro funktioniert nicht innerhalb einer Tabelle

von Carlos » Mo, 01.06.2009 10:11

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

Re: Makro funktioniert nicht innerhalb einer Tabelle

von turtle47 » So, 31.05.2009 23:30

Hallo Carlos,
Carlos hat geschrieben:Aber innerhalb der Tabelle funktioniert es nicht.
Man muss den Cursor zunächst per Code in die Tabelle setzen, dann mit dem Cursor den Text markieren und dann das Format zuweisen.

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
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:

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
Hilft das weiter?

Jürgen

Re: Makro funktioniert nicht innerhalb einer Tabelle

von Carlos » So, 31.05.2009 21:12

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!

Re: Makro funktioniert nicht innerhalb einer Tabelle

von manese » So, 31.05.2009 19:18

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

Makro funktioniert nicht innerhalb einer Tabelle

von Carlos » So, 31.05.2009 13:51

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!

Nach oben