无法更改excel功能区上的标签

时间:2013-02-19 20:59:46

标签: excel-dna

尝试使用Excel-DNA使用功能区设置自定义标签时,我遇到了问题。

如果我没有包含注释“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>

这是我的Ribbon派生的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 个答案:

答案 0 :(得分:8)

使用getLabel事件时,不应使用label属性,因此请更改

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

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

希望这有帮助。