我必须在某些文档中执行大量替换,事实是,我希望能够自动执行该任务。一些文档包含公共字符串,如果它可以自动化,这将非常有用。从我到目前为止所读到的,COM可能是这样做的一种方式,但我不知道是否支持文本替换。 我希望能够在python中执行此任务?可能吗?你可以发一个代码片段来展示如何访问文档的文本吗?
谢谢!
答案 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),然后切换到脚本所在的文件夹并键入:
cscript script.vbs