Seite 1 von 1

TextFrames / TextTables kopieren

Verfasst: Fr, 29.06.2012 15:28
von Colster
Hallo,

ich möchte mit einem Makro einen TextFrame aus einem Writer-Dokument kopieren und in das gleiche Dokument an anderer Stelle wieder einfügen. Das kann doch eigentlich nicht so schwer sein.
Bisher behelfe ich mir damit, dass ich einen neuen Frame erstelle:

Code: Alles auswählen

oFrame = oListDoc.createInstance("com.sun.star.text.TextFrame")
und dann die relevanten Eigenschaften von dem Original-Frame übertrage:

Code: Alles auswählen

	With oFrame 	
			.HoriOrient = oFrameOrg.HoriOrient
			.HoriOrientRelation = oFrameOrg.HoriOrientRelation
			.Height = oFrameOrg.Height
			.Width = oFrameOrg.Width
			.rightBorder = oFrameOrg.rightBorder
			.leftBorder = oFrameOrg.leftBorder
			.topBorder = oFrameOrg.topBorder						
			.bottomBorder = oFrameOrg.bottomBorder			
			.Name = "Rahmen" + cStr(BId)
		End With
oFrameOrg ist dabei der Ausgangsframe. Mit dieser Methode bin ich aber nicht sicher, wirklich alle Eigenschaften zu erwischen. Das geht bestimmt auch eleganter? :D

Vielen Dank.

Re: TextFrames / TextTables kopieren

Verfasst: Do, 16.08.2012 12:07
von Colster
Ich habe jetzt eine Lösung gefunden, vielleicht kann es jemand anders auch gebrauchen. Dieser Codeschnipsel läuft in einem Writer-Dokument, in dem ein Rahmen (Rahmen1, so heißt automatisch der erste Rahmen) erstellt worden ist. Damit das verändern der Zielposition einen Effekt hat, muss der Rahmen an der Seite oder am Absatz verankert werden.
Von diesem Rahmen werden dann alle Eigenschaften exakt kopiert, am Schluss die Koordinaten verändert und dann wieder eingefügt.
Ich hatte angenommen, dass die Eigenschaften, die auf READONLY stehen nicht geschrieben werden können, stimmt aber nicht. Weiß das vielleicht jemand, was das READONLY besagt? In der API steht, dass diese Eigenschaften schreibgeschützt sind ... :?

Mit Gruß

Colster

Code: Alles auswählen

Sub Main
dim oProps() as Object 

oDoc = thiscomponent
oText = oDoc.text
oCrs = oText.CreateTextCursor()
oFrame = oDoc.getTextFrames().getByName("Rahmen1")
oFrame1 =  oDoc.createInstance("com.sun.star.text.TextFrame")
oPSI = oFrame.getPropertySetInfo()
oProps() = oPSI.getProperties()
MsgBox cstr(com.sun.star.beans.PropertyAttribute.READONLY)
For i = 0 to ubound(oProps())
'	MsgBox oProps(i).Name + "  " + cstr(oProps(i).attributes )
	'if oProps(i).attributes And com.sun.star.beans.PropertyAttribute.READONLY = 0 then
		oFrame1.setPropertyValue(oProps(i).Name,oFrame.getPropertyValue(oProps(i).Name))
	'Endif 
Next i
oFrame1.HoriOrientPosition = 5000
oFrame1.VertOrientPosition = 7000
oDoc.Text.insertTextContent(oCrs,oFrame1,False)
End Sub