Hallo Hans- Werner,
Am Wed, 08 Jan 2020 13:08:37 +0000
schrieb OoOHWHOoO <OoOHWHOoO@t-online.de>:
Ich habe jetzt mal Thomas' Marko-Idee aufgegriffen und so
modifiziert, dass bei einmaligem Aufruf alle "odt"-Dateien im
Verzeichnis bearbeitet werden.
[1] Ich habe Dir das Makro auch an Deine private Email-Adresse
gesendet mit Dateianhang "SuchenUndErsetzenInAllenDateien.txt". In
der eMail (hier) gehen immer die Leerzeichen-Einrückungen und somit
auch die Struktur verloren. Kopiere das Makro aus der Datei
"SuchenUndErsetzenInAllenDateien.txt"bei Dir nach "Module1".
Das wird nicht gehen, denn die von Dir als PN übermittelte Textdatei
enthält einiges, was mir irgendwie bekannt vorkommt ;-) Beispiele:
- Datei mit dem Pfad-/Dateinamen 'dODT & aODT(iODT)' öffnen:
- Ãœber alle 'aSearch'-Zeichen:
- gefundenen 'aSearch'-Zeichen durch das zugehörige "aRepalce"-Zeichen
ersetzen
- Das aktuell indizierte 'aODT'-Dokument schließen:
[2] Lege ein Verzeichnis (beispielsweise ".../ODT/") an und trage den
kompletten Pfad im Makro ein:
dODT = "E:\TMP\ODT\"
ersetzen durch
dODT = "deine vollständige pfadangabe"
[3] Zum Testen erstelle in Deinem Verzeichnis drei "odt"-Dateien
(ODT_1.odt + ODT_2.odt + ODT_3.odt) mit jeweils dem Inhalt: ÄÖÜäöüß
[4] Öffne eine neue Datei mit WRITER und starte das Makro.
[5] Nach Ausführung des Makros sollte in den drei Dateien "ÄÖÜäöüß"
ersetzt sein durch "AeOeUeaeoeuess".
[6] Wenn Du in dem Makro
aPV(0).value = True
ersetzt durch
aPV(0).value = False
wird die jeweils bearbeitete Datei für Dich sichtbar geöffnet und Du
kannst, wenn Du ganz schnell schaust, die Ersetzungen beobachten.
Kann man mal bei den obigen drei Test-Dateien machen, ist aber bei
der Verarbeitung vieler Dateien nicht empfehlenswert - verlangsamt
nur die Verarbeitungsgeschwindigkeit.
[8] 'aSearch' und 'aReplace' musst Du nur um die neuen
'aSearch'-Zeichen und die zugehörigen 'aReplace'-Zeichen erweitern.
Vorherige Einträge müssen nicht gelöscht werden, außer natürlich
diesen Einträgen für den Makro-Test, da Du ja die Umlaute und "ß"
nicht ersetzen willst:
aSearch = array("Ä" ,"Ö" ,"Ü" ,"ä" ,"ö" ,"ü" ,"ß" )
aReplace = array("Ae","Oe","Ue","ae","oe","ue","ss")
[7] Arbeite bitte IMMER NUR MIT KOPIEN DEINER DATEIEN, wenn Du dieses
Makro anwendest !!!
Immer? Ich wäre davon ausgegangen, dass es genügt, bei einem
Testdurchlauf so zu verfahren. Wenn es funktioniert müsste doch alles
gut sein, oder?
Den nachfolgenden Abschnitt komplett so als Makro übernehmen, d.h. inkl.
der darin enthaltenen Kommentare?
Sub SuchenUndErsetzenInAllenDateien
' D E K L A R A T I O N E N
Dim oDocument as Object
Dim oReplace as Object ' object
Dim aDummy() as Variant ' array
Dim aReplace() as Variant ' array
Dim aSearch() as Variant ' array
Dim iSearch as Integer ' index
Dim aODT() as Variant ' array
Dim dODT as String ' directory
Dim fODT as String ' file
Dim iODT as Integer ' index
' V O R B E L E G U N G E N
dODT = "E:\TMP\ODT\"
aSearch = array("Ä" ,"Ö" ,"Ü" ,"ä" ,"ö" ,"ü" ,"ß" )
aReplace = array("Ae","Oe","Ue","ae","oe","ue","ss")
Dim aPV(0) as New com.sun.star.beans.PropertyValue
aPV(0).name = "Hidden"
aPV(0).value = True
' D A T E I N A M E N E I N L E S E N
' Ersten Dateinamen aus dem Verzeichnis 'dODT' in das Array 'aODT'
einlesen:
fODT = Dir(dODT & "*.odt",0)
If (fODT = "") Then
MsgBox ("Keine Dateien im Verzeichnis " & Chr(10) &_
dODT & Chr(10) &_
"gefunden !")
End
EndIf
ReDim Preserve aODT(0)
aODT(0) = Dir(dODT & "*.odt",0)
iODT = 0
' Alle weiteren Dateinamen aus dem Verzeichnis 'dODT' in das Array
'aODT' einlesen:
Do
fODT = Dir
If ( fODT = "" ) Then
Exit Do
EndIf
iODT = iODT + 1
ReDim Preserve aODT(iODT)
aODT(iODT) = fODT
Loop
' Z E I C H E N S U C H E N U N D E R S E T Z E N
' Über alle Dateinamen in dem Array 'aODT':
For iODT = 0 To Ubound(aODT) Step 1
' Datei mit dem Pfad-/Dateinamen 'dODT & aODT(iODT)' öffnen:
oDocument =
StarDesktop.loadComponentFromURL(ConvertToURL(dODT &
aODT(iODT)),"_blank",0,aPV())
' Über alle 'aSearch'-Zeichen:
For iSearch = 0 to Ubound(aSearch) Step 1
' Das aktuell indizierte 'aSearch'-Zeichen in der aktuell
indizierten Datei suchen und alle
' gefundenen 'aSearch'-Zeichen durch das zugehörige
"aRepalce"-Zeichen ersetzen:
oReplace = oDocument.CreateReplaceDescriptor
With oReplace
.SetSearchString(aSearch(iSearch))
.SetReplaceString(aReplace(iSearch))
.SearchCaseSensitive = True
End With
oDocument.replaceAll(oReplace)
Next
' Das aktuell indizierte 'aODT'-Dokument speichern:
oDocument.StoreAsURL(ConvertToURL(dODT &
aODT(iODT)),aDummy()) ' Das aktuell indizierte 'aODT'-Dokument
schließen: oDocument.Close(False)
Next
End Sub
Viele Grüße
Rainer
--
Liste abmelden mit E-Mail an: users+unsubscribe@de.libreoffice.org
Probleme? https://de.libreoffice.org/hilfe-kontakt/mailing-listen/abmeldung-liste/
Tipps zu Listenmails: https://wiki.documentfoundation.org/Netiquette/de
Listenarchiv: https://listarchives.libreoffice.org/de/users/
Datenschutzerklärung: https://www.documentfoundation.org/privacy
Context
Privacy Policy |
Impressum (Legal Info) |
Copyright information: Unless otherwise specified, all text and images
on this website are licensed under the
Creative Commons Attribution-Share Alike 3.0 License.
This does not include the source code of LibreOffice, which is
licensed under the Mozilla Public License (
MPLv2).
"LibreOffice" and "The Document Foundation" are
registered trademarks of their corresponding registered owners or are
in actual use as trademarks in one or more countries. Their respective
logos and icons are also subject to international copyright laws. Use
thereof is explained in our
trademark policy.