TextFrames / TextTables kopieren

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

Moderator: Moderatoren

Colster
**
Beiträge: 27
Registriert: Mi, 14.12.2005 13:44

TextFrames / TextTables kopieren

Beitrag 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.
Im Ganzen liegt der Nutzen mehr im Gebrauch als im Eigentum! (Aristoteles)
Colster
**
Beiträge: 27
Registriert: Mi, 14.12.2005 13:44

Re: TextFrames / TextTables kopieren

Beitrag 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
Im Ganzen liegt der Nutzen mehr im Gebrauch als im Eigentum! (Aristoteles)
Antworten