用Powershell替换.docx文件中的许多单词

时间:2016-10-18 07:14:49

标签: string function powershell ms-word

我想通过Powershell用另一个.txt文件中的某些字符串替换我的.docx文件中的一些单词。 我打开并尝试用两个函数替换单词:

Function OpenWordDoc($Filename)
{
    $objWord = New-Object -comobject Word.Application  
    $objWord.Visible = $True;
    $objWord.Documents.Open($Filename)
    $objSelection = $objWord.Selection
    Return $objSelection; #return objWord
}

Function SearchAWord($Document,$search,$replacewithtext)
{ 
    $FindText = $search 
    $MatchCase = $False 
    $MatchWholeWord = $False 
    $MatchWildcards = $False 
    $MatchSoundsLike = $False 
    $MatchAllWordForms = $False 
    $Forward = $True 
    $Wrap = $wdFindContinue 
    $Format = $False 
    $wdReplaceNone = 1 
    $ReplaceWith = $replacewithtext
    $wdFindContinue = 1 

    $a=$Document.Find.Execute($FindText,$MatchCase,$MatchWholeWord,$MatchWildcards,$MatchSoundsLike,$MatchAllWordForms,$Forward,$Wrap,$Format,$ReplaceWith,$wdReplaceNone) 
}

当我使用该函数打开Doc并尝试用字符串替换Word时,它可以工作,但是当我尝试更改更多的单词时,它找不到具有该功能的其他单词。 当我打开文档后直接搜索它们时,我可以找到它们。所以脚本总是只找到搜索到的第一个单词。

我是否错误地创建了这些函数?

编辑:我正在调用这样的函数:

$doc=OpenWordDoc -Filename "C:\Users\$UserName\Desktop\test.docx"; #opens the Word-doc
for([int]$i=0; $i -ne 4;$i++)
{
  SearchAWord -Document $doc -search "string$i" -replacewithtext "test$i"
}

1 个答案:

答案 0 :(得分:0)

好的,我找到了答案:

如果要在Doc中替换多个字符串,则必须将Replace e方法中的最后一个$Document.Find.Execut变量的值更改为2,这将设置该函数WdReplace-Constant"replace all"

$Document.Find.Execute($FindText,$MatchCase,$MatchWholeWord,$MatchWildcards,$MatchSoundsLike,$MatchAllWordForms,$Forward,$Wrap,$Format,$ReplaceWith,2)