Inputfelder per Makro füllen

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

Moderator: Moderatoren

oSIRus
Beiträge: 1
Registriert: Fr, 29.06.2007 11:26

Inputfelder per Makro füllen

Beitrag von oSIRus »

Hallo zusammen,

ich möchte per Makro Inputfelder (werden insges. ca. 10 verschiedene) im geöffneten (Writer-) Dokument füllen, und zwar mit Strings, die das Makro per Kommandozeile übergeben bekommt. Was ich bereits geschafft habe ist das entsprechende Dokument zu öffnen und dieses als PDF abzuspeichern. Nur habe ich keinen Plan wie ich die Inputfelder ansprechen bzw. füllen kann bzw. über welche Methode ich die Inputfelder vorher überhaupt einbinden muss in mein Dokument (habe da von 2 versch. Methoden gelesen).

Da ich absoluter Anfänger im Bereich Open Office Basic bin, bin ich für jede Hilfestellung dankbar.

Vielen Dank und viele Grüße,

oSIRus
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Inputfelder per Makro füllen

Beitrag von komma4 »

oSIRus,

zwei Möglichkeiten:

Code: Alles auswählen

Sub writer_setEingabefeldNeu

vEnum = thisComponent.getTextFields().createEnumeration()

If Not IsNull(vEnum) Then
Do While vEnum.hasMoreElements()
      vVal = vEnum.nextElement()
      if vVal.supportsService("com.sun.star.text.TextField.Input") then
      	vVal.getAnchor().String = "neu"
      end if 
    Loop
End if

End Sub
Das ersetzt das Eingabefeld durch den angegebenen Text. Damit entfallen aber die Eigenschaften des Eingabefeldes (Name, Hinweistext, Feldhinterlegung, Mauscursor-Änderung, etc.)

Eine andere Möglichkeit habe ich hier** gefunden:

Code: Alles auswählen

Sub writer_setEingabefeldReplace

vEnum = thisComponent.getTextFields().createEnumeration()

If Not IsNull(vEnum) Then
	Do While vEnum.hasMoreElements()
      vVal = vEnum.nextElement()
      if vVal.supportsService("com.sun.star.text.TextField.Input") then
		range = vVal.getAnchor()
		InputField = ThisComponent.createInstance("com.sun.star.text.TextField.Input")
		InputField.Content = "<your textcontent>"
		ThisComponent.Text.insertTextContent(range, InputField, False)         
		ThisComponent.Text.removeTextContent( vVal ) 
      end if 
    Loop
End if

End Sub
** Anpassung der Variablen-Namen auf dieses Beispiel durch mich


Das erzeugt an gleicher Stelle ein neues Eingabefeld mit dem gewünschten Inhalt. Hier fehlen dann noch Code-Teile zum Sichern und Übernehmen evtl. gesetzter Eigenschaften (Name, Hinweis, ...?), falls das Eingabefeld "wie zuvor" erhalten bleiben soll.


Hilft Dir das weiter?
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Antworten