Textfelder per Makro füllen

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

Moderator: Moderatoren

stoni
*
Beiträge: 14
Registriert: Fr, 28.03.2008 22:47

Textfelder per Makro füllen

Beitrag von stoni »

Hallo Leute,

bin völliger Neuling in der OOo Basic Programmierung und hoffe, ihr könnt mir helfen.
Ich möchte Textfelder, die ich in einer (Writer-)Vorlagendatei definiert habe, per Makro beim Aufruf befüllen lassen. Die Daten kommen aus einem Textfile. Ich habe schon mit Bookmarks experimentiert, aber da werden die Daten bei jedem Aufruf des Dokuments neu angehängt anstatt sie zu ersetzen. Bei den Textfeldern weiß ich nicht, wie ich sie ansprechen muss, damit der Inhalt eingefügt wird.

Danke schon mal für Hilfe!

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

Re: Textfelder per Makro füllen

Beitrag von komma4 »

stoni,

zeigst Du uns Code?

Wie hast Du Dein Makro aufgerufen?


Die Inhalte sollen nach Erstellung aus der Vorlage einmalig gefüllt werden?
Oder möchtest Du -nach einem neuen Aufruf- die Werte aktualisieren (die Quell-Textdatei ändert sich?)

Andrews Makro-Dokument kennst Du?
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)
stoni
*
Beiträge: 14
Registriert: Fr, 28.03.2008 22:47

Re: Textfelder per Makro füllen

Beitrag von stoni »

Hallo komma4,

"zeigst Du uns Code?"

Code: Alles auswählen

sub AngebotAusfuellen(Nummer As String, Anrede As String, Anschrift As String, Strasse As String, _
				       Land As String, PLZ As String, Ort As String)
	Dim oDoc as Object, oBookmark as Object
	Dim oCur as Object
	
	oDoc = thisComponent
	oBookmark = oDoc.getBookmarks().getByName( "Anschrift" )
	oCur = oDoc.Text.createTextCursorbyRange(oBookmark.getAnchor().getEnd())
	oCur.string = Anschrift
	oBookmark = oDoc.getBookmarks().getByName( "Strasse" )
	oCur = oDoc.Text.createTextCursorbyRange(oBookmark.getAnchor().getEnd())
	oCur.string = Strasse
	oBookmark = oDoc.getBookmarks().getByName( "PLZ" )
	oCur = oDoc.Text.createTextCursorbyRange(oBookmark.getAnchor().getEnd())
	oCur.string = PLZ
	oBookmark = oDoc.getBookmarks().getByName( "Ort" )
	oCur = oDoc.Text.createTextCursorbyRange(oBookmark.getAnchor().getEnd())
	oCur.string = Ort
end sub
"Wie hast Du Dein Makro aufgerufen?"
Im moment noch manuell gestartet - soll aber mal beim Aufrufen des Dokuments ausgeführt werden

"Die Inhalte sollen nach Erstellung aus der Vorlage einmalig gefüllt werden?
Oder möchtest Du -nach einem neuen Aufruf- die Werte aktualisieren (die Quell-Textdatei ändert sich?)"


Letzteres. Die Quelldatei kann sich ändern. Deshalb sollen bei jedem Aufruf des Dokuments die Werte aktualisiert werden. Mit den Bookmarks funktioniert das aber nicht... Ich habe bisher nur Beispielcode gefunden, bei denen die Textfelder per Code erstellt werden, aber nicht, wie man vorhandene Textfelder dynamisch füllen/aktualisieren kann.

"Andrews Makro-Dokument kennst Du?"
Bis jetzt noch nicht - danke für den Tipp.
hol.sten
******
Beiträge: 871
Registriert: Fr, 18.11.2005 21:21

Re: Textfelder per Makro füllen

Beitrag von hol.sten »

stoni hat geschrieben:Ich habe schon mit Bookmarks experimentiert, aber da werden die Daten bei jedem Aufruf des Dokuments neu angehängt anstatt sie zu ersetzen.
Hierzu zwei Fragen:
1) Wie fügst du die Bookmarks in dein Dokument ein?
2) Warum benutzt du in deinem OOo Basic Code ".getEnd()"?

Ich mache folgendes:
1) Ich füge an der Stelle, an der ich ein Bookmark benötige, zunächst ein Leerzeichen ein, markiere dieses dann und rufe anschließend für das markierte Leerzeichen "Insert" > "Bookmark" auf.
2) In OOo Basic schreibe ich nur:

Code: Alles auswählen

...
oBookmark = oDoc.getBookmarks().getByName( "Strasse" )
oCur = oDoc.Text.createTextCursorbyRange(oBookmark.getAnchor())
oCur.string = Strasse
...
Also ohne ".getEnd()". Wenn ich das Makro jetzt mehrfach mit unterschiedlichen Parametern aufrufe, ändert sich der Inhalt der Bookmarks und wird nicht jedes Mal ans Ende angehängt.

Ein Problem kann aber mit meiner Platzierung der Bookmarks auftreten: Wenn in einer Zeile zwei Bookmarks stehen sollen, sollte zwischen den beiden Bookmarks irgendein beliebiges Zeichen stehen (auch ein Leerzeichen ist ok). Wenn zwei Bookmarks direkt nebeneinander stehen, kann OOo beim Befüllen der Bookmarks durcheinander kommen. Ich spreche hier von "kann", weil mich OOo seit 1.1.2 damit gequält hat. Bei meinem heutigen Test mit OOo 2.4.0 scheint es dieses Problem nicht mehr zu geben. Bei OOo 2.0.x gab es das Problem auch noch. Irgendwo dazwischen ist es wohl behoben worden.
stoni
*
Beiträge: 14
Registriert: Fr, 28.03.2008 22:47

Re: Textfelder per Makro füllen

Beitrag von stoni »

...danke hol.sten, das ist die Lösung gewesen. Ohne getEnd() funktioniert es wie gewollt :D
Antworten