jjzjj

c# - Office 加载项功能区 : same tab with 2 addins

coder 2024-06-24 原文

我试图让两个单词加载项的组出现在同一个选项卡(工具)中,但它们都创建了独特的选项卡(有两个“工具”选项卡)。我 saw this video但我使用的是可视化设计器,而不是 XML。

我可以通过某种方式编辑设计器代码来实现它吗?

最佳答案

http://blogs.msdn.com/b/vsto/archive/2008/03/10/share-a-ribbon-customization-between-office-applications.aspx

Office 2007

创建功能区

  1. 在 Visual Studio 中创建 2007 Excel、Outlook、PowerPoint 或 Word 项目。为了执行这些步骤,创建一个 C# 项目并将该项目命名为 RibbonStarterProject。
  2. 向项目添加功能区(可视化设计器)项。出于这些步骤的目的,接受默认名称“Ribbon1”。
  3. 保存并关闭项目。

创建类库项目

  1. 在 Visual Studio 中创建一个新的类库项目。为了执行这些步骤,将项目命名为 SharedRibbonLibrary。
  2. 添加对 Microsoft.Office.Tools.Common.v9.0 程序集的项目引用。
  3. 在 Visual Studio 的“项目”菜单上,单击“添加现有项”。
  4. 在“添加现有项”对话框中,浏览到“RibbonStarterProject”项目目录,选择 Ribbon.cs 文件,然后单击“添加”。 Ribbon1.cs 被复制到项目目录并显示在解决方案资源管理器中的项目节点下。
  5. 双击 Ribbon1.cs。 功能区设计器出现。
  6. 从“工具箱”的“Office 功能区控件”选项卡中,将一个按钮拖到 group1 上。
  7. 单击按钮 1 将其选中。
  8. 在“属性”窗口中,将“修改器”设置为“公共(public)”。 注意:默认情况下,您添加到功能区的控件是内部控件。这使得它们只能由同一程序集中的代码访问。但是,当您访问这些控件时,您将通过程序集引用访问它们。因此,要从代码中访问它们,您必须将它们公开。很快就会有更多相关信息。
  9. 右键单击功能区设计器,然后单击“属性”。
  10. 在“属性”窗口中,单击 RibbonType 属性,然后选择要在其中显示功能区的应用程序或 Outlook 检查器窗口的功能区 ID。有关此属性的详细信息,请参阅 RibbonType 属性的 MSDN 引用主题。
  11. 在解决方案资源管理器中,右键单击 Ribbon1.cs,然后单击“查看代码”。
  12. 将类的命名空间更改为“SharedRibbonLibrary”。
  13. 对 Ribbon1.designer.cs 文件重复此步骤。
  14. 编译并保存 SharedRibbonLibrary 项目。您现在可以在支持功能区的任何 VSTO 项目中使用生成的程序集。

使用功能区定制

  1. 创建 2007 Excel、Outlook、PowerPoint 或 Word 项目。
  2. 添加对 SharedRibbonLibrary 程序集的引用。
  3. 将以下代码添加到项目的 ThisAddin、ThisWorkbook 或 ThisDocument 类中。此代码重写 CreateRibbonExtensibilityObject 方法并将功能区返回到 Office 应用程序。

    protected override Microsoft.Office.Core.IRibbonExtensibility
    CreateRibbonExtensibilityObject()
    {
         return new Microsoft.Office.Tools.Ribbon.RibbonManager(
         new Microsoft.Office.Tools.Ribbon.OfficeRibbon[] { new       
            SharedRibbonLibrary.Ribbon1() });
    
    }
    
  4. 向项目添加一个新类。接受默认名称“Class1.cs”。

  5. 将 Class1 文件中的代码替换为以下内容:

     partial class ThisRibbonCollection :    Microsoft.Office.Tools.Ribbon.RibbonReadOnlyCollection
    {
     internal SharedRibbonLibrary.Ribbon1 Ribbon1
     {
         get { return this.GetRibbon<SharedRibbonLibrary.Ribbon1>(); }
     }
    }
    

好的 - 你已经完成了!您现在可以访问功能区和您在代码中添加到功能区的按钮。让我们尝试处理消费项目中的事件。

处理按钮点击事件

  1. 将以下代码添加到项目的启动事件处理程序。

    Globals.Ribbons.Ribbon1.button1.Click += new EventHandler<Microsoft.Office.Tools.Ribbon.RibbonControlEventArgs>(button1_Click);
    
  2. 将以下事件处理程序添加到您的项目中:

    void button1_Click(object sender,
    Microsoft.Office.Tools.Ribbon.RibbonControlEventArgs e)
    {
    System.Windows.Forms.MessageBox.Show("I can handle events!");
    }
    
  3. 运行项目。

  4. 当 Office 应用程序打开时,单击加载项选项卡,然后单击您的按钮。 一条消息说“我可以处理事件!”出现。

Office 2010 实现:http://blogs.msdn.com/b/vsto/archive/2010/06/23/sharing-a-ribbon-customization-between-office-projects-in-visual-studio-2010-mclean-schofield.aspx

2010 实现实际上添加了两个功能区 - 每个插件一个。我相信这篇文章仅适用于不同 Office 产品(例如 Word 和 Excel)中同一功能区上的加载项,而不适用于两个 Excel 加载项。

我发现的唯一其他途径是第 3 方组件:http://www.add-in-express.com/creating-addins-blog/2012/11/05/excel-addin-shared-ribbon-tabs/

关于c# - Office 加载项功能区 : same tab with 2 addins,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7135480/

有关c# - Office 加载项功能区 : same tab with 2 addins的更多相关文章

  1. ruby - 如何在续集中重新加载表模式? - 2

    鉴于我有以下迁移:Sequel.migrationdoupdoalter_table:usersdoadd_column:is_admin,:default=>falseend#SequelrunsaDESCRIBEtablestatement,whenthemodelisloaded.#Atthispoint,itdoesnotknowthatusershaveais_adminflag.#Soitfails.@user=User.find(:email=>"admin@fancy-startup.example")@user.is_admin=true@user.save!ende

  2. ruby - RuntimeError(自动加载常量 Apps 多线程时检测到循环依赖 - 2

    我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("

  3. c# - 如何在 ruby​​ 中调用 C# dll? - 2

    如何在ruby​​中调用C#dll? 最佳答案 我能想到几种可能性:为您的DLL编写(或找人编写)一个COM包装器,如果它还没有,则使用Ruby的WIN32OLE库来调用它;看看RubyCLR,其中一位作者是JohnLam,他继续在Microsoft从事IronRuby方面的工作。(估计不会再维护了,可能不支持.Net2.0以上的版本);正如其他地方已经提到的,看看使用IronRuby,如果这是您的技术选择。有一个主题是here.请注意,最后一篇文章实际上来自JohnLam(看起来像是2009年3月),他似乎很自在地断言RubyCL

  4. ruby-on-rails - 使用 config.threadsafe 时从 lib/加载模块/类的正确方法是什么!选项? - 2

    我一直致力于让我们的Rails2.3.8应用程序在JRuby下正确运行。一切正常,直到我启用config.threadsafe!以实现JRuby提供的并发性。这导致lib/中的模块和类不再自动加载。使用config.threadsafe!启用:$rubyscript/runner-eproduction'pSim::Sim200Provisioner'/Users/amchale/.rvm/gems/jruby-1.5.1@web-services/gems/activesupport-2.3.8/lib/active_support/dependencies.rb:105:in`co

  5. C# 到 Ruby sha1 base64 编码 - 2

    我正在尝试在Ruby中复制Convert.ToBase64String()行为。这是我的C#代码:varsha1=newSHA1CryptoServiceProvider();varpasswordBytes=Encoding.UTF8.GetBytes("password");varpasswordHash=sha1.ComputeHash(passwordBytes);returnConvert.ToBase64String(passwordHash);//returns"W6ph5Mm5Pz8GgiULbPgzG37mj9g="当我在Ruby中尝试同样的事情时,我得到了相同sha

  6. ruby-on-rails - Cucumber 是否只是 rspec 的包装器以帮助将测试组织成功能? - 2

    只是想确保我理解了事情。据我目前收集到的信息,Cucumber只是一个“包装器”,或者是一种通过将事物分类为功能和步骤来组织测试的好方法,其中实际的单元测试处于步骤阶段。它允许您根据事物的工作方式组织您的测试。对吗? 最佳答案 有点。它是一种组织测试的方式,但不仅如此。它的行为就像最初的Rails集成测试一样,但更易于使用。这里最大的好处是您的session在整个Scenario中保持透明。关于Cucumber的另一件事是您(应该)从使用您的代码的浏览器或客户端的角度进行测试。如果您愿意,您可以使用步骤来构建对象和设置状态,但通常您

  7. 基于C#实现简易绘图工具【100010177】 - 2

    C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.

  8. ruby-on-rails - 从应用程序中自定义文件夹内的命名空间自动加载 - 2

    我们目前正在为ROR3.2开发自定义cms引擎。在这个过程中,我们希望成为我们的rails应用程序中的一等公民的几个类类型起源,这意味着它们应该驻留在应用程序的app文件夹下,它是插件。目前我们有以下类型:数据源数据类型查看我在app文件夹下创建了多个目录来保存这些:应用/数据源应用/数据类型应用/View更多类型将随之而来,我有点担心应用程序文件夹被这么多目录污染。因此,我想将它们移动到一个子目录/模块中,该子目录/模块包含cms定义的所有类型。所有类都应位于MyCms命名空间内,目录布局应如下所示:应用程序/my_cms/data_source应用程序/my_cms/data_ty

  9. ruby-on-rails - rails 功能测试 - 2

    在Rails自动生成的功能测试(test/functional/products_controller_test.rb)中,我看到以下代码:classProductsControllerTest我的问题是:方法调用products()在哪里/如何定义?products(:one)到底是什么意思?看代码,大概意思是“创建一个产品”,但是它是如何工作的呢?注意我是Ruby/Rails的新手,如果这些是微不足道的问题,我深表歉意。 最佳答案 如果您查看test/fixtures文件夹,您会看到一个products.yml文件。这是在您创建

  10. ruby-on-rails - 使用 gmaps4rails 动态加载谷歌地图标记 - 2

    如何只加载map边界内的标记gmaps4rails?当然,在平移和/或缩放后加载新的。与此直接相关的是,如何获取map的当前边界和缩放级别? 最佳答案 我是这样做的,我只在用户完成平移或缩放后替换标记,如果您需要不同的行为,请使用不同的事件监听器:在你看来(index.html.erb):{"zoom"=>15,"auto_adjust"=>false,"detect_location"=>true,"center_on_user"=>true}},false,true)%>在View的底部添加:functiongmaps4rail

随机推荐