Seite 1 von 1
Text in Platzhalter via makro einfügen
Verfasst: Do, 23.11.2006 23:42
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

Verfasst: Fr, 24.11.2006 09:18
von komma4
Du solltest dann auch eine Textmarke namens "test" im aktuellen Dokument definiert haben....
War's das schon?
Verfasst: Fr, 24.11.2006 12:01
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....

Verfasst: Fr, 24.11.2006 13:21
von komma4
Die Code-Zeile funktioniert bei mir (hier: WinXPpro/OOo2.0.3) einwandfrei.
Du hast darauf geachtet, dass die Textmarkennamen case-sensitive sind?
Verfasst: Fr, 24.11.2006 14:33
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
Verfasst: Fr, 24.11.2006 23:01
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
Verfasst: Sa, 25.11.2006 09:23
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:
Tia - und dann funktioniert dein Code
Gruss
Thomas
Verfasst: Sa, 25.11.2006 16:13
von oskar99
Hallo Toxitom,
nein, leider funktioniert auch dann der Code nicht
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)
Verfasst: Sa, 25.11.2006 16:45
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
Verfasst: Sa, 25.11.2006 17:10
von oskar99
Daaaankeeeee dem großen OO-Guru

!
Das wars. So funktioniert es endlich.
Manchmal sieht man den Wald vor lauter Bäumen nicht
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?
Verfasst: Sa, 25.11.2006 21:10
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
Verfasst: So, 26.11.2006 10:39
von oskar99
Danke.
Da werde ich mich dann gleich mal dran versuchen.
