2013-02-19 33 views
6

我遇到了一个问题,试图使用Excel-DNA为功能区设置自定义标签。无法更改Excel功能区上的标签

如果我没有包含注释“getLabel ='GetLabel'”,那么插件加载正常。即功能区选项卡显示2个按钮,并且按钮回调正常工作。

如果我确实包含属性“getLabel ='GetLabel'”,那么该插件甚至不会加载,即onLoad未被调用,并且功能区选项卡不显示在Excel中。

任何人都可以看到我在做什么错在这里。在调试器中运行时没有看到任何错误。

这是我的DNA文件。我试图根据其中一个样本进行测试,因此更容易遵循。

<DnaLibrary Name="Emsx Addin" RuntimeVersion="v2.0"> 
<ExternalLibrary Path="EmsxExcelTech1.dll" /> 
<Reference AssemblyPath="System.Windows.Forms.dll" /> 

<!-- Some images that can be used in the Ribbon ui --> 
<Image Name="M" Path="M.png" Pack="true" /> 

<CustomUI> 
<customUI xmlns='http://schemas.microsoft.com/office/2009/07/customui' loadImage='LoadImage' onLoad='OnLoad'> 
    <ribbon> 
    <tabs> 
     <tab id='CustomTab' label='K2 Emsx' insertAfterMso='View'> 
     <group id='SampleGroup' label='Global Sheet Status'> 
      <button id='LoginCmd' label='Logon' image='M' onAction='OnLogonPressed' getLabel='GetLabel' /> 
      <button id='BetaCmd' label='Use Beta Route' image='M' size='normal' onAction='RunTagMacro' tag='OnUseBetaRoutes' /> 
     </group > 
     </tab> 
    </tabs> 
    </ribbon> 
</customUI> 
</CustomUI> 
</DnaLibrary> 

这是我的功能区派生的C#文件。

[ComVisible(true)] 
public class EmsxRibbon : ExcelRibbon 
{ 
    private IRibbonUI ribbon = null; 

    public void OnLogonPressed(IRibbonControl control) 
    { 
     EmsxIntegration.Instance.Login(); 
     MessageBox.Show("Hello from control " + control.Id); 
     if (ribbon != null) 
     { 
      ribbon.InvalidateControl(control.Id); 
     } 

    } 

    string GetLabel(IRibbonControl control) 
    { 
     if (control.Tag == "Logon") 
     { 
      return "Logon"; 
     } 
     else 
     { 
      return "Logoff"; 
     } 
    } 

    public static void OnUseBetaRoutes() 
    { 
     MessageBox.Show("Hello from 'ShowHelloMessage'."); 
    } 

    public void OnLoad(IRibbonUI ribbon) 
    { 
     this.ribbon = ribbon; 
    } 

} 
+1

也许你不能在XML中有一个“标签”和“getLabel”? – Govert 2013-02-20 10:31:22

回答

8

当您使用getLabel事件,你不应该使用标签属性,所以更改

<button id='LoginCmd' label='Logon' image='M' onAction='OnLogonPressed' getLabel='GetLabel' /> 

<button id='LoginCmd' image='M' onAction='OnLogonPressed' getLabel='GetLabel' /> 

希望这有助于。

+0

感谢您发布解决方案。我在我的本地代码中做了同样的修复,并忘记了这个问题 – chollida 2013-05-23 21:33:31