2013-05-15 64 views
5

Tôi đang cố thêm nhiều giá trị chuỗi vào tài liệu Word bằng cách tìm và thay thế bằng thư viện Python win32com.client.sử dụng win32com.client trong python cách tìm và thay thế nhiều văn bản

Tôi có thể tìm và thay thế một giá trị, nhưng tôi không biết cách thực hiện điều này cho nhiều giá trị.

Đây là những gì tôi có cho đến nay:

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 

Bất kỳ lời đề nghị?

Trả lời

5

Hãy thử điều này:

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 
Các vấn đề liên quan