我可以使用Win32 COM替换word文档中的文本吗?

时间:2009-06-25 18:58:33

标签: python winapi com ms-word replace

我必须在某些文档中执行大量替换,事实是,我希望能够自动执行该任务。一些文档包含公共字符串,如果它可以自动化,这将非常有用。从我到目前为止所读到的,COM可能是这样做的一种方式,但我不知道是否支持文本替换。 我希望能够在python中执行此任务?可能吗?你可以发一个代码片段来展示如何访问文档的文本吗?

谢谢!

5 个答案:

答案 0 :(得分:10)

我喜欢到目前为止的答案;
这是一个经过测试的例子(稍微修改自here
替换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')

答案 1 :(得分:8)

看看this是否为您提供了使用python进行文字自动化的开始。

打开文档后,您可以执行以下操作 在以下代码之后,您可以关闭文档&打开另一个。

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”并执行“replace all” 您可以根据需要将其他选项设置为true / false。

了解这一点的简单方法是创建一个包含您想要执行的操作的宏,请参阅生成的代码&在你自己的例子中使用它(有/没有修改参数)。

编辑:在看了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知识。但是,我希望你有理由继续前进 记得做一个Save&完成查找/替换操作后,关闭文档。

最后,您可以调用MSWord.Quit(从内存中释放Word对象)。

答案 2 :(得分:3)

如果this mailing list post是正确的,访问文档的文本很简单:

MSWord = win32com.client.Dispatch("Word.Application")
MSWord.Visible = 0 
MSWord.Documents.Open(filename)
docText = MSWord.Documents[0].Content

另见How to: Search for and Replace Text in Documents。这些示例使用VB和C#,但基础也适用于Python。

答案 3 :(得分:2)

结帐此链接:http://python.net/crew/pirx/spam7/

左侧的链接指向文档。

您可以使用对象模型对此进行概括,可在此处找到:

http://msdn.microsoft.com/en-us/library/kw65a0we(VS.80).aspx

答案 4 :(得分:2)

您也可以使用 VBScript 来实现此目的。只需将代码键入名为script.vbs的文件,然后打开命令提示符(开始 - >运行 - > Cmd),然后切换到脚本所在的文件夹并键入:

{{2 }}

cscript script.vbs