使用托管 COM 加载项自定义 Office Fluent 功能区

Microsoft Office 套件中 Microsoft Office Fluent 用户界面的功能区组件为用户提供了使用 Office 应用程序的灵活方式。 功能区扩展性 (RibbonX) 使用简单、基于文本的声明性 XML 标记创建和自定义功能区。

本主题中的代码示例演示如何在 Office 应用程序中自定义功能区,无论打开什么文档。 在以下步骤中,使用托管 COM 加载项创建应用程序级自定义项,并使用 Microsoft Visual C# 在 Microsoft Visual Studio 2012 中创建外接程序。 此项目向功能区添加自定义选项卡、自定义组和自定义按钮。 若要完成此过程,请执行下列任务。

  1. 创建 XML 自定义文件。

  2. 使用 C# 在 Microsoft Visual Studio 2012 中创建托管 COM 加载项项目。

  3. 将 XML 自定义文件作为嵌入的资源添加到项目中。

  4. 实现 IRibbonExtensibility 接口。

  5. 创建在选择按钮时触发的回调方法。

  6. 构建、安装和测试项目。

创建 XML 自定义文件

在此步骤中,将创建将自定义组件添加到功能区的文件。

  1. 在文本编辑器中,添加以下 XML 标记。

     <customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"> 
       <ribbon> 
         <tabs> 
           <tab id="CustomTab" label="My Tab"> 
             <group id="SampleGroup" label="Sample Group"> 
               <button id="Button" label="Insert Company Name" size="large" onAction="InsertCompanyName" /> 
             </group > 
           </tab> 
         </tabs> 
       </ribbon> 
     </customUI> 
    
  2. 关闭并将该文件另存为“customUI.xml”

创建托管 COM 加载项项目

此步骤将在 Microsoft Visual Studio 2012 中创建 COM 加载项 C# 项目。

  1. 启动 Microsoft Visual Studio 2012。

  2. 在“ 文件 ”菜单上,选择“ 新建项目”。

  3. 在“项目类型”下的“新建项目”对话框中,展开“其他项目”,选择“扩展性项目”,然后双击“共享加载项”。

  4. 为项目添加名称,在此示例中,键入“RibbonXSampleCS”

  5. 在共享外接程序向导的第一个屏幕中,选择 “下一步”。

  6. 选择“ 使用 Visual C# 创建外接程序”,然后选择“ 下一步”。

  7. 清除除 Microsoft Word之外的所有选择,然后选择“下一步”。

  8. 键入加载项的名称和说明,然后选择“ 下一步”。

  9. “选择加载项选项”屏幕中 ,选择“ 我希望在加载主机应用程序时加载外接程序 ”,然后选择“ 下一步”。

  10. 选择 “完成” 以完成向导。

添加对项目的外部引用

在此步骤中,将添加 Word 主互操作程序集和类型库的引用。

  1. 在解决方案资源管理器中,右键单击“引用”,然后选择“添加引用”。

    注意

    如果未看到 “引用” 文件夹,请选择“ 项目 ”菜单,然后选择“ 显示所有文件”。

  2. 向下滚动到“.NET”选项卡,按住 Ctrl 键,然后选择“Microsoft.Office.Interop.Word”

  3. 在“ COM ”选项卡上,向下滚动,选择 “Microsoft Office 15.0 对象库 (”或适用于你的 Office) 版本的库,然后选择“ 确定”。

  4. 在命名空间行的正下方添加对项目的以下 命名空间 引用(如果尚不存在)。

     using System.Reflection; 
     using Microsoft.Office.Core; 
     using System.IO; 
     using System.Xml; 
     using Extensibility; 
     using System.Runtime.InteropServices; 
     using MSword = Microsoft.Office.Interop.Word; 
    

将 XML 自定义文件添加为嵌入资源

在此步骤中,将 XML 自定义文件添加为项目中的嵌入资源。

  1. 在解决方案资源管理器中,右键单击“RibbonXSampleCS”,指向“添加”,然后选择“现有项”。

  2. 导航到创建的 customUI.xml 文件,选择该文件,然后选择 “添加”。

  3. 在解决方案资源管理器中,右键单击“customUI.xml”,然后选择“属性”

  4. 在属性窗口,选择“生成操作”,然后向下滚动到“嵌入资源”。

实现 IRibbonExtensibility 接口

在此步骤中,将代码添加到 Extensibility.IDTExtensibility2::OnConnection,以在运行时创建对 Word 应用程序的引用。 还可以实现 IRibbonExtensibility 接口 GetCustomUI 的唯一成员。

  1. 在解决方案资源管理器中,右键单击“Connect.cs”,然后选择“查看代码”。

  2. Connect 方法之后,添加以下声明,其将创建对 Word Application 对象的引用:

    private MSword.Application applicationObject;

  3. 将以下行添加到 OnConnection 方法。 此语句将创建 Word Application 对象的实例:

    applicationObject =(MSword.Application)application;

  4. 在公共类 Connect 语句的末尾,添加一个逗号,然后键入 IRibbonExtensibility

    注意

    使用 Microsoft IntelliSense 为你插入接口方法。 例如,在公共类 Connect 语句的末尾,键入 “IRibbonExtensibility”,右键单击并指向“ 实现接口”,然后选择“ 显式实现接口”。 这将为 GetCustomUI 方法添加存根。 此实现看上去与以下代码类似。

       string IRibbonExtensibility.GetCustomUI(string RibbonID) 
     { 
     }
    
  5. 将以下语句插入 GetCustomUI 方法,覆盖现有代码: return GetResource("customUI.xml");

  6. GetCustomUI 方法下面插入以下方法:

     private string GetResource(string resourceName) 
           { 
               Assembly asm = Assembly.GetExecutingAssembly(); 
               foreach (string name in asm.GetManifestResourceNames()) 
               { 
                   if (name.EndsWith(resourceName)) 
                   { 
                       System.IO.TextReader tr = new System.IO.StreamReader(asm.GetManifestResourceStream(name)); 
                       //Debug.Assert(tr != null); 
                       string resource = tr.ReadToEnd(); 
    
                       tr.Close(); 
                       return resource; 
                   } 
               } 
               return null; 
           } 
    
    

    GetCustomUI 方法调用 GetResource 方法。 GetResource 方法在运行时设置对此程序集的引用,然后循环访问嵌入的资源,直到找到名为 customUI.xml 的资源。 接着它将创建读取包含 XML 标记的嵌入的文件的 StreamReader 对象的实例。 此过程将 XML 传递回 GetCustomUI 方法,此方法会将 XML 返回到功能区。 此外,您可构造包含 XML 标记的字符串并将其直接读取到 GetCustomUI 方法。

  7. GetResource 方法后添加此方法。 此方法将公司名称插入页面开头的文档中。

     public void InsertCompanyName(IRibbonControl control) 
           { 
           // Inserts the specified text at the beginning of a range or selection. 
               string MyText; 
               MyText = "Microsoft Corporation"; 
    
               MSword.Document doc = applicationObject.ActiveDocument; 
    
               //Inserts text at the beginning of the active document. 
               object startPosition = 0; 
               object endPosition = 0; 
               MSword.Range r = (MSword.Range)doc.Range( 
                     ref startPosition, ref endPosition); 
               r.InsertAfter(MyText); 
           } 
    
    

生成并安装项目

在此步骤中,将生成加载项及其安装项目。 继续操作前,请确保关闭 Word。

  1. 在“ 项目 ”菜单中,选择“ 生成解决方案”。 生成完成后,窗口左下角会显示一条通知。

  2. 在解决方案资源管理器中,右键单击“RibbonXSampleCSSetup”,然后选择“生成”。

  3. 再次右键单击“ RibbonXSampleCSSetup ”,然后选择“ 安装 ”以开始“RibbonXSampleCSSetup 安装向导”。

  4. 在每个屏幕中选择 “下一步 ”,然后在最后一个屏幕上选择“ 关闭 ”。

  5. 启动 Word。 您会在其他选项卡的右侧看到“My Tab”选项卡。

测试项目

选择“ 我的选项卡” 选项卡,然后选择“ 插入公司名称 ”,在光标处将公司名称插入文档中。 如果未看到自定义功能区,则可能需要通过完成以下步骤将条目添加到 Windows 注册表。

警告

接下来的一些步骤包含有关如何修改注册表的信息。 在修改注册表之前,务必备份注册表并确保您知道如何在出现问题时还原注册表。 有关如何备份、还原和编辑注册表的详细信息,请参阅此 Microsoft 知识库文章: 高级用户的 Windows 注册表信息 (256986)

  1. 在解决方案资源管理器中,右键单击安装项目 RibbonXSampleCSSetup,指向“视图”,然后选择“注册表”。

  2. 从“注册表”选项卡中,导航到加载项的以下注册表项:HKCU\Software\Microsoft\Office\Word\AddIns\RibbonXSampleCS.Connect

    注意

    如果“RibbonXSampleCS.Connect”项不存在,则可创建它。 为此,请右键单击 “Addins ”文件夹,指向 “新建”,然后选择“ 密钥”。 将项命名为“RibbonXSampleCS.Connect”。 添加 LoadBehavior DWord,并将其值设置为 3

另请参阅

支持和反馈

有关于 Office VBA 或本文档的疑问或反馈? 请参阅 Office VBA 支持和反馈,获取有关如何接收支持和提供反馈的指南。