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)
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())
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