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?
❤️ 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. 🌱
>> 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
Makro aufzeichnen & Formatierung ... bzw. allgemein: Ersetzungen mit Formatattributen
Zuletzt geändert von Butch am Fr 30. Sep 2016, 12:14, insgesamt 1-mal geändert.
Re: Makro aufzeichnen & Formatierung
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?
- 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.