C# VSTO Outlook Outgoing Message Hyperlink
我正在为 Outlook 2010 创建一个 C# VSTO 加载项。我正在尝试在正在处理的活动传出消息的插入点生成一个超链接(超链接是通过消息窗口功能区上的按钮插入的)。插件的所有其他功能(功能区按钮、访问 ActiveInspector().CurrentItem 等)都可以正常工作。我正在使用此代码:
1 2 3 4 5 6 7 8 9 10
| object linktext = txtDisplayText.Text;
object result ="MY URL";
object missObj = Type.Missing;
Outlook.MailItem currentMessage =
Globals.ThisAddIn.Application.ActiveInspector().CurrentItem;
Word.Document doc = currentMessage.GetInspector.WordEditor;
object oRange = doc.Windows[1].Selection;
doc.Application.Selection.Hyperlinks.Add
(oRange, ref result, ref missObj, ref missObj, ref linktext, ref missObj); |
当我运行此代码时,我收到消息"命令失败。" oRange 中的对象。非常感谢任何帮助。
这个问题确实是由为 Hyperlinks.Add 命令定义选择的方式引起的。选择需要键入 Microsoft Word 选择而不是对象类型(由于 Outlook 使用 Word 作为其编辑器):
1
| Word.Selection objSel = doc.Windows[1].Selection; |
因此,要在撰写过程中在 Outlook 邮件的插入点插入超链接,代码对 Word 和 Outlook 都有 using 语句:
1 2
| using Outlook = Microsoft.Office.Interop.Outlook;
using Word = Microsoft.Office.Interop.Word; |
然后这段代码:
1 2 3 4 5 6 7 8 9 10
| object linktext = txtDisplayText.Text;
object result ="MY URL";
object missObj = Type.Missing;
Outlook.MailItem currentMessage =
Globals.ThisAddIn.Application.ActiveInspector().CurrentItem;
Word.Document doc = currentMessage.GetInspector.WordEditor;
Word.Selection objSel = doc.Windows[1].Selection;
doc.Hyperlinks.Add
(objSel.Range, ref result, ref missObj, ref missObj, ref linktext, ref missObj); |
还有两个值得注意的调整。因为 Word.Selection 类型用于超链接的锚点,所以需要将 Hyperlinks.Add 命令从 更改为 doc.Hyperlinks.Add。由于 Outlook 使用 Microsoft 的 Word 编辑器,doc.Hyperlinks.Add 的锚点使用了一个范围:objSel.Range.
-
嘿乔,谢谢你发布你的答案。它实际上对我帮助很大。但是一件小事。如果你要在超链接中添加一个新行,你会怎么做?我在循环中调用您的代码以添加多个超链接,但将 System.Environment.NewLine 添加到我的链接文本会导致在我的下一个链接之前的新行上显示一个有线图标。非常感激!
-
@dbnex14 我认为您想将新行添加到包含链接的范围对象中。试试 objSel.Range.Text = @"\
\
"; 这里的附加信息:如何以编程方式将文本插入 Word 文档
-
谢谢,但这只是添加字符串 "\\\\
\\\\
"。我也尝试设置为 "\\\\
" 或 objSel.Range.Text = System.Environment.NewLine 但那也不会添加新行。非常感谢乔!
-
@dbnex14 我是不是误会了?你不想输出一个超链接,然后是一个换行符,然后是另一个链接等吗?我看到你在这里发布了这个问题:Outlook VSTO - 在 WordEditor 文档超链接中添加新行。如果我有时间,我今晚会玩代码,并在你发布这个问题的地方继续这个对话(上面链接)。
-
你是对的,这正是我想要的,但在做 objSel.Range.Text=@"\\\\
\\\\
" 正如你所建议的,只需插入 "\\\\
\\\\
" 没有换行符的字符串。如果我有 10 个链接,我希望它们显示在 10 行中,一个接一个。正如您在我上面提到的帖子中看到的那样,我使用 System.Environment.NewLine 连接到链接。这有效,但在每行的开头显示有线字符。我在我的项目中引用 Microsoft.Interop 14(我相信是 Office 2010)库。
-
@dbnex14 我在您的 SO 问题出现的地方发布了我的答案。抱歉在我上面的评论中键入 @"\
\
"。是一个错字,不应该有 "@" 符号(这使得反斜杠成为文字字符串字符,而不是开始转义序列)。无论如何,请完全忽略评论,因为我现在了解发生了什么,并详细说明了我认为您的 SO 问题的正确答案。干杯。
-
我会看一下,但我确实记得尝试了几件事,包括只是 "\\\\
"。我会看看你的答案,让你知道。非常感谢乔!
使用 MailItem 类的 HTMLBody 属性来修改 ItemSend 事件处理程序中的消息正文(插入超链接)。您需要找到粘贴超链接 的位置,修改 HTML 格式正确的字符串并将其分配回来。
- Eugene,ItemSend 事件处理程序在用户发送消息后拦截消息。我正在使用我放置在消息功能区中的自定义功能区按钮,供用户插入超链接,然后继续处理消息。 HTMLBody 属性替换了整个 Outlook 邮件,但我希望在邮件文本的插入点插入文本(键入时会看到文本出现的位置)。我目前认为我需要以某种方式更改范围以阻止 Hyperlinks.Add 失败。
-
您需要在现有 HTML 标记中插入超链接,然后将其重新设置。 HTMLBody 属性不会替换整个 Outlook 邮件。你试过什么代码?
-
尤金,HTMLBody 不是答案。请参阅我上面的代码。谢谢。
-
HTMLBody 是完成工作的另一种方法。
-
Eugene,如果您想发布您的代码以使 HTMLBody 与在外发 Outlook 邮件的插入点添加超链接一起工作(并在超链接之后将插入点返回到用户的前一个可编辑点创建)我认为我自己和其他人会从中受益。
-
@EugeneAstafiev 是的,使用 HTMLBody 是可行的,但它是一种替代方法。在某些情况下,我们可能不想使用 HTMLBody 而是 WordEditor。