RibbonX:自定义Office 2007功能区——理解XML(二)

RibbonX:自定义Office 2007功能区
第三章 理解XML学习笔记

————————————-
核心的XML框架
每个定制都以customUI和Ribbon元素开始,取决于是否决定从头开始创建自已的UI、对内置的控件顺序作小的调整、或者创建两者的组合。
除了已经列出的元素外,也将研究tabs、tab和group元素,几乎在所有的定制中都将使用这些元素。
customUI元素
要创建格式良好的XML文档,实质上包含一个且唯一一个“最外层的元素”,嵌套所有其他的元素。最外层的元素被称为“根元素”。在功能区定制中,该元素是customUI元素。
打开CustomUI Editor,输入下面的代码:
<customUI xmlns=”http://schemas.microsoft.com/office/2006/01/customui“>
    <!– All other instructions go here –>
</customUI>
然后,单击“validate”验证代码。注意,验证代码是一个好习惯。
1、customUI元素必需的属性
每个customUI标签必须指定xmlns属性,如下表所示。
表:customUI元素必需的属性
静态属性       允许值
Xmlns        http://schemas.microsoft.com/office/2006/01/customui
2、带有回调签名的可选的静态和动态属性
这些属性不一定在XML中使用。
表:为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标签是一个容器,能包含其他对象:
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元素有一个非常特别的属性,如下表所示。
表: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 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属性的层级中的第一个元素。必须从下表中选择其中一个:
表:tab元素的id属性
属性    何时使用
id       当创建自已的选项卡时
idMso    当使用现有的Microsoft选项卡时
idQ      当创建在命名空间之间共享的选项卡时
为什么需要id属性的原因很简单:如果选项卡没有id属性,那么如何引用该选项卡呢?
2、带有回调签名的可选的静态和动态的属性
tab元素提供了几个可选的静态属性。如果要设置选项卡相对于其他任何现有的选项卡的位置,则使用下表列出的insert属性之一:
表:对tab控件可选的insert属性
insert属性      允许值            默认值                   何时使用
insertAfterMso  有效的Mso选项卡  在最近的选项卡之后插入 在Microsoft选项卡之后插入
insertBeforeMso 有效的Mso选项卡  在最近的选项卡之后插入 在Microsoft选项卡之前插入
insertAfterQ     有效的选项卡idQ  在最近的选项卡之后插入  在共享的命名空间选项卡之后插入
insertBeforeQ    有效的选项卡idQ  在最近的选项卡之后插入  在共享的命名空间选项卡之前插入
注意,如果没有指定insert属性,那么选项卡将被添加到最后一个选项卡之后,而不管是自定义选项卡还是内置选项卡。
tab控件也接受下表显示的任何或所有的属性:
表: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对象可包含同组元素,例如内置的剪贴板组或者自已制作的自定义组。
内置的选项卡
当在功能区中处理选项卡时,有两种类型的选项卡:内置的和自定义的。
1、引用内置选项卡
每个内置选项卡有自已唯一的idMso属性,通过调用该属性引用这个选项卡,因此应确定idMso属性。
下表显示了Excel、Access和Word的一些最通用选项卡名称,注意大小写。
表:最常用的内置选项卡名称
选项卡名称    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中打开该工作簿文件,此时“开始”选项卡没有了。
此时,关闭该工作簿文件,将使“开始”选项卡重新出现。
自定义选项卡
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中重新打开该工作簿,此时在功能区中将增加一个新的自定义选项卡,如下图所示。
AddTab0
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>
如下图所示:
AddTab1 
注意,当插入多个控件时,将按照在XML代码中编写的顺序插入。
group元素
group元素的作用是为实际的按钮、复选框、菜单和其他允许在功能区中配置的命令创建占位符。
1、group元素必需的属性
与tab元素一样,每个组需要一个唯一的id属性,如下表所示。
表:group元素的id属性
属性          何时使用
id            当创建自已的组时
idMso        当使用现有的Microsoft组时
idQ          当在共享的命名空间之间创建组时
2、带有回调签名的可选的静态的和动态的属性
要设置某个组相对于任何其他现有的组的位置,需要指定下表列出的insert属性之一。
表:group控件可选的insert属性
insert属性      允许值        默认值          何时使用
insertAfterMso  有效的Mso组 最近的组之后插入 Microsoft组之后插入
insertBeforeMso 有效的Mso组 最近的组之后插入 Microsoft组之前插入
insertAfterQ    有效的组idQ  最近的组之后插入 共享的命名空间组之后插入
insertBeforeQ   有效的组idQ  最近的组之后插入 共享的命名空间组之前插入
group控件也接受下表所列出的任何或所有的属性。
表: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=”Demo”
               insertAfterMso=”TabHome”>
                <group id=”rxgrpDemo”
                       label=”Demo Group”
                       keytip=”D”
                       screentip=”This is my screentip”
                       supertip=”This is my supertip”>
                </group>
            </tab>
        </tabs>
    </ribbon>
</customUI>
结果如下图所示:
AddGroup01
注意,在上面的XML中,仅label属性的值出现在功能区中。大多数可选的属性例如imageMso,在组控件中将没有可见的效果。因此,经调试后,可以忽略一些可选的属性。
内置组
使用内置组,仍然能够提供内置功能。也提供了将经常使用的控件组合在一起的功能。
1、引用内置组
与选项卡相似,通过引用其id属性识别自定义组,通过引用其idMso属性识别内置组。
下表列出了Excel、Access和Word中的一些内置组。
表:在Excel、Access和Word中通用的组
显示的名称      idMso名称
剪贴板          GroupClipboard
字体            GroupFont
形状            GroupShapes
例如,隐藏Word中的剪贴板组的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>
结果如下图:
HideGroup0 
2、在自定义选项卡中使用内置组
能够在自已的选项卡中使用内置组,这是Office 2007的一项关键功能。
Microsoft虽然花费了大量的人力和财力研究用户的使用习惯,但默认的控件顺序不会总是满足特定的需求。因此,使用重复使用Microsoft内置组的能力,可以很容易地在单个选项卡中放置最常用的命令,这样更方便于使用且随时可见,避免在功能区选项卡之间来回切换。
在许多场合,创建一个自定义且经过整理的选项卡能够节省无数次的键击并极大地提高生产力。
例如,下表列出了在Excel中一些经常需要的组。
表:在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元素没有使用单独的结束标签,而是在行尾使用/>结束。这样的编写非常简洁。此时,结果如下图所示。
CreatCustomGroup01 
注意,在自定义组中引用的内置组只是原来组的副本,内置组仍然在原来的位置。
自定义组
1、创建自定义组
与tab元素一样,通过指定一个唯一的id属性来创建自定义组。而不是引用内置组的idMso。
继续上面的示例,关闭Excel文件,在CustomUI Editor中重新打开该文件,在最后的一个group标签之后,添加下面的XML代码:
<group id=”rxgrpMyGroup”
        label=”My Group”>
</group>
注意,上述代码并没有在同一行中开始和结束代码。这样,方便在其中添加其他控件,例如按钮、复选框或动态菜单。
验证代码后保存文件并关闭CustomUI Editor。再打开Excel,此时,添加了一个空组,如下图所示。
CreatCustomGroup11 
2、放置自定义组
有时,可能想让自定义的组放置在指定的位置或按指定的顺序排列。
(1)在XML代码中,按想要显示的顺序编写代码。
(2)使用insertBeforeMso属性或insertAfterMso属性。
3、在内置选项卡中的自定义组
以Word 2007为例。
(1)创建一个新的Word文档并保存,然后关闭该文档。
(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)在Word中重新打开该文件,现在看到在“开始”选项卡中有一个自定义组,如下图所示。
HideGroup0 
此时,在内置的“开始”选项卡中添加了自定义组“My Group”,并且将该组放置在第二位,即“字体”组之前。然后,您可以在自定义组中添加想要的控件了!


提示:您可以在评论中使用HTML标签,且任何与HTML标签相同的符号都会被理解为HTML标签并以相应的格式显示.如果您的评论中有代码,可以使用相应的标签,例如,如果有VB或VBA代码,则可以使用[vb]标签,即[vb]放置的代码[/vb],这样会很清晰地显示代码.

发表评论