在MS Outlook中,有一种方法可以通过重定向到正确网站的超链接自动替换某些单词,例如Google,MSN,Facebook等(我在CSV文件中有一个详尽的列表)。因此,基本上,当我键入google时,它会将其转换为超链接。
我的CSV文件:
Word, URL
Facebook, https://facebook.com
MSN, https://msn.com
Google, https://google.com
到目前为止,我有一个脚本,该脚本将自动更正词条添加到对象中,并使用另一个单词(不使用CSV而是单词文档)将其替换。但是我无法用超链接替换它。它会导致错误,指出自动更正条目仅接受字符串格式,而不接受对象(超链接)。参考:Add formatted text to Word autocorrect via PowerShell
[当我通过Outlook手动创建超链接并将此超链接添加到自动更正时,并且运行以下PowerShell脚本,我找不到此自动更正条目:
(New-Object -ComObject word.application).AutoCorrect.Entries | where{$_.Value -like "*http*"}
我想改写来自Use PowerShell to Add Bulk AutoCorrect Entries to Word的代码
如果有人对如何将超链接添加到自动更正条目有想法,我将不胜感激。
谢谢!
我终于设法如何为word和Outlook添加自动更正的条目。我需要创建一个带有'X行'和'2列'的.docx文件,第一列包含我想要自动更正的单词,例如'google',第二列包含'google'链接。
$objWord = New-Object -Com Word.Application
$filename = 'C:\Users\id097109\Downloads\test3.docx'
$objDocument = $objWord.Documents.Open($filename)
$LETable = $objDocument.Tables.Item(1)
$LETableCols = $LETable.Columns.Count
$LETableRows = $LETable.Rows.Count
$entries = $objWord.AutoCorrect.entries
for($r=1; $r -le $LETableRows; $r++) {
$replace = $LETable.Cell($r,1).Range.Text
$replace = $replace.Substring(0,$replace.Length-2)
$withRange = $LETable.Cell($r,2).Range
$withRange.End = $withRange.End -1
# $with = $withRange.Text
Try {
$entries.AddRichText($replace, $withRange) | out-null
}
Catch [system.exception] {
Write-Host $_.Exception.ToString()
}
}
$objDocument.Close()
$objWord.Quit()
[gc]::collect()
[gc]::WaitForPendingFinalizers()
$rc = [System.Runtime.Interopservices.Marshal]::ReleaseComObject($objWord)
此代码允许修改包含所有自动更正到对象链接的文件Normal.dotm(C:\ Users {您的用户ID} \ AppData \ Roaming \ Microsoft \ Templates)但是要将这些更改应用于Outlook,您必须删除“ NormalEmail.dotm”和复制/粘贴“ Normal.dotm”,并将其重命名为“ NormalEmail.dotm”
这是避免手动执行的脚本:
$FileName='C:\Users\{your id}\AppData\Roaming\Microsoft\Templates\Normal.dotm'
$SaveTo='C:\Users\{your id}\AppData\Roaming\Microsoft\Templates\NormalEmail.dotm'
Remove-Item –path $SaveTo
$Word = New-Object –ComObject Word.Application
$Document=$Word.Documents.Open($Filename)
$Document.SaveAs($SaveTo)
$Document.Close