更改功能区单词中添加的按钮的标签

时间:2015-06-11 10:00:47

标签: vsto ribbon office-addins

我正在尝试创建一个简单的Word加载项。 我的功能区a创建了一个按钮,我想根据word文档的类型更改其标签。 该文档是一个邮件合并,有两种类型的模型:需求和响应。 我想要按钮标签:为Demmand创建DEMAND并为响应创建RESATE。

我尝试过类似的东西,但它不起作用:

 private void Ribbon1_Load(object sender, RibbonUIEventArgs e)
        {

            Microsoft.Office.Interop.Word.Document doc = Globals.ThisAddIn.Application.ActiveDocument;
            //Word.MailMerge mailMerge = doc.MailMerge;

            if (doc.MailMerge.DataSource.FieldNames.Count!=0)
            {

                foreach (Microsoft.Office.Interop.Word.MailMergeFieldName f in doc.MailMerge.DataSource.FieldNames)
                {
                    if (f.Name.Equals("Response"))
                    {
                        this.button1.Label = "Create a response";
                        break;
                    }
                    else if (f.Name.Equals("Demand"))
                    {
                        this.button1.Label = "Create a demand";
                        break;
                    }
                }
            }
        }

doc.MailMerge.DataSource.FieldNames.Count的值始终等于0 你知道我怎么做吗?

1 个答案:

答案 0 :(得分:1)

单词中的色带可视化设计器有点受限,您可以通过使用XML功能区获得更多功能,尽管它还需要更多功能。

您可以通过创建两个按钮然后在功能区代码中创建<button id="ButtonCreateDemand" label="Create Demand" size="normal"getVisible="GetVisible" onAction="Call_CreateDemand"/> <button id="ButtonCreateResponse" label="Create Response" size="normal"getVisible="GetVisible" onAction="Call_CreateResponse"/> 方法来处理此问题。 XML将如下:

public bool GetVisible(Office.IRibbonControl control)
{
    //Check for demand\response

    switch(control.Id.ToLower())
    {
       case "buttoncreatedemand":
       return GetDemand();
       case "buttoncreateresponse":
       return !GetDemand();           
    }

}

private bool GetDemand()
{
     Microsoft.Office.Interop.Word.Document doc = Globals.ThisAddIn.Application.ActiveDocument;
        //Word.MailMerge mailMerge = doc.MailMerge;

        if (doc.MailMerge.DataSource.FieldNames.Count!=0)
        {

            foreach (Microsoft.Office.Interop.Word.MailMergeFieldName f in doc.MailMerge.DataSource.FieldNames)
            {
                if (f.Name.Equals("Response"))
                {
                    return false;
                }
            }
        }
        return true;
}

代码将是这样的

GetLabel()

或者,您可以使用 private void ThisAddIn_Startup(object sender, System.EventArgs e) { Globals.ThisAddIn.Application.DocumentChange += new Word.ApplicationEvents4_DocumentChangeEventHandler(DocumentChange); } 方法返回按钮的标签。

将DocumentChange()事件添加到ThisAddIn类

{{1}}