Using win32com.client in python how to find and replace multiple texts

I am trying to add multiple string values ​​to a Word document using find and replace using the win32com.client Python library.

I can find and replace a single value, but I do not know how to do this for multiple values.

This is what I still have:

import win32com.client word = win32com.client.DispatchEx("Word.Application") word.Visible = True word.DisplayAlerts = 0 word.Documents.Open("C:\TEMP\Testing\Me.docx") word.Selection.Find find.Text = "First Name" find.Replacement.Text = "John" find.Execute(Replace=1, Forward=True) # the following part doesn't run find.Text = "Last Name" find.Replacement.Text = "Smith" find.Execute(Replace=1, Forward=True) word.ActiveDocument.SaveAs('C:\TEMP\Testing\Me2.docx') word.Quit() # releases Word object from memory 

Any suggestions?

+5
python ms-word
source share
1 answer

Try the following:

 import win32com.client from os import getcwd, listdir docs = [i for i in listdir('.') if i[-3:]=='doc' or i[-4:]=='docx'] #All Word file FromTo = {"First Name":"John", "Last Name":"Smith"} #You can insert as many as you want word = win32com.client.DispatchEx("Word.Application") word.Visible = True #Keep comment after tests word.DisplayAlerts = False for doc in docs: word.Documents.Open('{}\\{}'.format(getcwd(), doc)) for From in FromTo.keys(): word.Selection.Find.Text = From word.Selection.Find.Replacement.Text = FromTo[From] word.Selection.Find.Execute(Replace=2, Forward=True) #You made the mistake here=> Replace must be 2 name = doc.rsplit('.',1)[0] ext = doc.rsplit('.',1)[1] word.ActiveDocument.SaveAs('{}\\{}_2.{}'.format(getcwd(), name, ext)) word.Quit() # releases Word object from memory 
+5
source share

All Articles