2011-05-12 21 views
3

我正在做第一次尝试在Outlook中使用XML创建功能区,并且无法定位如何告诉我的加载项我只希望功能区出现在Explorer窗口中。Outlook中的XML功能区 - 使其显示在特定的窗口上

建议?

谢谢。

我Ribbon1.XML文件:

<?xml version="1.0" encoding="UTF-8"?> 
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="Ribbon_Load"> 
    <ribbon> 
    <tabs> 
     <tab idMso="TabAddIns"> 
     <group id="MyGroup" 
       label="My Group"> 
      <button idMso="Delete"/> 
     </group> 
     </tab> 
     <tab idMso="TabMail"> 
     <group idMso="GroupMoveActions" 
       visible="false"> 
     </group> 
     </tab> 
    </tabs> 
    </ribbon> 
</customUI> 

弹出神奇的错误框说:

CustomUI运行时错误testingOLaddin2

Error found in CustomUI XML of "testingOLaddin2" 

Line: 3 
Column: 10 
Error Code 0x80004005 
Failed to find Office control by ID 
ID: TabMail 

每请求,我色带代码:

using System; 
using System.Collections.Generic; 
using System.IO; 
using System.Linq; 
using System.Reflection; 
using System.Runtime.InteropServices; 
using System.Text; 
using Office = Microsoft.Office.Core; 

using System.Diagnostics; 

namespace testingOLaddin2 
{ 
    [ComVisible(true)] 
    public class Ribbon1 : Office.IRibbonExtensibility 
    { 
     private Office.IRibbonUI ribbon; 

     public Ribbon1() 
     { 
     } 

     #region IRibbonExtensibility Members 

     public string GetCustomUI(string ribbonID) 
     { 
      return GetResourceText("testingOLaddin2.Ribbon1.xml"); 
     } 

     #endregion 

     #region Ribbon Callbacks 
     //Create callback methods here. For more information about adding callback methods, select the Ribbon XML item in Solution Explorer and then press F1 

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


     #endregion 

     #region Helpers 

     private static string GetResourceText(string resourceName) 
     { 
      Assembly asm = Assembly.GetExecutingAssembly(); 
      string[] resourceNames = asm.GetManifestResourceNames(); 
      for (int i = 0; i < resourceNames.Length; ++i) 
      { 
       if (string.Compare(resourceName, resourceNames[i], StringComparison.OrdinalIgnoreCase) == 0) 
       { 
        using (StreamReader resourceReader = new StreamReader(asm.GetManifestResourceStream(resourceNames[i]))) 
        { 
         if (resourceReader != null) 
         { 
          return resourceReader.ReadToEnd(); 
         } 
        } 
       } 
      } 
      return null; 
     } 

     #endregion 
    } 
} 
+1

任何人如果你有一个用Designer构建的插件,而不是XML,那么知道如何解决这个相同的错误? – Bryan 2016-10-24 18:03:20

回答

9

这取决于您用来创建插件和功能区的方法。如果您使用的是

IRibbonExtensibility.GetCustomUI(string RibbonId) 

方法,你可以通过,如果RibbonId参数数值为

"Microsoft.Outlook.Explorer" 

编辑

继更改您的代码只返回功能区XML做到这一点可能工作:

public string GetCustomUI(string ribbonID) 
{ 
    if (ribbonID == "Microsoft.Outlook.Explorer") 
    return GetResourceText("testingOLaddin2.Ribbon1.xml"); 

    return null; // if problems here, try return string.Empty 
} 
+0

我在Ribbon1.cs文件中看到该代码,但不知道如何调用它,也不知道在XML文件中输入正确的代码的位置。 – 2011-05-12 20:41:29

+0

当Outlook需要你的ribbbon时,GetCustomUI将被Outlook调用。它会通过RibbonId参数告诉你它将在哪里使用它。您不必调用该方法。如果Outlook要求,您必须确保它返回正确的结果。 – 2011-05-12 20:50:48

+0

@Jan - 我如何获取这些信息?那就是我迷路的地方 – 2011-05-16 14:14:58

2

您的GetCustomUI(string RibbonId)当您在ThisAddIn类中实现CreateRibbonExtensibilityObject()时,Outlook会调用它来返回Ribbon类的新实例。功能区类是您引用XML的位置(在GetCustomUI中)。

对于XML本身,您将需要分别引用每个Outlook资源管理器类型。不幸的是,据我所知,没有一种在Ribbon XML语法中指定“所有探索者”的总体方法。

下面是一些例子引用的邮件和日历探险:

<?xml version="1.0" encoding="UTF-8"?> 
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"> 
    <ribbon> 
    <tabs> 
     <tab idMso="TabCalendar"> 
     <!-- Calendar tab controls go here --> 
     </tab> 
     <tab idMso="TabMail"> 
     <!-- mail tab controls go here --> 
     </tab> 
    </tabs> 
    </ribbon> 
</customUI> 

微软确实给一些提示有关idMso属性的内置选项卡,但遗憾的是它埋在这个Excel电子表格:link

+0

我一直在使用电子表格,并列出了我的信息,但是当我打开TabMail不存在的新邮件时,我的测试代码给我一个错误。尽管如此,我的按钮/组出现在主浏览器(我想要的地方),没有任何问题。 – 2011-05-13 13:28:41

+0

@Larry当打开一封新邮件(在检查员中)时,Outlook会尝试引用TabMail(一个资源管理器选项卡),这真令人惊讶。如果可能,请你发布你的GetCustomUI()和CreateRibbonExtensibilityObject()? – AndreiM 2011-05-13 14:21:01

+0

将在几分钟内完成。即将发布与另一个加载项相关的另一个问题。 – 2011-05-13 15:33:28

相关问题