Text in Platzhalter via makro einfügen

Das Textverarbeitungsprogramm

Moderator: Moderatoren

oskar99
Beiträge: 6
Registriert: Do, 23.11.2006 23:31

Text in Platzhalter via makro einfügen

Beitrag von oskar99 »

Hallo OO-Leute.

Ich habe ein Problem in einem Writer-Dok.

Ich möchte gerne einen Platzhalter (Text) in einem Writer-Dok
über ein Makro mit einem Text belegen.

In dem Makro ist eine (If-)Abfrage eingebaut und jenachdem wie die
Abfrage ausgeht, soll in dem Platzhalter <WoTag> der Wochentag eingefügt werden.

Also wenn die Abfrage 1 ergibt, soll an der Stelle des Platzhalters im
Text das Wort "Montag" eingefügt werden.

Leider habe ich nicht soviel Ahnung von der Makroprogrammierung.
Das Beispiel von der "dannenhoefer"-Seite funktioniert leider nciht:

thisComponent.getBookmarks().getByName("test").getAnchor.setString("Text einfügen")

Dort erhalte ich immer die Fehlermeldung:
"
BASIC-Laufzeitfehler
Es ist eine Exception aufgetreten.
Type: sun.com.star.container.NoSuchElementExeption
Message:.
"

Ich vermute das hier noch irgendetwas definiert werden muß?

Vielleicht kann mir hier mal jemand etwas praktisch auf die Sprünge helfen.
Danke ;)
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Beitrag von komma4 »

Du solltest dann auch eine Textmarke namens "test" im aktuellen Dokument definiert haben....

War's das schon?
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)
oskar99
Beiträge: 6
Registriert: Do, 23.11.2006 23:31

Beitrag von oskar99 »

Hallo "komma4",

nein, das wars leider nicht.
Der Platzhalter heißt <WoTag> und in 'meiner'
"dannenhoefer"-Zeile steht auch "WoTag".

Die Zeile im Posting hatte ich von der Seite kopiert und
(leider) nicht aus meinem Skript (kleiner 'Schönheitsfehler' ;)

Die Fehlermeldung bleibt aber .....

Ich habe jetzt in meinem Script, nach der Abfrage
praktisch nur diese eine Zeile zum Ersetzen der
Platzhalter drin und jetzt eher die Vermutung, das ich da
evtl. noch Variablen oder OO-Funktionen deklarieren muß,
oder sowas in der Art.... :?

Wie gesagt, OO-Scripting ist nicht so meine Stärke.... :oops:
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Beitrag von komma4 »

Die Code-Zeile funktioniert bei mir (hier: WinXPpro/OOo2.0.3) einwandfrei.

Du hast darauf geachtet, dass die Textmarkennamen case-sensitive sind?
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)
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

Hey Leute,

bitte genau sein mit der Bezeichnung - sonst gibt es Missverständnisse.

Dier Code von Dannenhöfer arbeitet mit Textmarken (Bookmarks), Oskar99 arbeitt meiner Ansicht nicht mit Textmarken, sondern Feldern (Platzhaltern) oder reinem Text. Das ist noch nicht klar.
Dann kann der Code natürlich nicht funktionieren - es wird keine Textmarke gefunden.

Also: Oskar99 soll mal exakt beschreiben, was genau er denn nun eigentlich im Text benutzt und ersetzt haben will - und am besten, wie er diese "Marke" eingefügt hat.

Dann sehn wir weiter :-)

Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
oskar99
Beiträge: 6
Registriert: Do, 23.11.2006 23:31

Beitrag von oskar99 »

Stimmt, ich hatte erst Platzhalter verwendet.

Das habe ich nun zwar in Textmarken geändert, aber die
Fehlermeldung bleibt gleich.
(Im Text heißt die Textmarke ebenfalls 'Wochentag')

(Das Makro wird beim Öffnen der Datei gestartet)
Anbei ein Auszug aus meinem Makro für die ersten beiden Wochentage:

-------------------------
Sub Main

Dim sWoTag As String

sWoTag=Inputbox("Bitte Wochentagnummer eingeben")

if sWoTag =1 then thisComponent.getBookmarks().getByName("Wochentag").getAnchor.setString("Montag")
if sWoTag =2 then thisComponent.getBookmarks().getByName("Wochentag").getAnchor.setString("Dienstag")


End Sub
-------------------------

Ich hoffe das Beispiel hilft bei der Fehlersuche weiter.

Eingefügt über:

Einfügen -> Feldbefehl -> Andere -> [Referenzen] / Textmarke / Referenztext

bzw. in meiner ersten Anfrage mit den Platzhaltern:

Einfügen -> Feldbefehl -> Andere -> [Funktionen] / Platzhalter / Text

Sofern ich Platzhalter statt Textmarken verwende, wie würde
der Code dann aussehen müssen, bzw. welche Variante
wäre die Bessere für das obige Beispiel?

Danke vorab für die Hilfe.

------------
WinXP SP2 / OO 2.0.4
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

Hey Oskar,
Das habe ich nun zwar in Textmarken geändert, aber die
Fehlermeldung bleibt gleich.
?

Sicher? An gleicher Stelle mit gleicher Meldung
sWoTag=Inputbox("Bitte Wochentagnummer eingeben")

if sWoTag =1 then thisComponent....
Das kann nicht funktionieren! Die Inputbox liefert - wie du richtig angenommen hast - nur "Strings" zurück, dann muss natürlich die Abfragebedingung auch dementsprechend ausfallen, also:

Code: Alles auswählen

if sWoTag = "1"  then thisComponent....
Tia - und dann funktioniert dein Code :-)

Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
oskar99
Beiträge: 6
Registriert: Do, 23.11.2006 23:31

Beitrag von oskar99 »

Hallo Toxitom,

nein, leider funktioniert auch dann der Code nicht :cry:

Weder mit noch ohne ' " '...

Die Fehlermeldung ist immer noch die gleiche:

"
BASIC-Laufzeitfehler
Es ist eine Exception aufgetreten.
Type: sun.com.star.container.NoSuchElementExeption
Message:.
"

Mach ich evtl. beim Einfügen der Textmarken / Platzhalter
einen Fehler? (Die Vorgehensweise habe ich ja weiter oben
schon beschrieben)
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Beitrag von Stephan »

Eingefügt über:

Einfügen -> Feldbefehl -> Andere -> [Referenzen] / Textmarke / Referenztext

Dann hast Du keine Textmarke eingefügt sondern versucht eine Referenz (auf eine nichtvorhandene) Textmarke einzufügen. Da die Textmarke nun nicht da ist hast Du im Dokument eine sog. unaufgelöste Referenz.

Die Fehlermeldung:
Die Fehlermeldung ist immer noch die gleiche:

"
BASIC-Laufzeitfehler
Es ist eine Exception aufgetreten.
Type: sun.com.star.container.NoSuchElementExeption
Message:.
"
steht damit in Einklang.




Das Einfügen von Textmarken geht über Einfügen-Textmarken.




Gruß
Stephan
oskar99
Beiträge: 6
Registriert: Do, 23.11.2006 23:31

Beitrag von oskar99 »

:D

Daaaankeeeee dem großen OO-Guru :idea: !

Das wars. So funktioniert es endlich.

Manchmal sieht man den Wald vor lauter Bäumen nicht :roll:


Wenn ich die anfangs erwähnten Platzhalter nutzen würde,
was müsste ich dann in der Makro-Zeile verändern?
Gibt es auch dafür irgendwo ein Beispiel?
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Beitrag von Stephan »

Wenn ich die anfangs erwähnten Platzhalter nutzen würde,
was müsste ich dann in der Makro-Zeile verändern?

Code: Alles auswählen

Sub Feld_suchen 
Dim sWoTag As String 
sWoTag=Inputbox("Bitte Wochentagnummer eingeben") 
if sWoTag =1 then wert = "Montag"
if sWoTag =2 then wert = "Dienstag" 
oViewCursor = ThisComponent.CurrentController.getviewCursor()
TextFieldEnum = ThisComponent.getTextFields.createEnumeration
While TextFieldEnum.hasMoreElements()
	TextField = TextFieldEnum.nextElement()
	If TextField.supportsService("com.sun.star.text.TextField.JumpEdit") Then
		If  TextField.PlaceHolder = "Wochentag" Then
			oViewCursor.gotorange(Textfield.Anchor,false)
			oViewCursor.String = wert
			Exit Sub
		End If
	End If
Wend
End Sub

Gruß
Stephan
oskar99
Beiträge: 6
Registriert: Do, 23.11.2006 23:31

Beitrag von oskar99 »

Danke.

Da werde ich mich dann gleich mal dran versuchen.

:D
Antworten