Textpassage löschen
Moderator: Moderatoren
Textpassage löschen
Hallo.
Ich habe das Problem, dass ich gerne eine Textpassage (Adressblock) in einem Writer-Dokument über ein Makro in Openoffice Basic befüllen möchte. Wenn ich das Makro ein zweites mal ausführen, wir der bereits befüllte Teil jedoch nicht ersetzt sondern nach unten verschoben. Daher suche ich eine Möglichkeit, die alte Textpassage bei jedem Aufruf zu löschen. Ich suche mir über thiscomponent.Bookmarks.getByName("Adressfeld").Anchor eine Textmarke und schreibe ab dort über Cursor.String den Text in das Dokument. ich habe auch eine zweite Textmarke (Adressfeldende) gesetzt, die das Ende des Adressfeldes markieren soll. Jetzt wäre eine Funktion schön, die mir zwischen den beiden Textmarken den Text löscht. Gibt es so etwas oder gibt es andere Möglichkeiten, mein Problem zu lösen?
Danke und Gruß
Harry
Ich habe das Problem, dass ich gerne eine Textpassage (Adressblock) in einem Writer-Dokument über ein Makro in Openoffice Basic befüllen möchte. Wenn ich das Makro ein zweites mal ausführen, wir der bereits befüllte Teil jedoch nicht ersetzt sondern nach unten verschoben. Daher suche ich eine Möglichkeit, die alte Textpassage bei jedem Aufruf zu löschen. Ich suche mir über thiscomponent.Bookmarks.getByName("Adressfeld").Anchor eine Textmarke und schreibe ab dort über Cursor.String den Text in das Dokument. ich habe auch eine zweite Textmarke (Adressfeldende) gesetzt, die das Ende des Adressfeldes markieren soll. Jetzt wäre eine Funktion schön, die mir zwischen den beiden Textmarken den Text löscht. Gibt es so etwas oder gibt es andere Möglichkeiten, mein Problem zu lösen?
Danke und Gruß
Harry
Hey Harry,
na, wenn du schon zwei Bookmarks hast, kannst du zuerst den Cursor auf Bookmark1 plazieren. Von dort aus gehst du zu Bookmark2 und setzt den Expanse-Flag (der zweite Parameter) auf true, dadurch wird der überstrichene Text "markiert". Jetzt kannst du den neuen Text schreiben -dadurch wird der bestehende überschrieben. Aber teste das zunächst aus: Wahrscheinlich musst du vom Ende-Bookmark ein Zeichen zurück gehen, sonst wird die Endemarke gleich mit ersetzt - dann funktioniert das beim zweiten mal nichts mehr.
Für Details, poste deinen Makrocode - dann könne wir dran "rumpfriemeln"
Gruss
Thomas
na, wenn du schon zwei Bookmarks hast, kannst du zuerst den Cursor auf Bookmark1 plazieren. Von dort aus gehst du zu Bookmark2 und setzt den Expanse-Flag (der zweite Parameter) auf true, dadurch wird der überstrichene Text "markiert". Jetzt kannst du den neuen Text schreiben -dadurch wird der bestehende überschrieben. Aber teste das zunächst aus: Wahrscheinlich musst du vom Ende-Bookmark ein Zeichen zurück gehen, sonst wird die Endemarke gleich mit ersetzt - dann funktioniert das beim zweiten mal nichts mehr.
Für Details, poste deinen Makrocode - dann könne wir dran "rumpfriemeln"

Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Hallo Toxitom.
Mein Sourcecode sieht folgendermaßen aus:
Cursor = ThisComponent.Text.createTextCursor()
Bookmark = thiscomponent.Bookmarks.getByName("Adressfeld").Anchor
Bookmark2 = thiscomponent.Bookmarks.getByName("Adressfeldende").Anchor
Cursor.gotorange(Bookmark, False)
...
Cursor.String = adressblock
Solch einen Befehl zum Markieren habe ich schon gesucht, allerdings nicht gefunden.
Gruß und Danke
Harryh99
Mein Sourcecode sieht folgendermaßen aus:
Cursor = ThisComponent.Text.createTextCursor()
Bookmark = thiscomponent.Bookmarks.getByName("Adressfeld").Anchor
Bookmark2 = thiscomponent.Bookmarks.getByName("Adressfeldende").Anchor
Cursor.gotorange(Bookmark, False)
...
Cursor.String = adressblock
Solch einen Befehl zum Markieren habe ich schon gesucht, allerdings nicht gefunden.
Gruß und Danke
Harryh99
Zuletzt geändert von harryh99 am Mi, 30.11.2005 16:17, insgesamt 1-mal geändert.
Hallo Benamin,
na, dann hast du doch schon alles, was du braucht. Füge einfach eine Zeile hinzu, das sollte es dan auch schon gewesen sein.
Aber wie gesagt - könnte sein, dass deine Bookmark damit mit gelöscht wird. Da musst du ein wenig experimentieren
Der Cursor behält sich seine einmal zuigewiesene Position. Gehst du dann zur nächsten, kannst du den Schalte auf True stellen, dann wird von der Ausgangsposition bis zur Zielposition alles markiert (beim Textcursor nicht sichtbar!).
Weist du nun einen neuen String zu, wird der markierte Inhalt überschrieben - eben so wie im realen Writer....
Gruss
Thomas
na, dann hast du doch schon alles, was du braucht. Füge einfach eine Zeile hinzu, das sollte es dan auch schon gewesen sein.
Aber wie gesagt - könnte sein, dass deine Bookmark damit mit gelöscht wird. Da musst du ein wenig experimentieren

Code: Alles auswählen
Cursor = ThisComponent.Text.createTextCursor()
Bookmark = thiscomponent.Bookmarks.getByName("Adressfeld").Anchor
Bookmark2 = thiscomponent.Bookmarks.getByName("Adressfeldende").Anchor
Cursor.gotorange(Bookmark, False)
Cursor.gotorange(Bookmark2, True)
...
Cursor.String = adressblock
Weist du nun einen neuen String zu, wird der markierte Inhalt überschrieben - eben so wie im realen Writer....
Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
genau was ich suche
Hallo
Code ist genau das was ich suche.
Aber bei mir schmeisst das Makro einen Ausnahmefehler. Und zwar bei der Code zeile.
Cursor.gotorange(bookmark1, False)
Liegt es villeicht daran das die beiden Bookmarks innerhalb einer tabelle liegen.
mein Code:
Cursor = ThisComponent.Text.CreateTextCursor()
bookmark1 = thiscomponent.Bookmarks.getByName("Asp").Anchor
bookmark2 = thiscomponent.Bookmarks.getByName("Asp_end").Anchor
Cursor.gotorange(bookmark1, False)
Cursor.gotorange(bookmark2, True)
Cursor.String = "hans"
Fehler:
Es ist eine Exception aufgetreten.
Com.sun.star.uno.RuntimeException.
Message:.
Code ist genau das was ich suche.
Aber bei mir schmeisst das Makro einen Ausnahmefehler. Und zwar bei der Code zeile.
Cursor.gotorange(bookmark1, False)
Liegt es villeicht daran das die beiden Bookmarks innerhalb einer tabelle liegen.
mein Code:
Cursor = ThisComponent.Text.CreateTextCursor()
bookmark1 = thiscomponent.Bookmarks.getByName("Asp").Anchor
bookmark2 = thiscomponent.Bookmarks.getByName("Asp_end").Anchor
Cursor.gotorange(bookmark1, False)
Cursor.gotorange(bookmark2, True)
Cursor.String = "hans"
Fehler:
Es ist eine Exception aufgetreten.
Com.sun.star.uno.RuntimeException.
Message:.
Hey lysienne,
In dem Fall musst du den Textcursor innerhalb der Tabellenzelle erzeugen - nicht im Textteil.
Also die Zeile
Zum Beispiel:
Hier wird der Cursor in der Zelle "C1" der ersten Texttabelle erzeugt und dann am Bookmark-Anker plaziert.
Gruss
Thomas
Ja, siehe auch anderen Post.Liegt es villeicht daran das die beiden Bookmarks innerhalb einer tabelle liegen.
In dem Fall musst du den Textcursor innerhalb der Tabellenzelle erzeugen - nicht im Textteil.
Also die Zeile
Muss anders aussehen!Cursor = ThisComponent.Text.CreateTextCursor()
Zum Beispiel:
Code: Alles auswählen
oCell=ThisComponent.TextTables(0).getCellByName("C1") cursor=oCell.createTextCursorByRange(oBookmark.anchor)
Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic