It Works!!!!
Dank eurer Tipps habe ich es geschafft, dass die Bookmarks in Tabellen gefüllt werden kö�en, ohne dass ich wissen muss, in welcher Tabelle oder Zelle sich die Bookmark befindet.
Vielen Dank dafür�!
Für �le, die sich wie ich mit Lotus Notes rumschlagen müsse� habe ich die Funktionen in Lotus Script beigefügt.
�Toxitom
Hallo Thomas,
Dein Code hat doch funktioniert. Dass es bei mir erst mal nicht ging, lag daran, dass ich das Ergebnis von GetBookmarkByName an die Funktion überge�n habe, statt den Anchor darauf zu übergeb�. Darauf bin ich gekommen, als ich den Tipp von Jürgen au�robiert habe.
In Lotus Script sieht der Code wie folgt aus:
Code: Alles auswählen
Function GetOOoObjectPosition (OOoObjDok As Variant, Obj As Variant) As Variant
'/** GetOOoObjectPosition
'*************************************************************************.
'*.
'* Analysiert die Position eines Objektes im Dokument
'* Übergeben�ird als Parameter ein Objekt (hier Viewcursor oder Textmarke) sowie
'* der Name des Objektes (wird für evt. Fe�ermeldungen genutzt)
'* liefert das Textobjekt, in dem sich das Objekt befindet, zurück
'* �nn ein leeres Objekt zurückliefern, �weit hier ein Abbruch erfolgen soll.
'* @param Obj übergeben wir�das Objekt, dessen Position im Dokument gesucht
'* gesucht werden soll. Hier entweder der ViewCursor oder die Textmarke
'* sName übergeben wird�uch ein String, der das übergebene Obje� beschreibt.
'* Dieser String wird für evt. Fehlerme�ungen gebraucht - und zur Identifikation
'* @return oTxtObj zurückgeliefert wird�as Textobjekt der Position, also zum Beispiel
'* eine Tabellenzelle, ein Rahmen, Kopf-oder Fusszeile, Fliesstext ...
'*************************************************************************
'*/
Dim oTxtObj As Variant 'leeres Objekt, wird bei der Rückgabe benötigt
� � 'nimmt evt. das Textobjekt auf, in dem sich das Obj befindet
If Not Isempty(obj.textTable) Then ' in einer Texttabelle
Set oTxtObj = Obj.cell.text
Elseif Not Isempty(Obj.textFrame) Then 'in einem Textrahmen
Set oTxtObj = Obj.textFrame.text
Elseif Not Isempty(Obj.textSection) Then 'in einem Textbereich
Set oTxtObj = OOoObjDok.text
' Elseif Not Isempty(Obj.textField) Then 'in oder am Anfang eines Textfeldes
' Print ("Objekt befindet sich in einem (Text-) Feld oder ein solches ist selektiert.")
Elseif obj.getText.ImplementationName = "SwXFootnote" Then 'in einer Fussnote
Set oTxtObj = Obj.getText()
Elseif obj.getText.ImplementationName = "SwXEndnote" Then 'in einer Endnote
Set oTxtObj = Obj.getText()
Elseif obj.getText.ImplementationName = "SwXHeadFootText" Then 'in der Kopf- oder Fusszeile
Set oTxtObj = Obj.getText()
Else
Set oTxtObj = OOoObjDok.text
End If
Set GetOOoObjectPosition = oTxtObj 'Rückgabe: das Textobj�t, evt. leer
End Function
Der Aufruf dazu ist wie folg[/code]bjDok wurde mit LoadComponentFromURL belegt):
Code: Alles auswählen
Set bookmark = OOoObjDok.Bookmarks.GetByName("BookmarkName")
Set textObj = GetOOoObjectPosition (OOoObjDok, bookmark.Anchor)
Set textCursor = textObj.CreateTextCursorByRange (bookmark.Anchor)
textCursor.String = "Der auszugebende Text"
@turtle47
Hallo Jürgen,
erst mal Danke�ür den Hinweis, dass i� .Text vergessen hatte. Ein typischer Anfängerfehler.
Ich wursch�l mich durch das Buch in dem die API beschrieben ist, von einem Element zum nächsten und am Ende weis�ich gar nicht mehr, wie es zusammengehört. Aber das wird noch m� der Zeit.
Bis es soweit ist, hoffe ich, dass ihr Geduld mit mir habt.
Jetzt zu Deinem Code: auch der funktioniert einwandfrei, nachdem ich ihn für Lotus Notes umgeschrieb� habe.
Hier der Code in Lotus Script:
Code: Alles auswählen
Sub SetBookm[code]Doc As Variant, bookmark As Variant, sText As String)
Dim TextTables As Variant
Dim oTextmarke As Variant
Dim oBookmark As Variant
Dim oTextCursor As Variant
Dim Zahl As Integer
Dim i As Integer
Set TextTables = oDoc.getTextTables()
Zahl = TextTables.count()
On Error Goto Fehler
For i = 1 To (Zahl)
Set oTextmarke = oDoc.Bookmarks.getByName(bookmark)
Set oBookmark = oDoc.getBookmarks().getByName(bookmark).getAnchor()
If Not Isempty(oBookmark.TextTable) Then
Set oTextCursor = oBookmark.Text.CreateTextCursorByRange(oTextmarke.Anchor)
oTextCursor.String = sText
End If
Next i
Exit Sub
Fehler:
Msgbox "Es wurde kein entsprechender Bookmark gefunden"
End Sub
Aufgerufen wird die Funktion so (auch hier wurde OOoObjDok mit LoadComponentFromURL belegt):
Code: Alles auswählen
Call SetBookmark (OOoObjDok, "BookmarkName, "Der auszugebende Text")
Bis zur nächsten Frage,
Petra�