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