我可以用Win32 COM替换Word文档中的文本吗?
我需要在一些文档中进行大量的替换操作,问题是我希望能够自动化这个任务。有些文档里包含了常见的字符串,如果能自动化处理,那就太好了。从我目前了解到的情况来看,COM可能是实现这个目标的一种方法,但我不确定是否支持文本替换。
我想知道能不能用Python来完成这个任务?可以吗?能不能给我发一段代码,展示一下如何访问文档中的文本?
谢谢!
5 个回答
3
如果这个邮件列表的帖子说得对,获取文档中的文本其实很简单:
MSWord = win32com.client.Dispatch("Word.Application")
MSWord.Visible = 0
MSWord.Documents.Open(filename)
docText = MSWord.Documents[0].Content
另外,可以参考如何在文档中搜索和替换文本。虽然示例使用的是VB和C#,但基本的思路在Python中也适用。
13
我觉得目前的回答都不错;
这里有一个经过测试的例子(稍微修改自这里)
这个例子可以在Word文档中替换掉所有出现的某个字符串:
import win32com.client
def search_replace_all(word_file, find_str, replace_str):
''' replace all occurrences of `find_str` w/ `replace_str` in `word_file` '''
wdFindContinue = 1
wdReplaceAll = 2
# Dispatch() attempts to do a GetObject() before creating a new one.
# DispatchEx() just creates a new one.
app = win32com.client.DispatchEx("Word.Application")
app.Visible = 0
app.DisplayAlerts = 0
app.Documents.Open(word_file)
# expression.Execute(FindText, MatchCase, MatchWholeWord,
# MatchWildcards, MatchSoundsLike, MatchAllWordForms, Forward,
# Wrap, Format, ReplaceWith, Replace)
app.Selection.Find.Execute(find_str, False, False, False, False, False, \
True, wdFindContinue, False, replace_str, wdReplaceAll)
app.ActiveDocument.Close(SaveChanges=True)
app.Quit()
f = 'c:/path/to/my/word.doc'
search_replace_all(f, 'string_to_be_replaced', 'replacement_str')
9
看看这个链接,它可以帮助你开始使用Python进行Word文档的自动化。
一旦你打开了一个文档,你可以做以下操作。
在下面的代码之后,你可以关闭文档并打开另一个。
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "test"
.Replacement.Text = "test2"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchKashida = False
.MatchDiacritics = False
.MatchAlefHamza = False
.MatchControl = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
上面的代码把文本“test”替换成“test2”,并且是“全部替换”。
你可以根据需要把其他选项设置为真或假。
学习这个最简单的方法是创建一个宏,记录你想要执行的操作,查看生成的代码,然后在自己的例子中使用它(可以修改参数或不修改)。
编辑:在查看了Matthew的一些代码后,你可以这样做:
MSWord.Documents.Open(filename)
Selection = MSWord.Selection
然后把上面的VB代码转换成Python代码。
注意:下面的VB代码是一种简写方式,用来设置属性,而不需要使用冗长的语法。
(VB)
With Selection.Find
.Text = "test"
.Replacement.Text = "test2"
End With
Python
find = Selection.Find
find.Text = "test"
find.Replacement.Text = "test2"
请原谅我对Python的了解。但我希望你能明白如何继续前进。
记得在完成查找/替换操作后,保存并关闭文档。
最后,你可以调用MSWord.Quit
(以释放内存中的Word对象)。