我想通过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"
}
答案 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)