Vielleicht könnt Ihr mir beim Lösen eines Problems helfen, das ich seit Jahren nicht in den Griff bekomme. Aus dem Dokument einer Text-Datei mit Textmarken suche ich eine bestimmte Textmarke (das klappt). Dann möchte ich den formatierten Text dieser Textmarke (und sonst nichts) in ein anderes Dokument kopieren, um ihn auszudrucken. Das klappt aber nur mit dem unformatierten string der Textmarke.
Option Explicit
Dim oTDoc as Object ' Textdokument
Dim oTxtCur as Object ' Textcursor
Dim oTxt as Object ' Textobjekt
Dim sPfad as String ' Pfad der Anwendung
Sub LesezeichenSuchen ' Textmarke suchen
REM Pfad der Anwendung ermitteln
Dim sDoc_URL as String ' Pfad zur Anwendung
GlobalScope.BasicLibraries.LoadLibrary("Tools") ' Verweis auf LibreOffice-Makros
sDoc_URL = thisComponent.getLocation()
sPfad = DirectoryNameoutofPath(sDoc_URL,"/") ' LibreOffice-Makro
REM Textdatei Laden
Dim sURL as String ' URL der Textdatei
Dim arg()
sURL = sPfad & "/RezText.odt"
oTDoc = StarDesktop.loadComponentFromURL(sURL, "_blank", 0, arg())
REM Textmarke suchen
Dim oBookmark as Object ' Textmarke
Dim oTxtCur as Object ' Textcursor
Dim sName as String ' Name der Textmarke
sName = "Bejgli"
If oTDoc.getBookmarks().hasByName(sName) Then
oBookmark = oTDoc.getBookmarks().getByName(sName)
oTxtCur = oTDoc.Text.createTextCursorByRange(oBookmark.getAnchor())
End If
REM Verschiedene Methoden zum Anzeigen des Inhalts der Textmarke waren erfolgreich:
MsgBox "durch den Text-Cursur: " & chr(13) & oTxtCur.string
Msgbox "durch oBookmark.Anchor: " & chr(13) & oBookmark.getAnchor().string
Dim oVCur as Object
oVCur = oTDoc.getCurrentController().getViewCursor()
oVCur.gotoRange(oBookmark.Anchor,false)
MsgBox "durch den View-Cursor: " & chr(13) & oVCur.string
REM Aber dabei geht natürlich die Formatierung verloren.
REM Deshalb habe ich versucht, ein Textobjekt des Text-Cursors zu verarbeiten.
REM Versuche mit View-Cursor und Bookmark.Anchor führten zum gleichen Ergebnis.
oTxt = oTxtCur.Text
Drucken ' zur Weiterverarbeitung von oTxt
End Sub
Wenn ich dann nacheinander die Absatzteile des Textobjekts der Textmarke mit geschachteltem Enumerieren durchgehe, lassen sich die Absatzteile samt Schriftattributen übertragen, aber die Übertagung beginnt nicht wie vorgesehen beim Anfang der Textmarke, sondern beim Anfang des Text-Dokumentes, und das ist mein Problem.
Sub Drucken
REM AbsatzteileBeschreiben
Dim oEnum as Object, oAbs as Object
Dim oAbsTeile as Object, oAbsTl as Object, s$, s2$, s3$, s4$
oEnum = oTxt.createEnumeration
Do While oEnum.hasMoreElements
oAbs = oEnum.nextElement
if oAbs.supportsService("com.sun.star.text.Paragraph") Then
oAbsTeile = oAbs.createEnumeration
Do While oAbsTeile.hasMoreElements
oAbsTl = oAbsTeile.nextElement
if oAbsTl.TextPortionType = "Text" then
s = "String = " & oAbsTl.string & chr(13)
s2= "CharColor = " & oAbsTl.CharColor & chr(13) ' Farbwert
s2= "CharHeight = " & oAbsTl.CharHeight & chr(13) ' Höhe der Schrift (Points)
s3= "CharUnderline = " & oAbsTl.CharUnderline & chr(13) ' Unterstreichung 1=Strich
s4= "CharWeight = " & oAbsTl.CharWeight & chr(13) ' Stärke der Zeichen in %
MsgBox s & s2 & s3 & s4
end if
loop
end if
loop
End Sub