Text an Lesezeichen überschreiben

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

Moderator: Moderatoren

lysienne
Beiträge: 7
Registriert: Mi, 04.01.2006 10:22

Text an Lesezeichen überschreiben

Beitrag von lysienne »

Hallo

ich habe ein Makro das text an einem Lesezeichen einfügt. Wenn ich das Makro nochmal ausführe wird der neue Text für den alten gesetzt. Ich will ab er das dieser überschrieben wird.

hier mein Code

dim oDoc as Object
dim obookmarks as Object
dim obookmark as Object
dim oCursor as Object

oDoc=thisComponent
oBookmarks = oDoc.getBookmarks()

oBookmark = oBookmarks.getByName("Asp")
oCursor = oDoc.Text.createTextCursorByRange(oBookmark.Anchor)
oCursor.string = "Hans"

#####
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

Hey lysienne,
Wenn ich das Makro nochmal ausführe wird der neue Text für den alten gesetzt. Ich will ab er das dieser überschrieben wird.
Ich denke, du meinst nicht "für" sondern "vor"? Das wäre das normale Verhalten.
Natürlich kannst du auch bestehenden Text ersetzen.

Code: Alles auswählen

oCursor = oDoc.Text.createTextCursorByRange(oBookmark.Anchor) 
Mit dieser Zeile erzeugst du einen Text-Cursor am Punkt oBookmark.Anchor. Willst du jetzt die nächsten 5 Zeichen "markieren", so bewegst du den Cursor um fünf Zeichen vorwärts und markierst diese:

Code: Alles auswählen

oCursor.goRight(5, true)
Wenn du jetzt am Cursor den Sting einfügst, werden die markierten Zeichen überschrieben.

Die Problematik in deinem Fall hat jedoch zwei "Tücken":
Erstens musst du wissen, was für ein "alter" Text da drin steht, um ihn entsprechend zu markieren. Einfach, wenn es sich immer nur um ein Wort handelt, oder bis zum Ende des Absatzes geht..., kompliziert, wenn es beliebige Strings innerhalb von Fliesstext sind.
Zweitens: Durch bewegen des Cursors und markieren des Bereiches wird die Textmarke mit markiert und dadurch überschrieben (sprich: gelöscht). Die musst du dann entweder neu einfügen oder insgesamt dein Dokument anders planen, zum Beispiel so, dass nach der Bookmark zunächst ein Leerzeichen folgt und dann erst der Text. Dann kannst du sie immer erhalten:

Code: Alles auswählen

oBookmark = oBookmarks.getByName("Asp")
oCursor = oDoc.Text.createTextCursorByRange(oBookmark.Anchor)
oCursor.goRight(1, false)  'bewegt den Cursor um 1 Zeichen vorwärts
REM oCursor.gotoEndOfWord(true) 'bewegt den Cursor um ein Wort
oCursor.string = "Hans"   'ersetzt das Wort durch Hans
Wichtig Hierbei: Das erste Zeichen nach der Bookmark sollte eben ein Leerzeichen sein!

Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
lysienne
Beiträge: 7
Registriert: Mi, 04.01.2006 10:22

Beitrag von lysienne »

Danke für deine Hilfe.
So funktioniert es innerhalb von "normalem text".
ich hatte vergessen zu erwähnen, das die Bookmarks innerhalb einer Tabelle sind. Und es schmeisst es mir einen Laufzeitfehler.


Habe hier im Forum noch einen Beitrag gefunden der mit 2 Bookmarks arbeitet. Geht aber auch nicht in einer Tabelle.


Noch eine Idee?
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

Hey lysienne,
ich hatte vergessen zu erwähnen, das die Bookmarks innerhalb einer Tabelle sind.
Tuia, soche "kleinigkeiten" sollte man erwähnen :wink:

Die sind ziemlich entscheident.

OK, dann lad dir am die "Rechnungsvorlage" von -> hier herunter. Dort werden an Bookmarks in einer Tabelle die laufenden Rechnungsnummern eingetragen. Dort findest du dann auch die fehlenden Codeteile.

Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
lysienne
Beiträge: 7
Registriert: Mi, 04.01.2006 10:22

Beitrag von lysienne »

Danke toxitom

bin halt doch nur blond :oops:
Antworten