文章目录
在编写自定义 Office 界面的XML时,总是以customUI元素开始,紧接着是Ribbon元素。下面我们将详细介绍customUI元素、Ribbon元素,以及tabs、tab和group元素,在自定义界面时几乎总是要使用这些元素。
customUI
要创建格式良好的XML文档,必须包含一个且唯一一个"最外层的元素",嵌套所有其他的元素。这个最外层的元素被称作"根元素"。对于功能区定制来说,该元素就是customUI元素。
以下分别是 Office 2007/2010+ 的 customUI 样式:
<!-- 代码1: -->
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
<!-- All other instructions go here -->
</customUI>
<!-- 代码2: -->
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">
<!-- All other instructions go here -->
</customUI>
然后,单击"validate"按钮验证代码。注意,验证代码是一个好习惯。
customUI 的相关属性
1. customUI 标签必须制定 xmlns 属性
静态属性 | 允许值 | 对应 Office 版本 |
---|---|---|
xmlns | http://schemas.microsoft.com/office/2006/01/customui | office 2007 |
xmlns | http://schemas.microsoft.com/office/2009/07/customui | office 2010+ |
2. 带有回调签名的可选的静态属性和动态属性
静态属性 | 动态属性 | 允许值 | 默认值 | 动态属性的VBA回调签名 |
---|---|---|---|---|
xmlns:Q | — | 1至1024个字符 | — | |
— | onLoad | 1至1024个字符 | — | Sub onLoad(Ribbon as IRibbonUI) |
— | loadImage | 1至1024个字符 | — | Sub loadImage(imageID as string,ByRef returnedVal) |
例如,添加onLoad属性的代码如下:
<!-- 代码3: -->
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="onLoad">
<!-- All other instructions go here -->
</customUI>
customUI元素的子对象
customUI标签是一个容器,包含其他对象。实际上,customUI仅能包含下列元素:
-
commands
-
ribbon
ribbon元素
ribbon元素没有任何必需的属性,其可选的静态属性如下:
静态属性 | 动态属性 | 允许值 | 默认值 | 说名 |
---|---|---|---|---|
startFromScratch | – | true,false,1,0 | False | Valse =True 时,会隐藏内置功能区 |
如下代码回会隐藏内置的功能区:
<!-- 代码4: -->
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">
<ribbon startFromScratch="true">
<!-- All other instructions go here -->
</ribbon>
</customUI>
ribbon元素的子对象
ribbon对象可以包含下列元素:
- contextualtabs
- officeMenu
- qat
- abs
tabs(选项卡容器)
- 这是除customUI和ribbon之外的另一个容器,必须嵌套在功能区(Ribbon)块中。
- tabs元素是要使用的最容易的元素之一,没有单个的属性,其子元素是 tab。
- tabs元素是一个容器元素,用于包含特定引用的(或创建的)选项卡(tab)控件。
<!-- 代码5: -->
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
<ribbon>
<tabs>
<!-- All other instructions go here -->
</tabs>
</ribbon>
</customUI>
tab(选项卡)
tab元素包含在tabs容器中,用于创建或引用功能区中单个的选项卡。
- tabs(复数形式)引用整个选项卡集合,而tab(单数形式)指定特定的选项卡。
- tab 的子元素对象仅仅可以包含组元素,例如内置的剪贴板组或者自已创建的自定义组。
tab 对象是层级中的第一个元素,主要有以下6个属性:
静态属性 | 动态属性 | 允许值 | 默认值 | 动态属性的VBA回调签名 | 备注 |
---|---|---|---|---|---|
id | - | - | - | - | 必需 |
insert | - | - | - | - | |
tag | - | 1至1024个字符 | - | - | |
keytip | getKeytip | 1至3个字符 | - | Sub GetKeytip(control As IRibbonControl,ByRef returnedVal) | |
label | getLabel | 1至1024个字符 | - | Sub GetLabel(control As IRibbonControl, | |
visible | getVisible | true,false,1,0 | true | Sub GetVisible(control As IRibbonControl, ByRef returnedVal) |
其中,id 属性必须从下表中选择且只能选择其中一个:
id属性形式 | 何时使用 |
---|---|
id | 当创建自已的选项卡时 |
idMso | 当使用现有的Microsoft选项卡时 |
idQ | 当创建在命名空间之间共享的选项卡时 |
如果要设置某选项卡相对于任何其它现有的选项卡的位置,则使用下表列出的 insert 属性之一:
insert属性形式 | 允许值 | 默认值 | 何时使用 |
---|---|---|---|
insertAfterMso | 有效的 Mso 选项卡 ID | 在最近的选项卡之后插入 | 在 Microsoft 选项卡之后插入 |
insertBeforeMso | 有效的 Mso 选项卡 ID | 在最近的选项卡之后插入 | 在 Microsoft 选项卡之前插入 |
insertAfterQ | 有效的选项卡 idQ | 在最近的选项卡之后插入 | 在共享的命名空间选项卡之后插入 |
insertBeforeQ | 有效的选项卡 idQ | 在最近的选项卡之后插入 | 在共享的命名空间选项卡之前插入 |
内置的选项卡
当在功能区中处理选项卡时,有两种类型的选项卡:内置的和自定义的。内置选项卡由Microsoft提供,而自定义选项卡由自已创建。
1. 引用内置选项卡
每个内置选项卡都有自已唯一的idMso属性,通过调用该属性引用这个选项卡,因此应该弄清楚idMso属性。
下表列出了Excel、Access和Word的一些最通用的选项卡名称,注意大小写。
选项卡名称 | idMso(Excel) | idMso(Word) | idMso(Access) |
---|---|---|---|
开始 | TabHome | TabHome | TabHomeAccess |
插入 | TabInsert | TabInsert | - |
页面布局 | TabPageLayoutExcel | TabPageLayoutWord | - |
公式 | TabFormulas | - | - |
数据 | TabData | - | - |
视图 | TabReview | TabReviewWord | - |
创建 | - | - | TabCreate |
外部数据 | - | - | TabExternalData |
数据库工具 | - | - | TabDatabaseTools |
2. 修改内置选项卡
通过修改内置选项卡的 visible/getVisible 属性可以控制内置选项卡的显示与否,例如以下代码可以隐藏开始选项卡:
<!-- 代码6: -->
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">
<ribbon startFromScratch="false">
<tabs>
<tab idMso="TabHome" visible="false">
</tab>
</tabs>
</ribbon>
</customUI>
自定义选项卡
1. 创建自定义选项卡
创建自定义选项卡时,不需要引用idMso,而是为新选项卡指定一个唯一的id属性。
如下代码将创建一个名为 my_Tab 的自定义选项卡,并放在所有选项卡的最后:
<!-- 代码7: -->
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">
<ribbon startFromScratch="false">
<tabs>
<tab id="myTab" label="my_Tab">
</tab>
</tabs>
</ribbon>
</customUI>
2. 设定自定义选项卡位置
如下代码将 my_Tab 放置在 开始选项卡(idMso=“TabHome”)之后:
<!-- 代码8: -->
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
<ribbon startFromScratch="false">
<tabs>
<tab id="myTab" label="my_Tab" insertAfterMso="TabHome" >
</tab>
</tabs>
</ribbon>
</customUI>
group(组)元素
1. group 元素的 id 属性
与tab元素一样,每个组需要一个唯一的id属性,如下表所示。
id属性形式 | 何时使用 |
---|---|
id | 当创建自已的选项卡时 |
idMso | 当使用现有的Microsoft选项卡时 |
idQ | 当创建在命名空间之间共享的选项卡时 |
2. 带有回调签名的可选的静态属性和动态属性
要设置某个组相对于任何其他现有的组的位置,需要指定下表列出的 insert 属性之一:
insert属性形式 | 允许值 | 默认值 | 何时使用 |
---|---|---|---|
insertAfterMso | 有效的 Mso 选项卡 ID | 在最近的选项卡之后插入 | 在 Microsoft 选项卡之后插入 |
insertBeforeMso | 有效的 Mso 选项卡 ID | 在最近的选项卡之后插入 | 在 Microsoft 选项卡之前插入 |
insertAfterQ | 有效的选项卡 idQ | 在最近的选项卡之后插入 | 在共享的命名空间选项卡之后插入 |
insertBeforeQ | 有效的选项卡 idQ | 在最近的选项卡之后插入 | 在共享的命名空间选项卡之前插入 |
除以上2个属性之外,group 控件还有以下8项静态属性和动态属性:
静态属性 | 动态属性 | 允许值 | 默认值 | 动态属性的VBA回调签名 |
---|---|---|---|---|
image | getImage | 1至1024个字符 | - | Sub GetImage(control As IRibbonControl, ByRef returnedVal) |
imageMso | getImage | 1至1024个字符 | - | 同上 |
keytip | getKeytip | 1至3个字符 | - | Sub GetKeytip(control As IRibbonControl, ByRef returnedVal) |
label | getLabel | 1至1024个字符 | - | Sub GetLabel(control As IRibbonControl, ByRef returnedVal) |
screentip | getScreentip | 1至1024个字符 | - | Sub GetScreentip(control As IRibbonControl, ByRef returnedVal) |
supertip | getSupertip | 1至1024个字符 | - | Sub GetSupertip(control As IRibbonControl, ByRef returnedVal) |
tag | - | 1至1024个字符 | - | - |
visible | getVisible | true,false,1,0 | true | Sub GetVisible(control As IRibbonControl, ByRef returnedVal) |
3. group 元素的子对象
group 元素能够包含下列14种对象的任意组合:
group 的字对象详细用法将在后续更新中进行详细讲解。
控件 | 名称 |
---|---|
box | 框 |
button | 按钮 |
buttonGroup | 按钮组 |
checkBox | 复选框 |
comboBox | 组合框 |
dropDown | 下拉控件 |
dynamicMenu | 动态菜单 |
editBox | 编辑框 |
gallery | 库 |
labelControl | 标签控件 |
menu | 菜单 |
menuSeparator | 菜单分隔条 |
splitButton | 拆分按钮 |
toggleButton | 切换按钮 |
下面是在自定义选项卡中创建一个自定义组的XML代码:
<!-- 代码9: -->
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">
<ribbon startFromScratch="false">
<tabs>
<tab id="myTab1" label="my_Tab1" insertBeforeMso="TabHome">
<group id="myGroup1" label="my_Group1">
<!-- All other instructions go here -->
</group>
</tab>
</tabs>
</ribbon>
</customUI>
注意: 经实测,在 office 2016 中,创建没有按钮的空组(group)是,该组不会显示。
内置组
使用内置组,仍然能够提供内置功能。此外,能够将经常使用的控件组合在一起。
1. 引用内置组
与选项卡相似,通过引用其id属性识别自定义组,通过引用其idMso属性识别内置组。
下表列出了Excel、Access和Word中的一些内置组。
显示的名称 | idMso名称 |
---|---|
剪贴板 | GroupClipboard |
字体 | GroupFont |
形状 | GroupShapes |
例如,隐藏Excel中剪贴板组的XML如下:
<!-- 代码10: -->
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">
<ribbon startFromScratch="false">
<tabs>
<tab idMso="TabHome">
<group idMso="GroupClipboard" visible="false">
</group>
</tab>
</tabs>
</ribbon>
</customUI>
2. 在自定义选项卡中使用内置组
能够在自已的选项卡中使用内置组,这是 Office 的一项关键功能。
下表列出了在 Excel 中审阅需要使用到的组。
组名 | 默认的选项卡 | 名称 |
---|---|---|
剪贴板 | 开始 | GroupClipboard |
字体 | 开始 | GroupFont |
公式审核 | 公式 | GroupFormulaAuditing |
批注 | 审阅 | GroupComments |
编辑 | 开始 | GroupEditingExcel |
现在,创建一个包含上述组的自定义选项卡,其XML代码如下:
<!-- 代码11: -->
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">
<ribbon startFromScratch="false">
<tabs>
<tab id="MyTool" label="My_Tool" insertBeforeMso="TabHome">
<group idMso="GroupClipboard"/>
<group idMso="GroupFont"/>
<group idMso="GroupFormulaAuditing"/>
<group idMso="GroupComments"/>
<group idMso="GroupEditingExcel"/>
</tab>
</tabs>
</ribbon>
</customUI>
自定义组
1. 创建自定义组
与tab元素一样,通过指定一个唯一的id属性来创建自定义组,而不是引用内置组的idMso。
在上述 代码11 的最后一个 group 之后添加如下代码:
<!-- 代码12: -->
<group id="myGroup" label="my_Group" >
</group>
则会在最后创建一个名为 “my_Group” 的组,其效果如下:
**注意:**上述代码并没有在同一行中开始和结束组代码。这样是方便在其中添加其他控件,例如按钮、复选框或动态菜单等。
2. 放置自定义组
有时,可能想让自定义的组放置在指定的位置或按指定的顺序排列,可以采取两种方法来实现。
方法1:在XML代码中,按想要显示的顺序编写代码。
方法2:使用insertBeforeMso属性或insertAfterMso属性,在某个组之前或之后放置自定义的组。例如,将上述 代码12 替换为如下代码,自定义组 “my_Group” 放置在"字体"组之前:
<!-- 代码13: -->
<group id="myGroup" label="my_Group" insertBeforeMso="GroupFont">
</group>
3. 在内置选项卡中的自定义组
如下代码会在 “开始” 选项卡中有一个自定义组 my_Group
<!-- 代码14: -->
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
<ribbon startFromScratch="false">
<tabs>
<tab idMso="TabHome">
<group id="myGroup" label="my_Group" insertBeforeMso="GroupFont">
</group>
</tab>
</tabs>
</ribbon>
</customUI>
以下是来自微软的关于功能区选项卡的官方参考文件。
Office 2010帮助文件:Office Fluent用户界面控件标识符
Office 2013帮助文件:Office Fluent用户界面控件标识符
Office 2016帮助文件:Office Fluent用户界面控件标识符
有关适用于开发人员的Office Fluent UI(功能区)的信息
Office 2010加载项:图标库