1
votes

I developed Excel addin to Visual Studio 2012.Use projects Excel 2010 Add-in. In the project has created a Ribbon (XML):

[ComVisible(true)]
public class PricelistRibbon : Office.IRibbonExtensibility
{
    private Office.IRibbonUI _ribbon;

    public PricelistRibbon()
    {
    }

    public event EventHandler ClickButtonRibben;

    protected virtual void OnClickButtonRibben()
    {
        var handler = ClickButtonRibben;
        if (handler != null) handler(this, EventArgs.Empty);
    }

    #region IRibbonExtensibility Members

    public string GetCustomUI(string ribbonID)
    {
        return GetResourceText("ProcessingPricelist.PricelistRibbon.xml");
    }

    #endregion

    #region Ribbon Callbacks
    //Create callback methods here. For more information about adding callback methods, select the Ribbon XML item in Solution Explorer and then press F1

    public void Ribbon_Load(Office.IRibbonUI ribbonUI)
    {
        _ribbon = ribbonUI;
    }

    public void OnAction(Office.IRibbonControl control)
    {
        OnClickButtonRibben();
    }

    #endregion

    #region Helpers

    private static string GetResourceText(string resourceName)
    {
        Assembly asm = Assembly.GetExecutingAssembly();
        string[] resourceNames = asm.GetManifestResourceNames();
        for (int i = 0; i < resourceNames.Length; ++i)
        {
            if (string.Compare(resourceName, resourceNames[i], StringComparison.OrdinalIgnoreCase) == 0)
            {
                using (StreamReader resourceReader = new StreamReader(asm.GetManifestResourceStream(resourceNames[i])))
                {
                    if (resourceReader != null)
                    {
                        return resourceReader.ReadToEnd();
                    }
                }
            }
        }
        return null;
    }

    #endregion
}

In ThisAddIn working with ribbon like this:

public partial class ThisAddIn
{
    private void ThisAddIn_Startup(object sender, EventArgs e)
    {
    }

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

    protected override Microsoft.Office.Core.IRibbonExtensibility CreateRibbonExtensibilityObject()
    {
        var pricelistRibbon = new PricelistRibbon();
        pricelistRibbon.ClickButtonRibben += PricelistRibbonOnClickButtonRibben;
        return pricelistRibbon;
    }

    private void PricelistRibbonOnClickButtonRibben(object sender, EventArgs eventArgs)
    {
        var control = sender as Office.IRibbonControl;
        if (control == null) return;
        try
        {
            Application.ScreenUpdating = false;

            switch (control.Id)
            {
                case "customButton1":
                    CreateSpecification();
                    break;
                //..............
            }
        }
        catch (Exception throwedException)
        {
            MessageBox.Show(throwedException.Message, @"Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
        finally
        {
            Application.ScreenUpdating = true;
        }
    }

    private void CreateSpecification()
    {
    }

    #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()
    {
        Startup += ThisAddIn_Startup;
        Shutdown += ThisAddIn_Shutdown;
    }

    #endregion
}

Next I deploys this addin via ClickOnce. Installed MS Office 2007. Addin deployed successfully. In the settings you can see that Excel addin installed but not visible on the tape my TabControl. If I create a Ribbon (Visual Designer) instead of the Ribbon (xml) when the tape appears TabControl. How can I fix it?

1
Please post your Ribbon.xml as wellKiru

1 Answers

2
votes

this could be because namespace used in ribbon.xml is different in office 2010 and 2007 ribbon. Office 2007 ribbon.xml requires namespace like

<customUI onLoad="Ribbon_Load" xmlns="http://schemas.microsoft.com/office/2006/01/customui">

where as in 2010 you will have to use

<customUI onLoad="Ribbon_Load" xmlns="http://schemas.microsoft.com/office/2009/07/customui">

Would suggest create two ribbon.xml and do something like in code below

protected override Office.IRibbonExtensibility CreateRibbonExtensibilityObject()
{
       majorVersion = Globals.ThisAddIn.Application.Version.Split(new char[] { '.' })[0];
        if (majorVersion == 12) //office 2007
        {
             return new Ribbon2007();
        }
        else if (majorVersion >= 14) //office 2010
        {
            return new Ribbon2010();
        }


}


[ComVisible(true)]
public class Ribbon2007: Office.IRibbonExtensibility
{
    public string GetCustomUI(string ribbonID)
        {
                    var ribbonXml = GetResourceText("Ribbon2007.xml");                 

    }
}


[ComVisible(true)]
public class Ribbon2007: Office.IRibbonExtensibility
{
    public string GetCustomUI(string ribbonID)
        {
            var ribbonXml = GetResourceText("Ribbon2010.xml");                 

    }
}