Hallo Rainer,
anbei ein iterativer "in einem Rutsch"-Lösungsvorschlag für die "odt"-Dateien.
(A) TEST-BEISPIEL
[1] In dem Verzeichnis "E:/TMP/ODT/" sind die zu modifizierenden "odt"-Dateien "ODT_1.odt", "ODT_2.odt" und "ODT_3".
[2] Alle drei Dateien enthalten jeweils die Zeichenfolge "ÄÖÜäöüß".
[3] Das Makro "SearchAndReplace" (Thomas' Makro leicht modifiziert) befinde sich in "macro:///Standard.Module1.SearchAndReplace".
[4] Das PERL-Programm
[4.1] speichert alle Dateinamen im Verzeichnis "E:/TMP/ODT/" in ein Array.
[4.2] arbeitet in einer Schleife das Array ab und bearbeitet auf diese Weise jede "odt"-Datei mit dem Makro.
[5] Nach Beendigung des PERL-Programms enthalten alle drei Dateien jeweils die Zeichenfolge "AeOeUeaeoeuess" gemäß Such- ("aSearch") und Ersetzungsvorschrift ("aReplace") im Makro.
(B) ANWENDUNG
[1] Du musst lediglich in "aSearch" die zu suchenden und in "aReplace" die zu ersetzenden Zeichen eintragen und dann das PERL-Programm starten, wodurch ALLE "odt"-Dateien im Verzeichnis bearbeitet werden.
[2] Anschließend kannst Du dann mal schauen, ob es noch "falsche Zeichen" in den "odt"-Dateien gibt. Wenn ja, ergänzt Du einfach "aSearch" und "aReplace" entsprechen und startest das PERL-Programm erneut.
[3] Punkt [2] musst Du dann so oft ausführen, bis alle "odt"-Dateien bereinigt sind.
[4] Die Pfade im PERL-Programm musst Du entsprechen Deiner Systemumgebung anpassen.
[5] Alternativ kann man das PERL-Programm auch durch ein entsprechendes BASH-Skript ersetzen. Kann ich leider nicht anbieten, da meine Systemumgebung "Windows 10" ist.
Grüße
Hans-Werner ;-))
(C) MAKRO
Sub SearchAndReplace(ODT as String)
Dim aSearch()
Dim aReplace()
Dim oD as Object
Dim aD() as Variant
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
oD = StarDesktop.loadComponentFromURL(ConvertToURL(ODT),"_blank",0,aPV())
For i = 0 to ubound(aSearch)
oReplace = oD.CreateReplaceDescriptor
With oReplace
.SetSearchString(aSearch(i))
.SetReplaceString(aReplace(i))
.SearchCaseSensitive = True
End With
oD.replaceAll(oReplace)
Next
oD.StoreAsURL(ConvertToURL(ODT),aD())
oD.Close(False)
End Sub
(D) PERL
use strict;
use warnings;
use File::Find;
my @A; # Array
my $D; # Directory
my $I; # Index
my $L; # LibreOffice
my $M; # Macro
my $S; # String
$D = "E:/TMP/ODT/";
$L = "C:/Program Files/LibreOffice/program/soffice.exe";
$S = "macro:///Standard.Module1.SearchAndReplace";
find(sub{push @A,$File::Find::name if -f },$D);
for ($I=0;$I <= $#A;$I++) {
$M = $S."(".$A[$I].")";
`"$L" --nologo "$M"`;
}