Seite 1 von 1

[gelöst] Writer: Feldbefehl per API einfügen Typ: Eingabeliste

Verfasst: Mi 23. Jan 2019, 21:04
von DavidG
Hallo,

ich suche nach einer Möglichkeit Textfelder in ein Dokument einzufügen.
Hierbei geht es um den Feldtyp: Eingabeliste.
Menü Einfügen --> Feldbefehle...
Register Funktionen --> Eingabeliste


In einem Toturial habe ich diesen Code gefunden, welcher
ein DateTime-Feld in ein Dokument einfügt:

Code: Alles auswählen

Dim Doc As Object
Dim DateTimeField As Object
Dim Cursor As Object
Doc = StarDesktop.CurrentComponent
Cursor = Doc.Text.createTextCursor()
DateTimeField = Doc.createInstance("com.sun.star.text.TextField.DateTime")
DateTimeField.IsFixed = False
DateTimeField.IsDate = True
Doc.Text.insertTextContent(Cursor, DateTimeField, False)
Nun habe ich in der API geforscht, aber keine adäquate
Instanz für den Feldtyp "Eingabeliste" gefunden:
createInstance("com.sun.star.text.TextField.???")

Ein aufgezeichnetes Makro sieht so aus:

Code: Alles auswählen

document= ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dim args1(5) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Type"
args1(0).Value = 42
args1(1).Name = "SubType"
args1(1).Value = 0
args1(2).Name = "Name"
args1(2).Value = "nListe"
args1(3).Name = "Content"
args1(3).Value = "xx1ÿxx2ÿxx3ÿxx4"
args1(4).Name = "Format"
args1(4).Value = 0
args1(5).Name = "Separator"
args1(5).Value = " "

dispatcher.executeDispatch(document, ".uno:InsertField", "", 0, args1())
Das Trennzeichen für die Einträge in der Eingabeliste = ÿ
Aus dieser Anweisung (args1(3).Value = "xx1ÿxx2ÿxx3ÿxx4")ergibt sich dann eine Liste wie folgt
xx1
xx2
xx3
xx4

Ich brauche einen funktionierende Code auf Basis der API, weil die Dispatcher-Methode
nach mehrmalige Aufruf (ca. 200) über eine Schleife zu einem Laufzeitfehler führt.
Ausserdem werden die Felder nicht an der korrekten Stelle eingefügt,
obwohl der Viewcursor richtig positioniert wurde.
Erkennbar daran:
Wenn der Dispatcher-Abschnitt auskommentiert wird, dann werden
die Formatvorlagen für die rechte und linke Seite des Buchs korrekt an der
Viewcursor-Position übernommen, dieses von Seite 2 bis Seite 221.

Code: Alles auswählen

sub Eingabeliste
oDoc=ThisComponent
oCC=oDoc.CurrentController
	oVC=oDoc.GetCurrentController.ViewCursor
	nPC=oCC.PageCount

	oVC.jumpToPage(2,false)

	For i = 2 to 221
		oVC.jumpToStartOfPage(False)		

		nP=oVC.Page
		If nP mod 2 = 0 then	' gerade Seite?
			' gerade Seitenummer = linke Seite
			oVC.ParaStyleName="Standard 9pt rechts bündig"
rem --------------- Eingabeliste per API einfügen ------------------------------------------
				document= ThisComponent.CurrentController.Frame
				dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
				dim args1(5) as new com.sun.star.beans.PropertyValue
				args1(0).Name = "Type"
				args1(0).Value = 42
				args1(1).Name = "SubType"
				args1(1).Value = 0
				args1(2).Name = "Name"
				args1(2).Value = "nListe"
				args1(3).Name = "Content"
				args1(3).Value = "xx1ÿxx2ÿxx3ÿxx4"
				args1(4).Name = "Format"
				args1(4).Value = 0
				args1(5).Name = "Separator"
				args1(5).Value = " "

			dispatcher.executeDispatch(document, ".uno:InsertField", "", 0, args1())
REM --------------------------------------------------------------------------------------			
		Else
			' ungerade Seitenummer = rechte Seite
			oVC.ParaStyleName="Standard 9pt links bündig"
		End If
		oVC.jumpToNextPage(False)
	Next i
'	print i

End Sub






Re: [gelöst] Writer: Feldbefehl per API einfügen Typ: Eingabeliste

Verfasst: Mi 23. Jan 2019, 21:35
von DavidG
die Antwort:

Code: Alles auswählen

oVC.TextField.TextFieldMaster.DependentTextFields(0)