我写了一个简单的VSTO插件,当用户点击功能区按钮时,会在电子邮件中插入超链接。这是一个代码示例:
private void button1_Click(object sender, RibbonControlEventArgs e)
{
var context = e.Control.Context as Inspector;
if (context != null)
{
if (context.IsWordMail())
{
var doc = context.WordEditor as Document;
if (doc != null)
{
var sel = doc.Windows[1].Selection;
doc.Hyperlinks.Add(sel.Range, "http://www.google.com", "", "", "Google", "");
}
}
}
else if (e.Control.Context is Explorer)
{
Explorer explorer = Globals.ThisAddIn.Application.ActiveExplorer();
if (explorer.Selection.Count == 1)
{
Microsoft.Office.Interop.Outlook.Selection itemSelection = explorer.Selection;
var item = itemSelection[1] as MailItem;
// get the instance of WordEditor in a reading pane?
}
}
}
在单独的窗口(e.Control.Context is Inspector
)中编辑电子邮件时,此方法很有效。
如果正在回复/转发消息并且打开阅读窗格,则编辑器将在阅读窗格(e.Control.Context is Explorer
)中内嵌显示。
在这种情况下,我无法弄清楚如何获取Document
的实例。我可以访问在资源管理器中选择的项目,但我无法确定如何访问正在阅读窗格中显示的文档编辑器。
如果我'将'编辑器弹出到一个单独的窗口,它可以正常工作(上下文更改为Inspector)。
有没有办法访问直接在阅读窗格内编辑的电子邮件文档?
在Dmitry的帮助下,我指出了正确的方向,我发现资源管理器类中有一个属性:Explorer.ActiveInlineResponseWordEditor
,它使编辑器显示内联。
答案 0 :(得分:0)
您可以调用MailItem.GetInspector,然后调用Inspector.WordEditor。这应该在较新版本的Outlook中正常工作。
您可以在SafeExplorer中使用Redemption对象 - 它应该适用于所有版本的Outlook,并且它公开SafeExplorer.ReadingPane属性(ReadingPane对象)。