BITTE helfen Sie uns HEUTE mit einer SPENDE
Helfen Sie das LibreOffice Forum zu erhalten!

❤️ DANKE >><< DANKE ❤️

> KEINE WERBUNG FÜR REGISTRIERTE BENUTZER!<
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des LibreOffice Forums verwendet.
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

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

Alles zur Programmierung im LibreOffice.
Antworten
DavidG
Beiträge: 195
Registriert: Do 22. Mär 2018, 21:41

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

Beitrag von DavidG » Mi 23. Jan 2019, 21:04

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





Gruß

David
___________________
WIN 10 PRO
LO 7.4.5.1 (x64)

DavidG
Beiträge: 195
Registriert: Do 22. Mär 2018, 21:41

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

Beitrag von DavidG » Mi 23. Jan 2019, 21:35

die Antwort:

Code: Alles auswählen

oVC.TextField.TextFieldMaster.DependentTextFields(0)
Gruß

David
___________________
WIN 10 PRO
LO 7.4.5.1 (x64)

An alle, die das LibreOffice-Forum nutzen:


Bitte beteiligen Sie sich mit 7 Euro pro Monat und helfen uns bei unserem Budget für das Jahr 2024.
Einfach per Kreditkarte oder PayPal.
Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet.

❤️ Vielen lieben Dank für Ihre Unterstützung ❤️

Antworten