Elementos Ribbon Menu

Introducción

A continuación se mencionan los distintos elementos y su ordenamiento para construir un XML que defina o modifique un menú Ribbon de Office.

El XML sirve para personalizar la interfaz de usuario, y para ello existen dos formas de hacerlo:
  • modificar la aplicación ocultando o desactivando fichas y controles existentes en el menú ribbon por defecto
  • crear controles agregando fichas a la cinta de opciones, elementos de menú y botones a la barra de herramientas de acceso rápido.
Como el tema es muy extenso para esta página, se abordará la estructura completa y la mayoría de los elementos, pero no todos los controles. Los controles tienen a su vez muchas propiedades y atributos, pero sólo se hará mención a los más utilizados.

La documentación oficial sobre la interfaz de usuario personalizada puede verse en el sitio de MSDN
https://msdn.microsoft.com/en-us/library/dd910855(v=office.12).aspx (sólo disponible en inglés)
Allí puede encontrarse la información completa sobre el elemento button, por ejemplo, con todos sus atributos.

Pero la información que da esta página ni está ordenada, ni explica la estructura completa del XML, ni dice cómo aplicarla exactamente en el caso de Excel o de Access. Muchos de los ejemplos no funcionan en algunas aplicaciones, porque la referencia es genérica a todo Microsoft Office Fluent (IU) de Microsoft.

Por esa razón reúno en esta página una explicación completa de cuál es la estructura a seguir, qué elementos se pueden incluir y cómo funcionan con ejemplos prácticos y claros.


Lista de controles predeterminados de Office

Otra referencia importante a tener en cuenta a la hora de modificar el menú de Access o Excel es la lista de elementos existentes. Si se quiere ocultar (visible="false") o deshabilitar (enabled="false") un elemento predeterminado del menú, se deberá saber de antemano su identificador de forma de poder aplicarle la propiedad.

2010 Office Fluent User Interface Control Identifiers
https://www.microsoft.com/en-us/download/details.aspx?id=6627

2013 Office Fluent User Interface Control Identifiers
https://www.microsoft.com/en-us/download/details.aspx?id=36798


Lista de imágenes predefinidas de Office

Se pueden utilizar las imágenes de Office en la definición de nuevos botones, por ejemplo.

El atributo imageMSO de un botón, por ejemplo, hace referencia a una imagen de Office.
El valor de esta propiedad debe ser un nombre válido de imagen de Office.

El enlace siguiente permite descargar un archivo Excel habilitado para macros. Al abrir el archivo no aparece ninguna lista de imágenes, pero puede verse en la ficha Programador unos botones añadidos con listas de iconos de Office.

2007 Office System Add-In: Icons Gallery
https://www.microsoft.com/en-us/download/details.aspx?id=11675

Office 2010 Add-In: Icons Gallery
https://www.microsoft.com/en-us/download/details.aspx?id=21103

Pero una forma fácil y rápida de saber el nombre de una imagen de Office es la siguiente:

Con Access o Excel abierto, ir al menú Archivo, Opciones, Personalizar cinta de opciones y seleccionar Todos los comandos. Entonces se verá toda la lista de elementos disponibles. Al detener el mouse sobre una de estas opciones puede verse una leyenda en la que al final pondrá entre paréntesis el nombre de la imagen de Office.



NOTA: tanto el control como la imagen que lo representa reciben el mismo nombre. Así por ejemplo, si se ha de ocultar el control para guardar archivo, o si se ha de utilizar la imagen de guardar archivo, el nombre del control y de la imagen será FileSave.


La estructura base del XML

El siguiente es el esquema que se debe tener en cuenta a la hora de construir un menú para Access o Excel.
Esta definición también se aplica a otros elementos de Office con ribbon menu, como Word y Outlook.



<customUI>
    <ribbon>
        <qat>
            <documentControls>
                <control></control>
            </documentControls>
            <sharedControls>
            </sharedControls>

        </qat>
        <tabs>
            <tab></tab>
        </tabs>
    </ribbon>
    <backstage>
    </backstage>
</customUI>



customUI

Todas las definiciones de menú Ribbon comienzan por la etiqueta customUI, que es la etiqueta principal o raíz, que contendrá a todas las demás etiquetas.

Lo que se define a continuación es el esquema o espacio de nombres utilizado de Office.

Así, para Office 2007 y posterior se ha de invocar al espacio de nombres:

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

Y para Office 2010 y posterior es:

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

También tiene una propiedad o atributo onLoad que se puede incluir para indica que se llamará a un método o función durante la carga del menú. Esto es útil a la hora de tener que definir distintos menús según alguna condición, como por ejemplo, según los permisos del usuario que a abierto la aplicación.

En el ejemplo siguiente se indica que se llamará a una macro denominada CargarMenu.

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

NOTA: Los ejemplos de esta página han sido probados en Access 2010, aunque puede verse que en muchos casos se hace referencia al espacio de nombres de Access 2007. Esto es porque en general los elementos son los mismos, lo que puede variar son los nombres definidos de las imágenes o controles propios de Office.


ribbon

Esta etiqueta contendrá todas las definiciones del menú. Se escribe dentro de la etiqueta customUI.

Tiene un atributo startFromScratch que indica si se empieza desde el principio, es decir, si la definición de menú que viene a continuación es toda la definición del menú (true) y por tanto reemplaza al menú existente, o si simplemente se añaden elementos al menú existente por defecto (false).

En el ejemplo siguiente se indica que se va a reemplazar todo el menú existente por defecto.

<ribbon startFromScratch="true">

El valor true además de eliminar todo el ribbon menu, también hará desaparecer todas las opciones de la barra de herramientas de acceso rápido.

Es importante recordar que no es posible ocultar o eliminar el menú Archivo, aunque sí se puede ocultar la mayor parte de sus opciones.


qat (Quick Access Toolbar)

Este elemento define la barra de herramientas de acceso rápido. Se escribe dentro de la etiqueta ribbon.
No tiene atributos.

Para que la definición contenida en esta etiqueta sea aplicada, es necesario que el atributo startFromScratch tenga el valor true.


documentControls

Este elemento especifica la lista de controles en la barra de herramientas de acceso rápido, que son específicos para el archivo que contiene. Se escribe dentro de la etiqueta qat.

Para que funcione el atributo startFromScratch debe ser true.

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
    <ribbon startFromScratch="true">
        <qat>
            <documentControls>
                <control idMso="FileSave" visible="true" />
                <control idMso="FileSaveAs" visible="true" />
                <control idMso="FileNewDatabase" visible="true" />
                <control idMso="FileCloseDatabase" visible="true" />
            </documentControls>
        </qat>
    </ribbon>
</customUI>

El resultado es que en la barra de acceso rápido aparecerán los siguientes cuatro íconos:



sharedControls

Este elemento especifica la sección de la barra de herramientas de acceso rápido que se comparte entre todos los documentos. Se escribe dentro de la etiqueta qat.

Para que funcione el atributo startFromScratch debe ser true.

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
<ribbon startFromScratch="true">
<qat>
<sharedControls>
<button id="button1" imageMso="HappyFace" />
<button idMso="Cut" />
</sharedControls>
</qat>
</ribbon>
</customUI>

El resultado del ejemplo es el siguiente:



tabs

Este elemento especifica una lista o grupo de fichas o pestañas, es decir que contendrá uno o más elementos tab. Se escribe dentro de la etiqueta ribbon.


tab

Este elemento especifica una ficha en la la cinta de opciones.
Se escribe dentro de una etiqueta de nivel superior tabs que agrupa a todas las fichas o pestañas. Y tabs se escribe dentro de la etiqueta ribbon.

En el ejemplo siguiente se reinicia la cinta de opciones (startFromScratch="true"), se definen dos nuevas fichas con sus controles.
Las fichas contienen separadores, grupos y botones.

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
    <ribbon startFromScratch="true">
        <tabs>
            <tab id="ficha01" label="Gestión" visible="true">
                <group id="grupo01" label="Contabilidad">
                    <button id="boton01" size="large" label="Entradas" imageMso="SlideMasterChartPlaceholderInsert" />
                    <button id="boton02" size="large" label="Salidas" imageMso="PivotChartClearMenu" />
                    <separator id="separador01" ></separator>
                    <button id="boton03" size="large" label="Resumen" imageMso="MasterViewClose" />
                    <button id="boton04" size="large" label="Balance" imageMso="AccessListIssues" />
                </group>  
            </tab>
            <tab id="ficha02" label="Informes" visible="true">
                <group id="grupo02" label="Ventas">
                    <button id="boton05" size="large" label="Consolidación" imageMso="CacheListData" />
                    <button id="boton06" size="large" label="Informe mensual" imageMso="DatabaseMoveToSharePoint" />
                </group>  
                <group id="grupo03" label="Gastos">
                    <button id="boton07" size="large" label="Resumen" imageMso="ViewsLayoutView" />
                    <button id="boton08" size="large" label="Listado" imageMso="ControlLayoutStacked" />
                </group>
            </tab>
        </tabs>
    </ribbon>
</customUI>

El resultado es:

 


El elemento tab también puede utilizarse para hacer referencia a una ficha existente de la cinta de opciones.
El siguiente ejemplo oculta la ficha Inicio, en Access 2010.

<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">
<ribbon startFromScratch="false">
<tabs>
<tab idMso="TabHomeAccess" visible="false" />
</tabs>
</ribbon>

</customUI>

Si se tuviera que ocultar la misma ficha pero en la versión de Access 2007, además de cambiar el espacio de nombres, se hará referencia a la ficha como TabHome.

Atributos de tab
(algunos atributos) 
id
como todo identificador ha de ser único en todo el XML 
label
etiqueta que aparecerá en la ficha  
idMso
identificador de un control existente
es el id interno de una ficha ya existente de menú Ribbon
útil para cuando lo que se quiere no es añadir una nueva ficha sino modificar una ficha ya existente en el Ribbon 
imageMso
identifica una imagen existente de Office 
keyTip
carácter (letra o número) para ser utilizado como KeyTip, que aparece encima del control cuando se presiona la tecla ALT
si no se especifica la aplicación generará automáticamente un carácter para el control
visible
booleano que indica si el control es visible (true) o no (false)


backstage

Como comentaba al principio de esta página, no es posible ocultar la ficha Archivo. Sin embargo se pueden ocultar o deshabilitar uno o todos los elementos que aparecen en ella. Esto resulta útil para evitar que el usuario de la aplicación pueda guardar cambios en la base de datos, por ejemplo.

Esta etiqueta se puede utilizar en Access 2013, 2013 y 2016.

El siguiente ejemplo aplica a Access 2010, se ocultan todas las opciones de la ficha Archivo:

<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">
    <ribbon startFromScratch="false">
        <!-- menu personalizado -->
    </ribbon>
    <backstage>
        <!-- Ribbon XML -->
        <button idMso="FileSave" visible="false"/>
        <button idMso="SaveObjectAs" visible="false"/>
        <button idMso="FileSaveAsCurrentFileFormat" visible="false"/>
        <button idMso="FileOpen" visible="false"/>
        <button idMso="FileCloseDatabase" visible="false"/>
        <tab idMso ="TabInfo" visible="false"/>   
        <tab idMso ="TabRecent" visible="false"/>
        <tab idMso ="TabNew" visible="false"/>
        <tab idMso ="TabPrint" visible="false"/>
        <tab idMso ="TabShare" visible="false"/>
        <tab idMso ="TabHelp" visible="false"/>
        <button idMso="ApplicationOptionsDialog" visible="false"/>
        <button idMso="FileExit" visible="false"/>
    </backstage>
</customUI>
   
Como resultado no se verá ningún elemento en el menú Archivo, estará totalmente vacío.