使用不同的参数在 Outlook 中自动创建超链接

使用不同的参数在 Outlook 中自动创建超链接

在 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 专属解决方案,请转到文件 > 选项 > 自定义功能区。在右侧面板中,有一个开发人员复选框。单击它可启用开发人员功能(如宏)。我可能能够在一定程度上帮助您处理宏。

相关内容