Seite 1 von 1

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

Verfasst: Sa 16. Nov 2013, 12:36
von Sire
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

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

Verfasst: Sa 16. Nov 2013, 13:54
von gogo
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