细品RibbonX(14):核心的OpenXML架构元素
资料整理来自于论坛
完整版下载地址:http://download.youkuaiyun.com/download/nodeman/10264659
Loading ...
在编写自定义Office 2007界面的XML时,总是以customUI元素开始,紧接着是Ribbon元素。下面我们将详细介绍customUI元素、Ribbon元素,以及tabs、tab和group元素,在自定义界面时几乎总是要使用这些元素。
customUI元素
要创建格式良好的XML文档,必须包含一个且唯一一个"最外层的元素",嵌套所有其他的元素。这个最外层的元素被称作"根元素"。对于功能区定制来说,该元素就是customUI元素。这意味着customUI标签里嵌套着所要使用的所有其它标签。
现在,打开CustomUI Editor,输入下面的代码:
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
<!– All other instructions go here –>
</customUI>
然后,单击"validate"按钮验证代码。注意,验证代码是一个好习惯。
1、customUI元素必需的属性
每个customUI标签必须指定xmlns属性,如下表1所示。
表1:customUI元素必需的属性
静态属性 | 允许值 |
xmlns | http://schemas.microsoft.com/office/2006/01/customui |
2、带有回调签名的可选的静态属性和动态属性
也可以在customUI标签中添加下表2列出的部分或全部属性。当然,这些属性不一定非得在XML中使用,随您的需要而定。
表2:customUI元素的可选属性
静态属性 | 动态属性 | 允许值 | 默认值 | 动态属性的VBA回调签名 |
xmlns:Q | (none) | 1至1024个字符 | (none) | (none) |
(none) | onLoad | 1至1024个字符 | (none) | Sub onLoad(Ribbon as IRibbonUI) |
(none) | loadImage | 1至1024个字符 | (none) | Sub loadImage(imageID as string,ByRef returnedVal) |
例如,添加onLoad属性的代码如下:
<customUI
xmlns="http://schemas.microsoft.com/office/2006/01/customui"
onLoad="rxiRibbonUI_onLoad">
<!– All other instructions go here –>
</customUI>
注意,onLoad属性只是被嵌套在与customUI元素相同的<>括号内,对其他可选属性也是如此。并且,可以每行列出一个属性,无须包括连续或行中断的代码。
3、customUI元素的子对象
customUI标签是一个容器,包含其他对象。实际上,customUI仅能包含下列元素:
commands
ribbon
ribbon元素
要修改功能区,则要在customUI标签内嵌套ribbon元素,如下所示:
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
<ribbon>
<!– All other instructions go here –>
</ribbon>
</customUI>
1、ribbon元素必需的属性
ribbon元素没有任何必需的属性。
2、可选的静态属性
ribbon元素有一个非常特别的属性,如下表3所示。
表3:ribbon元素的可选属性
静态属性 | 动态属性 | 允许值 | 默认值 | 动态属性的VBA回调签名 |
startFromScratch | (none) | true,false,1,0 | false | (none) |
startFromScratch属性能够隐藏整个内置的功能区。因为该属性的默认值为false,所以前面的示例代码中都忽略了该属性。下面的XML能够得到相同的结果:
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
<ribbon startFromScratch="false">
<!– All other instructions go here –>
</ribbon>
</customUI>
3、ribbon元素的子对象
ribbon对象可以包含下列元素:
contextualTabs
officeMenu
qat
tabs
tabs元素
这是除customUI和ribbon之外的另一个容器,必须嵌套在功能区(Ribbon)块中。示例代码如下:
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
<ribbon>
<tabs>
<!– All other instructions go here –>
</tabs>
</ribbon>
</customUI>
tabs标签的目的是集中要引用、创建或修改的每个元素和单个选项卡。
1、tabs元素必需的属性
tabs元素是要使用的最容易的元素之一,没有单个的属性。
2、tabs元素的子对象
tabs元素是一个容器元素,用于包含特定引用的(或创建的)选项卡控件。
tab元素
tab元素包含在tabs容器中,用于创建或引用功能区中单个的选项卡。理解tabs对象和tab对象之间的不同是非常重要的。tabs(复数形式)引用整个选项卡集合,而tab(单数形式)指定特定的选项卡。
1、tab元素必需的属性
tab对象是层级中的第一个元素,需要id属性。必须从下表4中选择且只能选择其中一个:
表4:tab元素的id属性
属性 | 何时使用 |
id | 当创建自已的选项卡时 |
idMso | 当使用现有的Microsoft选项卡时 |
idQ | 当创建在命名空间之间共享的选项卡时 |
为什么需要id属性的原因很简单:如果选项卡没有id属性,那么如何引用该选项卡呢?
2、带有回调签名的可选的静态属性和动态属性
tab元素提供了几个可选的静态属性。如果要设置某选项卡相对于任何其它现有的选项卡的位置,则使用下表5列出的insert属性之一。
表5:tab控件可选的insert属性
insert属性 | 允许值 | 默认值 | 何时使用 |
insertAfterMso | 有效的Mso选项卡 | 在最近的选项卡之后插入 | 在Microsoft选项卡之后插入 |
insertBeforeMso | 有效的Mso选项卡 | 在最近的选项卡之后插入 | 在Microsoft选项卡之前插入 |
insertAfterQ | 有效的选项卡idQ | 在最近的选项卡之后插入 | 在共享的命名空间选项卡之后插入 |
insertBeforeQ | 有效的选项卡idQ | 在最近的选项卡之后插入 | 在共享的命名空间选项卡之前插入 |
注意,如果没有指定insert属性,那么选项卡将被添加到最后一个选项卡之后,而不管是自定义选项卡还是内置选项卡。
tab控件也接受下表6列出的任一或全部属性:
表6:tab控件的可选属性和回调
静态属性 | 动态属性 | 允许值 | 默认值 | 动态属性的VBA回调签名 |
keytip | getKeytip | 1至3个字符 | (none) | Sub GetKeytip(control As IRibbonControl,ByRef returnedVal) |
label | getLabel | 1至1024个字符 | (none) | Sub GetLabel(control As IRibbonControl, ByRef returnedVal) |
tag | (none) | 1至1024个字符 | (none) | n/a |
visible | getVisible | true,false,1,0 | true | Sub GetVisible(control As IRibbonControl, ByRef returnedVal) |
注意,动态回调用于在文件使用时动态修改功能区,使用了VBA代码来运行。
3、tab元素的子对象
tab对象仅仅可以包含组元素,例如内置的剪贴板组或者自已创建的自定义组。
4、内置的选项卡
当在功能区中处理选项卡时,有两种类型的选项卡:内置的和自定义的。内置选项卡由Microsoft提供,而自定义选项卡由自已创建。
(1)引用内置选项卡
每个内置选项卡都有自已唯一的idMso属性,通过调用该属性引用这个选项卡,因此应该弄清楚idMso属性。
下表7列出了Excel、Access和Word的一些最通用的选项卡名称,注意大小写。
表7:最常用的内置选项卡名称
选项卡名称 | idMso(Excel) | idMso(Word) | idMso(Access) |
开始 | TabHome | TabHome | TabHomeAccess |
插入 | TabInsert | TabInsert | (none) |
页面布局 | TabPageLayoutExcel | TabPageLayoutWord | (none) |
公式 | TabFormulas | (none) | (none) |
数据 | TabData | (none) | (none) |
视图 | TabReview | TabReviewWord | (none) |
创建 | (none) | (none) | TabCreate |
外部数据 | (none) | (none) | TabExternalData |
数据库工具 | (none) | (none) | TabDatabaseTools |
(2)修改内置选项卡
步骤1 打开Excel 2007创建一个新的工作簿。由于不需要任何动态回调,因此将该文件保存为Excel的默认工作簿格式(xlsx)。
步骤2 关闭Excel,然后在CustomUI Editor中打开该工作簿。
步骤3 输入下面的XML代码:
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
<ribbon startFromScratch="false">
<tabs>
<tab idMso="TabHome"visible="false">
</tab>
</tabs>
</ribbon>
</customUI>
步骤4 验证代码并保存,关闭CustomUI Editor。
步骤5 在Excel中打开该工作簿文件,此时"开始"选项卡没有了。
此时,关闭该工作簿文件,将使"开始"选项卡重新出现。
5、自定义选项卡
(1)创建自定义选项卡
创建自定义选项卡时,不需要引用idMso,而是为新选项卡指定一个唯一的id属性。
继续上面的练习,在Excel中关闭工作簿文件,在customUI Editor中重新打开该文件,输入下面的代码:
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
<ribbon startFromScratch="false">
<tabs>
<tab id="rxtabDemo"label="Demo">
</tab>
</tabs>
</ribbon>
</customUI>
验证代码并关闭该文件,然后在Excel中重新打开该工作簿,此时在功能区中将增加一个新的自定义选项卡,如下图1所示。
图1:功能区中新增加的自定义选项卡
(2)放置自定义选项卡
现在我们将自定义选项卡放置在"开始"选项卡之后,代码如下:
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
<ribbon startFromScratch="false">
<tabs>
<tab id="rxtabDemo"
label="Demo"
insertAfterMso="TabHome">
</tab>
</tabs>
</ribbon>
</customUI>
即为insert属性指定有效的idMso,将自定义选项卡放置在想要的位置。此时,工作簿如下图2所示。
图2:自定义选项卡放置在"开始"和"插入"选项卡之间
注意,当插入多个控件时,将按照它们在XML代码中的顺序插入。
group元素
group元素的作用是为实际的按钮、复选框、菜单和其他允许在功能区中配置的命令创建占位符。
1、group元素必需的属性
与tab元素一样,每个组需要一个唯一的id属性,如下表8所示。
表8:group元素的id属性
属性 | 何时使用 |
id | 当创建自已的组时 |
idMso | 当使用现有的Microsoft组时 |
idQ | 当创建在命名空间之间共享的组时 |
2、带有回调签名的可选的静态属性和动态属性
要设置某个组相对于任何其他现有的组的位置,需要指定下表9列出的insert属性之一。
表9:group控件可选的insert属性
insert属性 | 允许值 | 默认值 | 何时使用 |
insertAfterMso | 有效的Mso组 | 最近的组之后插入 | Microsoft组之后插入 |
insertBeforeMso | 有效的Mso组 | 最近的组之后插入 | Microsoft组之前插入 |
insertAfterQ | 有效的组idQ | 最近的组之后插入 | 共享的命名空间组之后插入 |
insertBeforeQ | 有效的组idQ | 最近的组之后插入 | 共享的命名空间组之前插入 |
group控件也接受下表10列出的任何或全部属性。
表10:group控件可选的属性和回调
静态属性 | 动态属性 | 允许值 | 默认值 | 动态属性的VBA回调签名 |
image | getImage | 1至1024个字符 | (none) | Sub GetImage(control As IRibbonControl, ByRef returnedVal) |
imageMso | getImage | 1至1024个字符 | (none) | 同上 |
keytip | getKeytip | 1至3个字符 | (none) | Sub GetKeytip(control As IRibbonControl, ByRef returnedVal) |
label | getLabel | 1至1024个字符 | (none) | Sub GetLabel(control As IRibbonControl, ByRef returnedVal) |
screentip | getScreentip | 1至1024个字符 | (none) | Sub GetScreentip(control As IRibbonControl, ByRef returnedVal) |
supertip | getSupertip | 1至1024个字符 | (none) | Sub GetSupertip(control As IRibbonControl, ByRef returnedVal) |
tag | (none) | 1至1024个字符 | (none) | (none) |
visible | getVisible | true,false,1,0 | true | Sub GetVisible(control As IRibbonControl, ByRef returnedVal) |
3、group元素的子对象
group元素能够包含下列对象的任意组合:
box
button
buttonGroup
checkBox
comboBox
control
dialogBoxLauncher
dropdown
editBox
gallery
labelControl
menu
separator
splitButton
toggleButton
下面是在自定义选项卡中创建一个自定义组的XML代码:
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
<ribbon startFromScratch="false">
<tabs>
<tab id="rxtabDemo"
label="Sample"
insertBeforeMso="TabHome">
<group id="rxgrpDemo"
label="Demo Group"
imageMso="HappyFace"
keytip="D"
screentip="This is my screentip"
supertip="This is my supertip">
</group>
</tab>
</tabs>
</ribbon>
</customUI>
结果如下图3所示:
图3:自定义选项卡中的自定义组
注意,在上面的XML中设置的属性,仅label属性的值出现在功能区中。大多数可选的属性例如imageMso,在组控件中将没有可见的效果。因此,经调试后,可以忽略一些可选的属性。
4、内置组
使用内置组,仍然能够提供内置功能。此外,能够将经常使用的控件组合在一起。
(1)引用内置组
与选项卡相似,通过引用其id属性识别自定义组,通过引用其idMso属性识别内置组。下表11列出了Excel、Access和Word中的一些内置组。
表11:在Excel、Access和Word中通用的组
显示的名称 | idMso名称 |
剪贴板 | GroupClipboard |
字体 | GroupFont |
形状 | GroupShapes |
例如,隐藏Excel中剪贴板组的XML如下:
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
<ribbon startFromScratch="false">
<tabs>
<tab idMso="TabHome">
<group idMso="GroupClipboard"
visible="false">
</group>
</tab>
</tabs>
</ribbon>
</customUI>
结果如下图4所示:
图4:隐藏了"剪贴板"组的"开始"选项卡
(2)在自定义选项卡中使用内置组
能够在自已的选项卡中使用内置组,这是Office 2007的一项关键功能。
Microsoft虽然花费了大量的人力和财力研究用户的使用习惯,但默认的控件顺序不会总是满足特定的需求。因此,利用重复使用Microsoft内置组的能力,可以容易地在单个选项卡中放置最常用的命令,这样更方便于使用且随时可见,避免在功能区选项卡之间来回切换。
在许多场合,创建一个自定义且经过整理的选项卡能够节省无数次的键击并极大地提高生产力。例如,假设要花时间审阅Excel工作簿的一致性,在默认的功能区中,需要经常在功能区选项卡之间来回切换以利用所需要的控件,下表12列出了在Excel中需要使用到的组。
表12:在Excel中常用的审核工具的位置
组名 | 默认的选项卡 | 名称 |
剪贴板 | 开始 | GroupClipboard |
字体 | 开始 | GroupFont |
公式审核 | 公式 | GroupFormulaAuditing |
批注 | 审阅 | GroupComments |
编辑 | 开始 | GroupEditingExcel |
现在,创建一个包含上述组的自定义选项卡,其XML代码如下:
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
<ribbon startFromScratch="false">
<tabs>
<tab id="rxtabMyTools"
label="My Tools"
insertBeforeMso="TabHome">
<group idMso="GroupClipboard"/>
<group idMso="GroupFont"/>
<group idMso="GroupFormulaAuditing"/>
<group idMso="GroupComments"/>
<group idMso="GroupEditingExcel"/>
</tab>
</tabs>
</ribbon>
</customUI>
注意,在上面的代码中,group元素没有使用单独的结束标签,而是在行尾使用/>结束。这样的编写非常简洁。此时,结果如下图5所示。
图5:填充内置组的自定义选项卡
注意,在自定义组中引用的内置组只是原来组的副本,内置组仍然在原来的位置。
5、自定义组
(1)创建自定义组
与tab元素一样,通过指定一个唯一的id属性来创建自定义组,而不是引用内置组的idMso。
继续上面的示例,关闭Excel文件,在CustomUI Editor中重新打开该文件,在最后一个group标签之后,添加下面的XML代码:
<group id="rxgrpMyGroup"
label="My Group">
</group>
注意,上述代码并没有在同一行中开始和结束组代码。这样,方便在其中添加其他控件,例如按钮、复选框或动态菜单。
验证代码后保存文件并关闭CustomUI Editor。再打开Excel,此时,在自定义选项卡中添加了一个空组,如下图6所示。
图6:自定义选项卡中的自定义组
(2)放置自定义组
有时,可能想让自定义的组放置在指定的位置或按指定的顺序排列,可以采取两种方法来实现。
方法1:在XML代码中,按想要显示的顺序编写代码。
方法2:使用insertBeforeMso属性或insertAfterMso属性,在某个组之前或之后放置自定义的组。例如,上例中使用下面的代码将自定义组放置在"字体"组之前:
<group id="rxgrpMyGroup"
label="My Group"
insertBeforeMso="GroupFont">
</group>
结果如下图7所示。
图7:将自定义选项卡放置在"剪贴板"组和"字体"组之间
(3)在内置选项卡中的自定义组
在内置选项卡中插入自定义组也是很容易的,下面仍以Excel 2007为例来演示。
步骤1 创建一个新的Excel文档并保存,然后关闭该文档。
步骤2 在CustomUI Editor中打开该文档,并输入下面的代码:
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
<ribbon startFromScratch="false">
<tabs>
<tab idMso="TabHome">
<group id="rxgrpMyGroup"
label="My Group"
insertBeforeMso="GroupFont">
</group>
</tab>
</tabs>
</ribbon>
</customUI>
步骤3 验证代码并保存代码,然后关闭CustomUI Editor。
步骤4 在Excel中重新打开该文件,现在看到在"开始"选项卡中有一个自定义组,如下图8所示。
图8:在"开始"选项卡中的自定义组
此时,在内置的"开始"选项卡中添加了自定义组"My Group",并且将该组放置在第二位,即"字体"组之前。然后,您就可以在自定义组中添加想要的控件了!