用文件Word Powershell中的超链接替换字符串

时间:2018-09-28 18:06:09

标签: powershell ms-word

我想用超链接替换字符串

我尝试这样的事情

更新:

$FindText = "[E-mail]"
$email ="asdadasd@asdada.com"
$a=$objSelection.Find.Execute($FindText)
$newaddress = $objSelection.Hyperlinks.Add($objSelection.Range,$email) )

但是这会将电子邮件插入文件字词的开头,不要替换字符串“ [E-mail]”

1 个答案:

答案 0 :(得分:0)

Add-Type -AssemblyName "Microsoft.Office.Interop.Word"
$wdunits = "Microsoft.Office.Interop.Word.wdunits" -as [type]
$objWord = New-Object -ComObject Word.Application  
$objWord.Visible = $false
$findText = "[E-mail]"
$emailAddress = "someemail@example.com"
$mailTo = "mailto:"+$emailAddress
$objDoc = $objWord.Documents.Open("Path\to\input.docx")
$saveAs = "Path\to\output.docx")
$range = $objDoc.Content
$null = $range.movestart($wdunits::wdword,$range.start)
$objSelection = $objWord.Selection
$matchCase = $false
$matchWholeWord = $true
$matchWildcards = $false
$matchSoundsLike = $false
$matchAllWordForms = $false
$forward = $true 
$wrap = 1
$format = $False
$wdReplaceNone = 0 
$wdFindContinue = 1
$wdReplaceAll = 2

$wordFound = $range.find.execute($findText,$matchCase,$matchWholeWord,$matchWildCards,$matchSoundsLike,$matchAllWordForms,$forward,$wrap)

if($wordFound)
{
    if ($range.style.namelocal -eq "normal")
    {
        $null = $objDoc.Hyperlinks.Add($range,$mailTo,$null,$null,$emailAddress)
    }
}

$objDoc.SaveAs($saveAs)
$objDoc.Close()
$objWord.Quit()
Remove-Variable -Name objWord
[gc]::Collect()
[gc]::WaitForPendingFinalizers()

Kinda很难看,但是此脚本可以满足您的需求。它将加载用$objDoc指定的.docx,找到$findText的所有实例,并用$emailAddress的mailto链接替换它,然后将更改保存到$saveAs

其中大部分内容基于"Hey, Scripting Guy"文章