使用Powershell替换MSWord中的多个单词

时间:2017-04-26 18:06:38

标签: powershell

我正在尝试使用powershell替换word文档中的多行,而不必在每次更改后保存和关闭。现在我有:

 $objWord = New-Object -comobject Word.Application  
    function findAndReplace
    {
        $objDoc = $objWord.Documents.Open("C:\temp\test.docx")
        $objWord.Visible = $false
        $objSelection = $objWord.Selection
        $a = $objSelection.Find.Execute($FindText, $false, $true, $False, $False, $False, $true, 1, $False, $ReplaceWith)
        $objDoc.Save()
        $objDoc.close()

    }

    ############DEVICE DETAILS#############
    $FindText = "USERID"
    $ReplaceWith = $AssociateIDnum
    findAndReplace
    $FindText = "CONTACTNUMBER"
    $ReplaceWith = $Phone
    findAndReplace

使用它,我创建了运行这些命令的函数,并在新单词的每个实例上更改$ findtext和$ replacetext,然后每次运行该函数。

使用此方法,Word Doc将打开和关闭近25次以写入每个新单词替换。

有没有办法让一个函数或循环来改变$ findtext 和$ replacewith变量每次?

我对powershell比较陌生,但我自己一直在学习它。

1 个答案:

答案 0 :(得分:1)

尝试使用对象列表作为函数的参数,类似于:

$objWord = New-Object -comobject Word.Application  
    function findAndReplace ($todoObjs)
    {
        $objDoc = $objWord.Documents.Open("C:\temp\test.docx")
        $objWord.Visible = $false
        $objSelection = $objWord.Selection
        foreach ($todoObj in $todoObjs)
        {
          $a = $objSelection.Find.Execute($($todoObj.FIND), $false, $true, $False, $False, $False, $true, 1, $False, $($todoObj.REPLACE))
        }
        $objDoc.Save()
        $objDoc.close()

    }

    ############DEVICE DETAILS#############
$todo = @"
FIND,REPLACE
toto,titi
tutu,tata
"@

$todoObjs = ConvertFrom-Csv $todo
findAndReplace $todoObjs