Libre Office

Text per Makro in Writer-Dokument formatiert eingeben

Alles zur Programmierung im LibreOffice.
Antworten
Proma
Beiträge: 52
Registriert: Di 24. Sep 2024, 16:53

Text per Makro in Writer-Dokument formatiert eingeben

Beitrag von Proma » Sa 13. Jun 2026, 17:10

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
Dateianhänge
Test_Makro_WRT_Texteingabe_formatiert.odt
(14.08 KiB) 8-mal heruntergeladen

mikele
* LO-Experte *
Beiträge: 2054
Registriert: Mo 1. Aug 2011, 20:51

Re: Text per Makro in Writer-Dokument formatiert eingeben

Beitrag von mikele » So 14. Jun 2026, 12:47

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:

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

Open Office
Antworten