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
🙏 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!🍀
>> 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.?
Re: Suchen & Ersetzen in mehreren .odt , Shell-Script et al.
per shell etwa so:
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
unzip DokumentX.odt content.xml
sed ... > content.xml
zip content.xml DokumentX.odt
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
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.