Hey Oli,
na ja, wenn du schon mein Buch hast ... da gibt es schon ausreichend Hinweise drin - ok, exakt das Problem ist natürlich nicht beschrieben
muss daher bei jeder Textmarke prüfen,
ob sich diese in einem Textrahmen befindet.
Na gut: Alle Textmarken erhält du über getBookmarks(), dann kannst du die einzelne entweder über den Namen oder über den Index ansprechen.
Zur Unterscheidung, wo sie sich befinden: Das ist deutlich komplizierter. Die Textmarke besitzt ein Anker-Objekt, welches die Position ihrerselbst darstellt - wenn vorhanden!
Also kannst du das abprüfen. Hier ein kurzes Beispiel: Du besitzt ein Textdokument mit Fliesstext und irgendwo der Textmarke "tm1" sowie einem Rahmen ("Rahmen1") mit Text und der Textmarke "tm2".
Jetzt kannst du das wie folgt prüfen:
Code: Alles auswählen
Sub Main
oDoc = thisComponent
oTxtMarke = oDoc.getBookmarks().getByName("tm2")
oAnker = oTxtMarke.getAnchor()
var = oAnker.textFrame
if isObject(var) then
msgbox "ja"
msgbox var.name
else
msgbox "nein"
end if
End Sub
Ändere mal den GetByName() auf "tm1" um den Unterschied zu sehen.
Das Ankerobjekt besitzt eine Eigenschaft "textFrame" (als UNO-Objekt) wenn ersich in einem solchen befindet. Ansosnten gibt es diese Objekt nicht und die Eigenschaft liefert "void", welches kein UNO-Objekt darstellt.
Danach kannst du prüfen. Ist das Objekt vorhanden, handelt es sich auch gleich um den gesuchten Rahmen (das Rahmen-Objekt) - kannst du über die Namen-Eigenschaft auslesen.
So haben die Textmarken übrigens auch Tabellen- und ähnliche Eigenschaften, wenn dort plaziert. Wie gesagt, wenn es sich "nur" um Rahmen handelt, reicht an sich die obrige Abfrage.
Noch komplizierter wird es natürlich bei verschachtelten Rahmen etc.
Ich hoffe, es hilft erst einmal.
Viele Grüße
Thomas