❤️ Helfen Sie noch heute, unser LibreOffice Forum zu erhalten! ❤️
Unterstützen Sie das LibreOffice-Forum und helfen Sie uns, unser Ziel für 2025 zu erreichen!

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱


❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

Makro aufzeichnen & Formatierung ... bzw. allgemein: Ersetzungen mit Formatattributen

WRITER hat alles, was Sie von einer modernen, voll ausgestatteten Textverarbeitung erwarten.
Antworten
Butch
Beiträge: 122
Registriert: Mi 20. Jan 2016, 18:59

Makro aufzeichnen & Formatierung ... bzw. allgemein: Ersetzungen mit Formatattributen

Beitrag von Butch » Mi 28. Sep 2016, 21:34

Ich beschäftige mich im Moment mit Makros und bin auf ein schwieriges Problem gestoßen.

Im Wesentlichen versuche ich durch ‚Makro aufzeichnen‘ Folgendes machen:

Alle Textteile in fett sollen ersetzt werden durch Text mit Präfix <STRONG> und Suffix </STRONG>, jene in kursiv durch Text mit Präfix <EM> und Suffix </EM>, usw.

Das funktioniert ‚manuell‘ tadellos:

Suchen & Ersetzen, unter Weitere Optionen ‚Regulärer Ausdruck‘ aktivieren, für Suchen .* eingeben (= beliebig viele beliebige Zeichen) und unter Format/Schriftart/Stil fett auswählen, für Ersetzen <STRONG>$0</STRONG> einsetzen und unter Format Standard auswählen (angezeigt wird ‚Nicht kursiv, normal‘), Alles Ersetzen. Funktioniert. (Ich mache das dann auch noch z.B. für fett&kursiv, für bestimmte Schriftgrößen usw.)

Wird dasselbe in ‚Makro aufzeichnen‘ gemacht, ergibt sich offensichtlich das Problem, dass die gewählten Formatierungen nicht im Makro gespeichert werden. Macht man also zwei Makros, die das Obige machen sollen, unterscheiden sich diese, wenn man sie im LO Basic anschaut, überhaupt nicht (außer in den Eintragungen für Suchen und Ersetzen natürlich).

Ist dieses Problem bereits bekannt? Gibt es ein Workaround? Wie könnte man in den Makros die Formatierungen zumindest manuell eintragen?
Zuletzt geändert von Butch am Fr 30. Sep 2016, 12:14, insgesamt 1-mal geändert.

Butch
Beiträge: 122
Registriert: Mi 20. Jan 2016, 18:59

Re: Makro aufzeichnen & Formatierung

Beitrag von Butch » Fr 30. Sep 2016, 10:34

Ich habe mich in der Zwischenzeit viel damit beschäftigt (gezwungenermaßen, weil ich eine Lösung brauche), und kann jetzt Folgendes berichten:

- Das Problem, dass 'Makro aufzeichnen' die beim Suchen&Ersetzen angewandten Formatattribute nicht speichert, ist schon vielfach beschrieben worden. 'Makro aufzeichnen' ist für diesen Zweck einfach nicht geeignet. (Ungut dabei: Man kann es ewig lang machen und versuchen, es taucht aber weit und breit kein Hinweis darauf, dass man von Vornherein Sinnloses tut.)

- Ich habe also ein eigenes Makro geschrieben, das die von mir gewünschten Ersetzungen macht. Vielleicht könnte es (evtl. nur in einzelnen Teilen -- ist gut dokumentiert und anpassungsfähig) noch für jemanden anderen nützlich sein.

- Die Frage von Ersetzungen speziell in Verbindung mit Absatzenden/Zeilenumbrüchen usw. ist ja ein so lästiges wie uraltes Thema bei LO (das trotz allem jahrelangem Bemühen der Gemeinde und allen Tipps am Ende für fast jeden Benutzer, der damit konfrontiert ist, extrem mühsam bleibt -- das Ganze ist einfach alles andere als anwenderfreundlich konzipiert, leider).
Was ich in meinem Makro einfach nicht schaffe, ist dieser Punkt:
Suchen nach Zeichenkette am Absatzende und Zeichenkette am Anfang des nächsten Absatzes. Bei mir geht es darum, dass jetzt am Absatzende <br> steht und (dort, wo ich im Text zweimal hintereinander Enter angewandt habe) dann in einer sonst leeren Zeile nochmals <br>. Ich möchte aber, dass beide <br> am Ende des Absatzes stehen.

- Was ich in meinem Makro auch nicht schaffe:
Wie soll das Ganze nur im aktuell ausgewählten (markierten) Textbereich erfolgen?

Igendwelche Tipps zu diesen zwei Punkten?

Code: Alles auswählen

Sub Format2Html
  ' ------------
  ' Butch's notes:
  ' ------------
  ' bold        : <B>           CharWeight      FontWeight.BOLD       .NORMAL  *)
  ' italic      : <I>           CharPosture     FontSlant.ITALIC      .NONE
  ' underlined  : <U>           CharUnderline   FontUnderline.SINGLE  .NONE
  ' -------------
  ' 16pt        : <BIG><BIG>    Dim CharHeight As Long ... **)
  ' 14pt        : <BIG>
  ' 10pt        : <SMALL>
  ' 8pt         : <SMALL><SMALL>
  ' ------------
  ' lbreak      : <BR>
  ' ------------
  ' *)          :               SrchAttributes(0).Name = "CharWeight"
  '                             SrchAttributes(0).Value =com.sun.star.awt.FontWeight.BOLD
  '                             oReplace.SetSearchAttributes(SrchAttributes())
  ' ------------
  ' **)         :               Dim CharHeight As Long
  '                             CharHeight = "16"
  '                             SrchAttributes(0).Value = CharHeight
  '                             oReplace.SetSearchAttributes(SrchAttributes())
  ' ------------
  ' original code : AndrewMacro.odt; other hints:
  ' https://www.openoffice.org/api/docs/common/ref/com/sun/star/style/CharacterProperties.html
  ' https://forum.openoffice.org/en/forum/viewtopic.php?f=20&t=60896

  Dim oDoc As Object
  Dim oReplace As Object
  Dim SrchAttributes(0) As New com.sun.star.beans.PropertyValue
  Dim ReplAttributes(0) As New com.sun.star.beans.PropertyValue
  Dim CharHeight As Long                            ' B.

  oDoc = ThisComponent
  oReplace = oDoc.createReplaceDescriptor

  oReplace.SearchRegularExpression=True
  oReplace.searchAll=True

REM : LBREAK first

  oReplace.SearchString = "$"
  oReplace.ReplaceString = "<br>\n"
  oDoc.replaceAll(oReplace)
  
REM : For all the following: Replace ANY TEXT & include STYLES

  oReplace.SearchString = ".*"

  oReplace.searchStyles=True

REM : BOLD
  
  oReplace.ReplaceString = "<b>&</b>"

  SrchAttributes(0).Name = "CharWeight"
  SrchAttributes(0).Value =com.sun.star.awt.FontWeight.BOLD
  oReplace.SetSearchAttributes(SrchAttributes())

  REM ReplAttributes(0).Name = "CharWeight"
  REM x ReplAttributes(0).Value =com.sun.star.awt.FontWeight.NORMAL
  REM ReplAttributes(0).Value =com.sun.star.awt.FontWeight.BOLD
  REM oReplace.SetReplaceAttributes(ReplAttributes())

  oDoc.replaceAll(oReplace)

REM : ITALIC

  oReplace.ReplaceString = "<i>&</i>"

  SrchAttributes(0).Name = "CharPosture"
  SrchAttributes(0).Value =com.sun.star.awt.FontSlant.ITALIC
  oReplace.SetSearchAttributes(SrchAttributes())

  oDoc.replaceAll(oReplace)

REM : 16PT

  oReplace.ReplaceString = "<big><big>&</big></big>"

  CharHeight = "16"
  SrchAttributes(0).Name = "CharHeight"
  SrchAttributes(0).Value = CharHeight
  oReplace.SetSearchAttributes(SrchAttributes())

  oDoc.replaceAll(oReplace)

REM : 14PT

  oReplace.ReplaceString = "<big>&</big>"

  CharHeight = "14"
  SrchAttributes(0).Name = "CharHeight"
  SrchAttributes(0).Value = CharHeight
  oReplace.SetSearchAttributes(SrchAttributes())

  oDoc.replaceAll(oReplace)

REM : 10PT

  oReplace.ReplaceString = "<small>&</small>"

  CharHeight = "10"
  SrchAttributes(0).Name = "CharHeight"
  SrchAttributes(0).Value = CharHeight
  oReplace.SetSearchAttributes(SrchAttributes())

  oDoc.replaceAll(oReplace)

REM : 8PT

  oReplace.ReplaceString = "<small><small>&</small></small>"

  CharHeight = "8"
  SrchAttributes(0).Name = "CharHeight"
  SrchAttributes(0).Value = CharHeight
  oReplace.SetSearchAttributes(SrchAttributes())

  oDoc.replaceAll(oReplace)

End Sub


An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:


Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.



Antworten