2013-03-04 5 views
1

Я пытаюсь выполнить действие над выбранным вложением в Outlook 2010. Я создал проект VSTO Outlook в VS2012.VSTO Outlook: Получить выбранное приложение

Это XML для добавления кнопки на крепежной ленте:

<?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> 

Это код в ThisAddIn.cs

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

Это класс ProcessAttachment:

[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? 
     } 
    } 
} 

Как я могу получить выбранное приложение здесь?

ответ

2

Я решил так: (этот код является только примером и нуждается в улучшении)

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)); 
      } 
     } 

    } 
} 
+0

var attachsel = window.AttachmentSelection(); эта строка дает ошибку – SANDEEP

Смежные вопросы