Microsoft功能区按钮,用于从加载项执行功能

时间:2015-07-24 16:07:25

标签: c# excel vsto

好的,所以我已经做了很多谷歌搜索,试图找到有关这个主题的信息,而且我几乎空手而归。也许我没有为我想要完成的事情寻找正确的术语。

我的问题是我在MS Excel加载项中编写了一个函数,我按照Microsoft的指示作为起点,但是他们的教程每次用户保存文档时都会执行代码。我的目标是在我设计的功能区上设置一个按钮,而不是保存按钮。

这是我开始使用的微软文章:https://msdn.microsoft.com/en-us/library/cc668205.aspx

我也在这里找到了这个问题,但是我没有足够的细节来弄清楚如何为自己实现解决方案:How to connect a ribbon button to a function defined in an Excel add-in?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Linq;
using Excel = Microsoft.Office.Interop.Excel;
using Office = Microsoft.Office.Core;
using Microsoft.Office.Tools.Excel;
namespace ExcelAddIn1
{
    public partial class ThisAddIn
    {
        void FormatTime(Microsoft.Office.Interop.Excel.Workbook WB, bool SaveAsUi, ref bool Cancel)
        {
            /////MY FUNCTION BODY HERE//////
        }
        private void ThisAddIn_Startup(object sender, System.EventArgs e)
        {
        }

        private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
        {
        }

        #region VSTO generated code

        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InternalStartup()
        {
            this.Startup += new System.EventHandler(ThisAddIn_Startup);
            this.Shutdown += new System.EventHandler(ThisAddIn_Shutdown);
        }

        #endregion
    }
}

提前感谢您的协助。

2 个答案:

答案 0 :(得分:0)

通常,您可以使用Globals.ThisAddIn.Application来访问应用程序级别和文档级UI。 我希望this link可以提供帮助。以下是向工作表添加按钮的示例,如下所示:

Globals.Factory.GetVstoObject(
    Globals.ThisAddIn.Application.ActiveWorkbook.Worksheets[1])
        .Controls.AddControl(button, selection, buttonName);

看起来像

答案 1 :(得分:0)

VSTO提供了两种创建自定义UI的方法:

  1. 功能区设计师 - 请参阅Walkthrough: Creating a Custom Tab by Using the Ribbon Designer

  2. 原始XML标记 - Walkthrough: Creating a Custom Tab by Using Ribbon XML

  3. 在这两种情况下,您都可以使用Globals.ThisAddin属性访问加载项属性和方法,该属性返回加载项类的实例(如上面列出的代码所示)。