Date: prev next · Thread: first prev next last
2020 Archives by date, by thread · List index


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.