VSTO Outlook: Get selected attachment

依然范特西╮ 提交于 2019-12-11 02:16:30

问题


I'm trying to do an action on a selected attachment in outlook 2010. I created an Outlook VSTO project in VS2012.

This is the XML for adding a button on the attachment ribbon:

<?xml version="1.0" encoding="UTF-8"?>
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="Ribbon_Load">
  <ribbon>
    <contextualTabs>
      <tabSet idMso="TabSetAttachments">
        <tab idMso="TabAttachments">
          <group label="MyGroup" id="MyAttachmentGroup">
            <button id="AttachButton"
                size="large"
                label="Do something"
                imageMso="HappyFace"
                onAction="DoSomething" />
          </group>
        </tab>
      </tabSet>
    </contextualTabs>
  </ribbon>
</customUI>

This is the code in ThisAddIn.cs

protected override Microsoft.Office.Core.IRibbonExtensibility CreateRibbonExtensibilityObject()
{
    return new ProcessAttachment(this);
}

This is the ProcessAttachment class:

[ComVisible(true)]
public class ProcessAttachment : Office.IRibbonExtensibility
{
    private Office.IRibbonUI ribbon;
    private ThisAddIn plugin;

    public ProcessAttachment(ThisAddIn plugin)
    {
        this.plugin = plugin;
    }

    public void Ribbon_Load(Office.IRibbonUI ribbonUI)
    {
        this.ribbon = ribbonUI;
    }

    public void DoSomething(Office.IRibbonControl control)
    {
        var explorer = plugin.Application.ActiveExplorer();
        var selection = explorer.Selection;

        if (selection.Count > 0)   
        {
            object selectedItem = selection[1];
            var mailItem = selectedItem as Outlook.MailItem;
            //How to get selected attachment?
        }
    }
}

How can I get the selected attachment here?


回答1:


I solved it this way: (this code is just an example and needs improvement)

public void DoSomething(Office.IRibbonControl control)
{
    var window = plugin.Application.ActiveWindow();
    var attachsel = window.AttachmentSelection();

    int? index = null;
    if (attachsel.count > 0)
    {
        var attachment = attachsel[1];
        index = attachment.Index;
    }

    var explorer = plugin.Application.ActiveExplorer();
    var selection = explorer.Selection;

    if ((selection.Count > 0) && (index != null))   
    {
        object selectedItem = selection[1];
        var mailItem = selectedItem as Outlook.MailItem;
        foreach (Outlook.Attachment attach in mailItem.Attachments)
        {
            if (attach.Index == index)
            {
                attach.SaveAsFile(Path.Combine(@"c:\temp\", attach.FileName));
            }
        }

    }
}



回答2:


https://msdn.microsoft.com/en-us/library/office/ee692172(v=office.14).aspx#OfficeOLExtendingUI_AttachmentContextMenu

use context ie. from control.Context which is AttachmentSelection is this case.

AttachmentSelection ats = (AttachmentSelection)control.Context;

ats[1] <- your selected attachment


来源:https://stackoverflow.com/questions/15205237/vsto-outlook-get-selected-attachment

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!