Hallo,
danke für die Antworten.
Geholfen haben sie zwar nicht direkt, aber mich zumindest noch auf neue Ideen gebracht.
Und darauf, dass euch noch eine Information fehlt, um mein Problem komplett zu verstehen:
Ich entwickle eine Standardschnittstelle, mit der von Lotus Notes aus (also Star Basic ähnlich) beliebige OpenOffice Writer Dokumente erzeugt und bearbeitet werden können. Dazu werden in Lotus Notes die .ott Dateien hinterlegt und beschrieben, welche Textmarke bzw. welcher Bereich der .ott mit welchem Inhalt gefüllt werden soll.
Einer dieser Inhalte kann eine Tabelle sein. In diesem Fall wird eine weitere Beschreibung herangezogen, bei der wiederum eine .ott Datei anhängt (mit einer Tabellenzeile) und auch wieder eine Festlegung, was wohin kommen soll.
Das Writer Dokument baut sich also Stück für Stück auf, so wie es gerade aufgrund der Inhalte benötigt wird.
Jetzt habe ihr mich auf folgende Idee gebracht, bei der es aber bei mir wieder an der entgültigen Umsetzung etwas hängt.
Das Erzeugen der neuen Tabelle und Initialisieren scheitert daran, dass ich nicht weiß, wieviele Spalten die Tabelle haben wird.
Das ist in diesem Fall aber auch egal, da zumindest das Einfügen über InsertDocumentFromURL in meine Basis .ott Datei prima funktioniert.
Damit habe ich also zumindest den Tabellenanfang.
Jetzt könnte ich die Zeile kopieren, damit ich die Textmarken habe.
Dann die Inhalte an die Textmarken einfügen und die Textmarken anschließend umbenennen.
Danach eine Zeile an die Tabelle anhängen und in diese Zeile den zuvor kopierten Inhalt einfügen, damit die Textmarken für die nächsten Inhalte wieder zur Verfügung stehen.
Ich habe es versucht mit folgendem Code umzusetzen (bitte nicht an der Notes-typischen Syntax mit Set usw. stören):
Zum Kopieren der letzten Tabellenzeile:
Code: Alles auswählen
' Letzte Tabellenzeile kopieren, bevor die Bookmarkfelder mit Werten gefüllt werden.
If OOoObjDok.Bookmarks.HasByName ("Erste Bookmark in Tabelle") Then
Set textTableBookmark = OOoObjDok.Bookmarks.GetByName ("Erste Bookmark in Tabelle")
If Not Isempty(textTableBookmark.Anchor.textTable) Then ' Bookmark ist in einer Texttabelle (sollte in dieser Funktion immer so sein)
iAnzahlZeilen = textTableBookmark.Anchor.textTable.Rows.Count
iAnzahlSpalten = textTableBookmark.Anchor.textTable.Columns.Count
' Range auf letzte Zeile setzen (Anzahl Zeile/Spalte minus 1, da ab 0 positioniert wird)
Set textTableRowObj = textTableBookmark.Anchor.TextTable.getCellRangeByPosition(0, iAnzahlZeilen - 1, iAnzahlSpalten - 1, iAnzahlZeilen - 1)
' letzte Zeile merken
Set textTableRowCursor = textTableRowObj.CreateTextCursorByRange (textTableBookmark.Anchor) ' ??????????????????????????
Set textTableRowText = textTableRowCursor.GetText ()
End If
End If
Zum Einfügen der neuen Zeile und Kopieren des zuvor gemerkten Inhalts:
Code: Alles auswählen
' eine Zeile einfügen
If Not Isempty(textTableBookmark.Anchor.textTable) Then ' Bookmark ist in einer Texttabelle (sollte in dieser Funktion immer so sein)
iAnzahlZeilen = textTableBookmark.Anchor.textTable.Rows.Count
End If
Call textTableBookmark.textTable.Rows.InsertByIndex (iAnzahlZeilen - 1, 1)
iAnzahlZeilen = textTableBookmark.Anchor.textTable.Rows.Count
iAnzahlSpalten = textTableBookmark.Anchor.textTable.Columns.Count
' Range auf letzte Zeile setzen (Anzahl Zeile/Spalte minus 1, da ab 0 positioniert wird)
Set textTableRowObj = textTableBookmark.Anchor.TextTable.getCellRangeByPosition(0, iAnzahlZeilen - 1, iAnzahlSpalten - 1, iAnzahlZeilen - 1)
Set textTableRowCursor = textTableRowObj.CreateTextCursorByRange (textTableBookmark.Anchor) ' ????????????????????
Call OOoObjDok.Text.InsertTextContent (textTableRowCursor, textTableRowText, False)' ?????? richtige Parameter?
Den Code zum Einfügen konnte ich allerdings noch nicht ausprobieren, da ich nicht zum Kopieren komme.
Ich habe es zum Setzen des Cursors, dort wo die vielen Fragezeichen sind, mit CreateTextCursorByRange probiert, aber das funktioniert bei CellRange offenbar nicht.
CreateCursorByCellName scheint mir aber auch nicht das richtige zu sein, da ja der ganze Bereich kopiert werden soll. (Oder habe ich den Befahl nur falsch verstanden?)
Ich habe noch mal in der API und in den Foren gesucht (diesmal zum Thema kopieren und einfügen) und ich habe mein schlaues Buch gewälzt (OpenOffice.org Basic). Aber so richtig klug bin ich daraus nicht geworden. Da wird zwar was von CopyRange geschrieben, aber der Befehl kopiert ja sofort und ich möchte mir den Inhalt erst mal merken, dann weitere Verarbeitungen durchführen und dann erst den zuvor gemerkten Inhalt einfügen.
Könnt ihr mir wieder netterweise helfen?
Viele Grüße,
Petra