我正在尝试创建一个简单的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 你知道我怎么做吗?
答案 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}}