🙏 Helfen Sie jetzt mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀

❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

Suchen & Ersetzen in mehreren .odt , Shell-Script et al.?

Alles zur Programmierung im LibreOffice.
Antworten
Sire
Beiträge: 3
Registriert: Sa 16. Nov 2013, 10:50

Suchen & Ersetzen in mehreren .odt , Shell-Script et al.?

Beitrag von Sire » Sa 16. Nov 2013, 12:36

Hallo,

ich suche nach einer Möglichkeit, um in mehreren .odt-Dateien einen Ausdruck zu finden und zu ersetzen ohne jedes einzelne Dokument öffnen zu müssen. Ich nutze Linux und dachte z.b. an die Shell. Vielleicht gibt es schon ein fertiges Script für diesen Bedarf oder eine LibreOffice eigene Funktion. Meine Internetrecherche hat mich nicht weitergebracht, eventl. fehlen mir auch die richtigen (Such-)Begriffe.

Gruß

Klaus

gogo
* LO-Experte *
Beiträge: 1081
Registriert: Sa 5. Feb 2011, 19:07

Re: Suchen & Ersetzen in mehreren .odt , Shell-Script et al.

Beitrag von gogo » Sa 16. Nov 2013, 13:54

per shell etwa so:

Code: Alles auswählen

 unzip DokumentX.odt content.xml
sed ... > content.xml
zip content.xml DokumentX.odt
unzip kann per -p auch in die pipe entzippen - dann erspart man sich den Schreibvorgang auf die Festplatte.
zip liest zwar per default die stdin und komprimiert in die stdout, ich weiss aber nicht wirklich wie Du die stdout als content.xml in die DokumentX.odt bekommst

Ein weiteres Problem ist: content.xml ist ein xml - sollte der Suchtext im XML-Code-Bereich vorkommen ....

per Makro:

Code: Alles auswählen

sub DoksOeffnenUndVeraendertSchliessen(sDokURLs)
   dim n as integer
   dim sUrl as String
   dim myFileProp(0) as new com.sun.star.beans.PropertyValue
      myFileProp(0).name="Hidden"
      myFileProp(0).value=TRUE
   dim oDocument as object
   dim sSearchString as String
   dim sReplaceString as String

   sSearchString = inputbox("Suchen nach:")
   sReplaceString = inputbox("Ersetzen durch:")

   for n=lbound(sDokURLs) to ubound(sDokURLs)
      sURL=converttourl(sDokURLs(n))
      oDocument = StarDesktop.loadComponentFromURL(sURL, "_blank", 0, myFileProp() )
      call StringErsetzen(oDokument, sSearchString, sReplaceString)
      oDokument.store()
      oDokument.close()
      ' evtl. muss man hier noch was einfuegen, wenn der .close Vorgang zu lange dauern sollte,
      ' und einen Konflikt mit dem naechsten .loadComponentFromURL ausloest!
   next n

end sub

sub StringErsetzen(oDok, sSearch, sReplace)
   dim mySuche as object
   mySuche=oDok.createReplaceDescriptor()

   ' ggf!: mySuche.SearchRegularExpression = True
   mySuche.setSearchString(sSearch)
   mySuche.setReplaceString(sReplace)

   oDok.replaceAll(mySuche)

end sub
g
2008 LucidL./MaverickM./WinXP LibreOffice 3.3.2 > 02/13 LinuxMint13/Xubuntu > 09/13 Debian Wheezy+LO3.5.4.2 > 01/15 Debian Jessie KDE+LO4.3.3.2/Mint17 openbox auf USB+LO4.2.8.2 > 03/16 ArchLin & LO5.1+ff > 02/18 Kubuntu


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