在 Outlook 中,有没有办法自动创建具有不同参数的超链接?具体来说,我想链接到 Team Foundation Server 中的工作项,但通用解决方案也可以。
例如,如果我输入“Work Item 12345”,我希望它自动创建指向“mytfs/workitems?id=12345”的超链接。理想情况下,链接文本仍应为“Work Item 12345”。
我尝试创建自动更正条目,但它不匹配通配符*
或%
- 似乎它仅适用于文字。
我也尝试使用发送邮件规则,但无法替换电子邮件正文中的内容。
为每个工作项创建自动更正替换并不是一个可行的解决方案。有什么想法吗?
答案1
我为您找到了一个仅适用于 Outlook 的答案。Outlook 支持一种称为 VBA(Visual Basic for Applications)的编程语言。
使用Alt+F11访问 VBA 编辑器,然后在 Project1 -> MicrosoftOutlookObjects 下右键单击“ThisOutlookSession”,然后单击“查看代码”。
然后将此代码粘贴到出现的编辑器中:
Sub GetValueUsingRegEx()
' Set reference to VB Script library
' Microsoft VBScript Regular Expressions 5.5
Dim olMail As Outlook.MailItem
Dim Reg1 As RegExp
Dim M1 As MatchCollection
Dim M As Match
Set olMail = Application.ActiveInspector.CurrentItem
' Debug.Print olMail.Body
Set Reg1 = New RegExp
With Reg1
.Pattern = "Work Item\s*\d*\s*"
.Global = True
End With
If Reg1.Test(olMail.Body) Then
Set M1 = Reg1.Execute(olMail.Body)
Debug.Print Split(M1.Item(0), " ")(2)
olMail.HTMLBody = Replace(olMail.HTMLBody, M1.Item(0), "<a href=" & Chr(34) & "http://mytfs/workitems?id=" & Split(M1.Item(0), " ")(2) & Chr(34) & ">Work Item " & Split(M1.Item(0), " ")(2) & "</a>")
Debug.Print olMail.HTMLBody
End If
End Sub
当您发送任何包含“工作项目####”的消息时,它将运行并自动将其更改为链接。您还可以将其设为热键,以便在输入消息时执行此操作。
答案2
好吧,我找到了一个使用 AutoHotKey 的解决方案,它只在 Outlook 中运行。我仍然更喜欢只在 Outlook 中运行的解决方案,但目前这个方案是可行的。
此代码可用于在您自然输入内容时自动创建链接。明显的警告是:您必须自然输入 URL 参数才能感觉无缝。但是,这非常适合 TFS 工作项。
#SingleInstance force ; Force kill any currently running instances
#IfWinActive,,Message ; Only do this in Outlook
:?*:Work Item ::
targetWord = Work Item ; The hotstring to match
StringLen,targetWordLength, targetWord ; The length of the hotstring to match
tfsUrl = mytfs/workitems?id= ; Your URL
Input, id, v,{Enter}{Space}{Tab} ; Assign input to the variable id; stop accepting input on Enter, Space, or Tab
If (id = "") ; Undo and return
{
SendInput, {Bs}%targetWord% `
Return
}
StringLen,idLength, id ; Assign the length of id to idLength
idLength++ ; Increment idLength
SendInput {BackSpace %idLength%}%targetWord% %id% ; Backspace and enter the full link text
Send,{Shift down}{Left %targetWordLength%}{Left %idLength%}{Shift up} ; Highlight the full text
Send, ^k ; Insert hyperlink
SendInput, %tfsUrl%%id% ; Send text for hyperlink
Send, {Space} ; If you don't send a space, Outlook might suggest a longer URL which starts with the URL you provided. A space at the end prevents this.
Send, {Enter} ; Enter to exit dialog
Return
当您输入“工作项”时,它会删除文本并等待您输入以 Enter、空格或 Tab 结尾的值。当您输入完值并按下其中一个结束键时,我们会删除参数值,将所需文本放回输入中,然后添加超链接。
答案3
为了这个目的,我刚刚编写了一个非常简单的热字符串脚本:
:*:Work Item ::
SendInput, http://mytfs/workitems?id=
Return
将其放入 .ahk 文件中,右键单击它,然后单击“运行脚本”。我已经在我的系统上对其进行了测试。
Outlook 可以对此进行自动更正,但我发现它充其量只是不够完善。
这是该脚本的另一个版本,将其更改为自定义文本链接:
:*:Work Item ::
SendInput, http://mytfs/workitems?id=
SendInput, ^+{Left 4}
SendInput, ^k
SendInput, {End}
Sleep, 2000
SendInput, !t
SendInput, +^{Left}
SendInput, Work Item{Space}
SendInput, {Enter}
Return
您将有两秒钟的时间输入 ID,之后它会自动更改文本并关闭。
如果您仍然希望使用 Outlook 专属解决方案,请转到文件 > 选项 > 自定义功能区。在右侧面板中,有一个开发人员复选框。单击它可启用开发人员功能(如宏)。我可能能够在一定程度上帮助您处理宏。