Hallo liebe Experten,
bei dem Versuch, Text per Basic-Makro in ein Writer-Dokument einzugeben und unmittelbar danach zu formatieren (Fettschrift bzw. Normalschrift) bin ich kläglich gescheitert.
Im beigefügten Writer-Dokument befinden sich das eigentliche Makro für die formatierte Eingabe wie auch ein Demo-Makro zum Aufrufen des erstgenannten Makros. Mit diesen Makros sollen Texte in das Writer-Dokument geschrieben werden, die im Idealfall wechselweise in Fett- bzw. in Normalschrift im Dokument erscheinen sollen.
Leider funktioniert das (bei mir) nicht so wie es soll. Beim ersten Durchlauf nach dem Speichern erscheinen alle Texte, bei denen der Parameter bolFett auf TRUE gesetzt war, in Normalschrift und die anderen Texte (Parameter bolFett = FALSE) werden in Fettschrift dargestellt; also genau umgekehrt, wie es sein soll. Bei weiteren Duchläufen werden die ersten beiden Texte in Normalschrift ausgegeben (obwohl der zweite Text fett angezeigt werden sollte) und alle weiteren Texte werden - wie gehabt - nur dann fett dargestellt, wenn bolFett auf FALSE gesetzt ist.
Ich habe im Internet noch ein paar andere Beispiele gefunden, die mir aber alle das gleiche oder ein ähnliches Ergebnis geliefert haben. Deshalb gehe ich davon aus, dass ich hier etwas grundsätzliches falsch verstanden habe. Kännt Ihr mich vielleicht auf den rechten Weg zurück führen?
Meine Ausstattung: Windows 11, LO 25.8.6.2 (X86_64)
Vielen Dank vorab schon für Eure Unterstützung und liebe Grüße
vom Martin

Text per Makro in Writer-Dokument formatiert eingeben
Text per Makro in Writer-Dokument formatiert eingeben
- Dateianhänge
-
- Test_Makro_WRT_Texteingabe_formatiert.odt
- (14.08 KiB) 9-mal heruntergeladen
Re: Text per Makro in Writer-Dokument formatiert eingeben
Hallo,
die Ursache des "Fehlers" ist, dass der ViewCursor durch das Einfügen nicht ausgedehnt wird, sondern einfach an das Ende gesetzt wird (bzw. der String vor dem Cursor eingefügt wird). Somit wirkt sich die Formatierung genau dort aus und die nächste Einfügung erhält die Formatierung.
Um die Formatierung auf die Einfügung anzuwenden, könntest du folgendes tun:
die Ursache des "Fehlers" ist, dass der ViewCursor durch das Einfügen nicht ausgedehnt wird, sondern einfach an das Ende gesetzt wird (bzw. der String vor dem Cursor eingefügt wird). Somit wirkt sich die Formatierung genau dort aus und die nächste Einfügung erhält die Formatierung.
Um die Formatierung auf die Einfügung anzuwenden, könntest du folgendes tun:
Code: Alles auswählen
Sub Demo_pDaten_schreiben()
pDaten_schreiben ThisComponent, "Dies ist ein 'normal' formatierter Text. " & Chr(13), False
pDaten_schreiben ThisComponent, "Dies ist ein 'fett' formatierter Text. " & Chr(13), True
pDaten_schreiben ThisComponent, "Dies ist ein 'normal' formatierter Text. " & Chr(13), False
pDaten_schreiben ThisComponent, "Dies ist ein 'fett' formatierter Text. " & Chr(13), True
pDaten_schreiben ThisComponent, "Dies ist ein 'normal' formatierter Text. " & Chr(13), False
End Sub
Sub pDaten_schreiben(ByRef oDoc As Object, strTxt As String, Optional bolFett As Boolean)
Dim oViewCursor As Object, oTCur as object, oSaveCursor as object
Dim oText As Object
If IsMissing(bolFett) Then bolFett = False
oText = oDoc.Text
oViewCursor = oDoc.getCurrentController().getViewCursor()
'Cursorposition per TextCursor merken
oTCur=oText.createTextCursorByRange(oViewCursor)
oText.insertString(oViewCursor, strTxt, False)
'Textcursor auf den eingefügten Text ausdehnen
oTCur.goleft(len(strtxt), true)
If bolFett = True Then
oTCur.setPropertyValue("CharWeight", com.sun.star.awt.FontWeight.BOLD) ' Fett
Else
oTCur.setPropertyValue("CharWeight", com.sun.star.awt.FontWeight.NORMAL) ' Normal (nicht fett)
End If
End Sub
Gruß,
mikele
mikele
