Viele Word Dokumente Suchen-Ersetzen
Hallo,
hoffentlich kann mir jemand weiterhelfen:
Ich habe viele Word Vorlagen / Word Dokumente in einer Ordnerstruktur in diversen Unterordner abgespeichert.
Hier muss überall eine Postleitzahl angepasst werden.
Ist es möglich "12345" in allen Word Dokumenten / Vorlagen bulk anzupassen (Suchen / Ersetzen)?
Ich habe ausführlich gegoogelt und die Forensuche verwendet. Ich finde einiges um Dateinamen anzupassen und einige nicht funktionierende VBA Scripts, jedoch fehlen mir vermutlich die richtigen Suchbegriffe.
Hat jemand eine Idee?
Vielen Dank!
hoffentlich kann mir jemand weiterhelfen:
Ich habe viele Word Vorlagen / Word Dokumente in einer Ordnerstruktur in diversen Unterordner abgespeichert.
Hier muss überall eine Postleitzahl angepasst werden.
Ist es möglich "12345" in allen Word Dokumenten / Vorlagen bulk anzupassen (Suchen / Ersetzen)?
Ich habe ausführlich gegoogelt und die Forensuche verwendet. Ich finde einiges um Dateinamen anzupassen und einige nicht funktionierende VBA Scripts, jedoch fehlen mir vermutlich die richtigen Suchbegriffe.
Hat jemand eine Idee?
Vielen Dank!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 3377385070
Url: https://administrator.de/forum/viele-word-dokumente-suchen-ersetzen-3377385070.html
Ausgedruckt am: 07.04.2025 um 22:04 Uhr
2 Kommentare
Neuester Kommentar
Servus.
Die Powershell ist z.B. dein Freund (verarbeitet werden im Beispiel *.docx,*.docm,*.dotx,*.dotm, wenn noch andere gewünscht den Include-Filter in Zeile 13 an die eigenen Bedürfnisse anpassen). Ein installiertes Word mit installierten VBA-Assemblies ist für das Beispiel Voraussetzung.
Aufzurufen in der Powershell mit den Parametern für den Ordner, Suchbegriff und Ersetzungsbegriff
Wie immer ohne Gewähr auf Leib und Leben.
Viel Spaß
Grüße Uwe
Die Powershell ist z.B. dein Freund (verarbeitet werden im Beispiel *.docx,*.docm,*.dotx,*.dotm, wenn noch andere gewünscht den Include-Filter in Zeile 13 an die eigenen Bedürfnisse anpassen). Ein installiertes Word mit installierten VBA-Assemblies ist für das Beispiel Voraussetzung.
param(
[parameter(mandatory=$true)][ValidateScript({Test-Path $_})][string]$folder,
[parameter(mandatory=$true)][string]$search,
[parameter(mandatory=$false)][string]$replace = ''
)
$folder = (Resolve-Path $folder).Path
$ErrorActionPreference = 'Stop'
# create word object
$objWord = New-Object -Com Word.Application -P @{Visible = 0}
# disable alerts
$objWord.DisplayAlerts = 0
# for each file in folder (recursive)
foreach($file in Get-ChildItem $folder -File -Include *.do[ct][xm] -Recurse){
write-host "'$($file.Fullname)' ... " -F Green -NoNewline
try{
# open file
$doc = $objWord.Documents.Open($file.Fullname)
# replace all occurences in all story ranges
$found = $false
$doc.StoryRanges | %{
$result = $_.Find.Execute($search,$false,$false,$false,$false,$false,$true,1,$false,$replace, 2,$false,$false,$false,$false)
if ($result){
$found = $true
}
}
# save document when changes were made
if ($found){
write-host "(Suchbegriff gefunden und ersetzt) ... " -F Cyan -NoNewline
$doc.Save()
}else{
write-host "(Suchbegriff nicht gefunden) ... " -F Gray -NoNewline
}
# close document
$doc.Close($false)
}catch{
write-host $_.Exception.Message -F Red
}
write-host "OK" -F Green
}
# enable alerts
$objWord.DisplayAlerts = -1
# quit word and release resources
$objWord.Quit()
$doc,$objWord | %{[void][System.Runtime.InteropServices.Marshal]::ReleaseComObject($_)}
.\word_replace_strings.ps1 -folder "D:\mydata" -Search "12345" -Replace "99999"
Viel Spaß
Grüße Uwe