我正在尝试使用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比较陌生,但我自己一直在学习它。
答案 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