🎄 Helfen Sie noch heute, unser LibreOffice Forum zu erhalten! 🎄
❤️ Nur noch wenige Tage, um das Ziel für 2025 zu erreichen. Vielen lieben Dank! ❤️
>> Das LibreOffice-Forum lebt von Ihnen – und von vielen Experten, die freiwillig ihr Wissen teilen.<<
Ihre Spende hilft, die Community offen, werbefrei (bei Registrierung) und lebendig zu halten. Vielen Dank!

❤️ HELFEN SIE JETZT >> << HELFEN SIE JETZT ❤️

🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗


(gelöst) Writer: Suchen-und-Ersetzen-Makro vereinfachen?

Alles zur Programmierung im LibreOffice.
Antworten
Freischreiber
* LO-Experte *
Beiträge: 851
Registriert: Fr 28. Mär 2014, 10:41

(gelöst) Writer: Suchen-und-Ersetzen-Makro vereinfachen?

Beitrag von Freischreiber » Sa 5. Sep 2015, 18:57

Hallo,

für längere Texte benötige ich immer wieder dieselben Ersetzungsvorgänge, z. B. Wegfiltern doppelter Leerzeichen usw.

Dafür habe ich aus einem anderen Forum das folgende Makro "geklaut":

Code: Alles auswählen

sub Ersetzen
dim myDoc as object, mySuche as Object
'oFunctionAccess = createUnoService( "com.sun.star.sheet.FunctionAccess" )
myDoc = thisComponent

' Doppelte Leerzeichen:
mySuche=myDoc.createReplaceDescriptor()
With mySuche
.SearchRegularExpression = True
.setSearchString( "  ")
.setReplaceString(" ")
end With
myDoc.replaceAll(mySuche)

' Spiegelstriche:
mySuche=myDoc.createReplaceDescriptor()
With mySuche
.SearchRegularExpression = True
.setSearchString( "- ")
.setReplaceString("– ")
end With
myDoc.replaceAll(mySuche)

end sub
Wie man sieht: es wiederholt sich einiges - pro Ersetzungsvorgang sieben Zeilen. Und es kommt noch mehr (geschütztes Leerzeichen vor Eurozeichen usw.)

Meine Frage: Kennt jemand einen Weg, wie man den Code kürzer/einfacher/übersichtlicher schreiben kann?

Gruß
Freischreiber
Zuletzt geändert von Freischreiber am Mo 7. Sep 2015, 08:28, insgesamt 1-mal geändert.

:idea: Achte auf die dritte Ziffer: Libre Office 25.2.0.3 = Ärger ist vorprogrammiert.
Lesenswert: https://wiki.documentfoundation.org/ReleasePlan/de
Freischreiber nutzt seit 1/2025 LibreOffice 7.2.7.2 unter Windows 11 und SplitDB mit HSQL 2.7.4.

F3K Total
* LO-Experte *
Beiträge: 2511
Registriert: So 10. Apr 2011, 10:10

Re: Writer: Suchen-und-Ersetzen-Makro vereinfachen?

Beitrag von F3K Total » Sa 5. Sep 2015, 20:18

Mit einem Array und einer Schleife?

Code: Alles auswählen

sub Ersetzen
    dim myDoc as object, mySuche as Object
    myDoc = thisComponent
    ' Doppelte Leerzeichen:
    mySuche = myDoc.createReplaceDescriptor()
    Dim Suche(1,2)
    Suche(0,0) = "  "
    Suche(1,0) = " "
    Suche(0,1) = "- "
    Suche(1,1) = "-"
    Suche(0,2) = " -"
    Suche(1,2) = "-"
    for i = 0 to 2
        With mySuche
            .SearchRegularExpression = True
            .setSearchString(Suche(0,i))
            .setReplaceString(Suche(1,i))
        end With
        myDoc.replaceAll(mySuche)
    next i
end sub
Gruß R
Windows 11: AOO, LO Linux Mint: AOO, LO

Freischreiber
* LO-Experte *
Beiträge: 851
Registriert: Fr 28. Mär 2014, 10:41

Re: Writer: Suchen-und-Ersetzen-Makro vereinfachen?

Beitrag von Freischreiber » Mo 7. Sep 2015, 08:27

:idea: Danke!

Das wird wirklich einiges kürzer. Da mach ich wahrscheinlich einen Umbau zum Abschluß daraus, wenn alle Ersetzungen drinstehen, weil man das DIM und die Schleife an die richtige Gesamtzahl anpassen muß.

Danke und Gruß
Freischreiber

:idea: Achte auf die dritte Ziffer: Libre Office 25.2.0.3 = Ärger ist vorprogrammiert.
Lesenswert: https://wiki.documentfoundation.org/ReleasePlan/de
Freischreiber nutzt seit 1/2025 LibreOffice 7.2.7.2 unter Windows 11 und SplitDB mit HSQL 2.7.4.

Benutzeravatar
karolus
* LO-Experte *
Beiträge: 2633
Registriert: Fr 10. Dez 2010, 10:01

Re: (gelöst) Writer: Suchen-und-Ersetzen-Makro vereinfachen?

Beitrag von karolus » Di 8. Sep 2015, 08:12

Hallo

Code: Alles auswählen

            .SearchRegularExpression = True
Du könntest auch reguläre Ausdrücke benutzen und nicht nur behaupten es zu tun!

Code: Alles auswählen

search = " ?( |-) *"
replace = "$1"


Karolus
LO25.2.x.y debian 13(trixie) auf Raspberry5 8GB (64bit)
LO25.8.x.y flatpak debian 13(trixie) auf Raspberry5 8GB (64bit)

Freischreiber
* LO-Experte *
Beiträge: 851
Registriert: Fr 28. Mär 2014, 10:41

Re: (gelöst) Writer: Suchen-und-Ersetzen-Makro vereinfachen?

Beitrag von Freischreiber » Di 8. Sep 2015, 09:09

Hallo,

verstehe ich nicht: was tut dein Code? Bei den Strichen funktioniert er vermutlich nicht. Dort soll ein Trennstrich durch einen Gedankenstrich ersetzt werden (ALT+0150). Sieht man in dieser Codeschriftart nicht.

Aber für meine Suchstrings heißt es wohl, ich könnte die Zeile
.SearchRegularExpression = True
einfach weglassen?

Gruß
Freischreiber

:idea: Achte auf die dritte Ziffer: Libre Office 25.2.0.3 = Ärger ist vorprogrammiert.
Lesenswert: https://wiki.documentfoundation.org/ReleasePlan/de
Freischreiber nutzt seit 1/2025 LibreOffice 7.2.7.2 unter Windows 11 und SplitDB mit HSQL 2.7.4.

Benutzeravatar
karolus
* LO-Experte *
Beiträge: 2633
Registriert: Fr 10. Dez 2010, 10:01

Re: (gelöst) Writer: Suchen-und-Ersetzen-Makro vereinfachen?

Beitrag von karolus » Di 8. Sep 2015, 10:02

Freischreiber hat geschrieben:...
Aber für meine Suchstrings heißt es wohl, ich könnte die Zeile
.SearchRegularExpression = True
einfach weglassen
....oder auf `False` setzen
LO25.2.x.y debian 13(trixie) auf Raspberry5 8GB (64bit)
LO25.8.x.y flatpak debian 13(trixie) auf Raspberry5 8GB (64bit)


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