
[Gelöst] Text per Makro in Writer-Dokument formatiert eingeben
[Gelöst] Text per Makro in Writer-Dokument formatiert eingeben
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
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
- Dateianhänge
-
- Test_Makro_WRT_Texteingabe_formatiert.odt
- (14.08 KiB) 26-mal heruntergeladen
Zuletzt geändert von Proma am So 14. Jun 2026, 20:38, insgesamt 1-mal geändert.
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
Re: [Gelöst] Text per Makro in Writer-Dokument formatiert eingeben
Hallo mikele,
vielen herzlichen Dank, genau das war's! Problem gelöst!
Sonst hätte ich halt einfach den Wert für bolFett auf False gesetzt, um den Text fett zur formatieren
Nein, war nur ein schlechter Scherz.
Also vielen Dank nochmal, Du hast mir den Tag gerettet!
Liebe Grüße
vom Martin
vielen herzlichen Dank, genau das war's! Problem gelöst!
Sonst hätte ich halt einfach den Wert für bolFett auf False gesetzt, um den Text fett zur formatieren
Also vielen Dank nochmal, Du hast mir den Tag gerettet!
Liebe Grüße
vom Martin
Re: [Gelöst] Text per Makro in Writer-Dokument formatiert eingeben
Hallo,
es könnte auch funktionieren erst die Eigenschaft zu setzten (am leeren ViewCursor) und dann den Text einzufügen.
es könnte auch funktionieren erst die Eigenschaft zu setzten (am leeren ViewCursor) und dann den Text einzufügen.
Gruß,
mikele
mikele
Re: [Gelöst] Text per Makro in Writer-Dokument formatiert eingeben
Hallo mikele,
danke für dieses Variante; hab' sie erst gestern noch zu später Stunde entdeckt und heute gleich ausprobiert! Funktioniert auch und spart mir eine Code-Zeile. Vor allem aber hat mir Dein Tipp geholfen, die Sache besser zu verstehen.
Vielen Dank nochmal und liebe Grüße
vom Martin
danke für dieses Variante; hab' sie erst gestern noch zu später Stunde entdeckt und heute gleich ausprobiert! Funktioniert auch und spart mir eine Code-Zeile. Vor allem aber hat mir Dein Tipp geholfen, die Sache besser zu verstehen.
Vielen Dank nochmal und liebe Grüße
vom Martin
Code: Alles auswählen
Sub pDaten_schreiben_3(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()
oTCur=oText.createTextCursorByRange(oViewCursor) 'Cursorposition per TextCursor merken
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
oText.insertString(oViewCursor, strTxt, False)
End Sub