ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > E文精选 > 综合应用 > 细品RibbonX(9):层次分明的RibbonX代码结构

细品RibbonX(9):层次分明的RibbonX代码结构

作者:绿色风 分类: 时间:2022-08-17 浏览:141
楼主
apolloh
在前面的一些文章中,我们已经介绍过定制功能区的代码。在详细探讨功能区各元素之前,我们将先了解完整的RibbonX代码结构、如何使用各类工具定制功能区、以及至关重要的XML知识。下面,让我们先看看完整的RibbonX代码结构。
如果忽略定义控件的XML元素,那么完整的RibbonX结构如下:


  1. <customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" ...>
  2.     <commands>
  3.         <command ... />
  4.     </commands>
  5.     <ribbon ...>
  6.         <officeMenu>
  7.             可用于Office菜单中的任何控件类型
  8.         </officeMenu>
  9.         <qat>
  10.             <sharedControls>
  11.                 <control>,<button> or <separator>控件类型
  12.             </sharedControls>
  13.             <documentControls>
  14.                 <control>,<button> or <separator>控件类型
  15.             </documentControls>
  16.         </qat>
  17.         <tabs>
  18.             <tab ... >
  19.                 <group ... >
  20.                     所有控件类型
  21.                 </group>
  22.             </tab>
  23.         </tabs>
  24.         <contextualTabs>
  25.             <tabSet idMSO="TabSetChartTools">
  26.                 <tab ... >
  27.                     <group ... >
  28.                         所有控件类型
  29.                     </group>
  30.                 </tab>
  31.             </tabSet>
  32.         </contextualTabs>
  33.     </ribbon>
  34. </customUI>
  1. <customUI>元素是XML的根容器,命名空间将其识别为RibbonX文档。
  2. <commands>元素用来重复利用内置控件。
  3. <ribbon>元素包含功能区中所有可以利用的元素。可以包含下列元素以控制功能区的相应部分。
  4. <officeMenu>元素用来定制Office菜单。
  5. <sharedControls>元素代表共享控件。
  6. <documentControls>元素代表文档控件。
  7. <qat>元素用来定制快速访问工具栏。
  8. <tabs>元素表示选项卡的集合。
  9. <tab>元素创建选项卡。
  10. <contextualTabs>元素创建上下文选项卡。
  11. <group>元素用来创建组。

下面,让我们使用Excel示例来看看完整的RibbonX结构能够实现的用户界面。
禁用命令
使用command元素能够重载命令或者禁用命令。例如,下面的XML禁用“保存”命令:


  1.     <commands>
  2.         <command idMso="FileSave" enabled="false" />
  3.     </commands>
结果如图1所示:

 
图1:禁用“保存”命令,该命令已变灰
从头开始创建功能区
将ribbon元素的StartFromScratch属性设置为True,从而去除所有的功能区界面元素,然后从头开始设计功能区。其XML为:


  1.     <ribbon startFromScratch="true">

在Office按钮菜单中添加自定义项
可以向Office按钮菜单中添加合适的自定义项。例如,下面的XML在Office按钮中添加按钮和菜单:


  1.         <officeMenu>
  2.             <button id="rxOMBtn1" label="My Office Button1" />
  3.             <button id="rxOMBtn2" label="My Office Button2" />
  4.             <menu id="MyOfficeMenu" label="My Office Menu">
  5.                 <button id="rxSend1" label="My Menu1" />
  6.                 <button id="rxSend2" label="My Menu2" />
  7.                 <button id="rxSend3" label="My Menu3" />
  8.                 <button id="rxSend4" label="My Menu4" />
  9.                 <button id="rxSend5" label="My Menu5" />
  10.                 <button id="rxSend6" label="My Menu6" />
  11.                 <button id="rxSend7" label="My Menu7" />
  12.                 <button id="rxSend8" label="My Menu8" />
  13.                 <button id="rxSend9" label="My Menu9" />
  14.             </menu>
  15.         </officeMenu>
结果如图2所示:

 
图2:在Office按钮中添加项目
自定义快速访问工具栏(QAT)
当将ribbon元素的StartFromScratch属性设置为True后,我们可以在设计时重新自定义快速访问工具栏。例如,下面的XML在QAT中放置“字体”组合框和“边框”拆分按钮:

  1.        <qat>
  2.             <sharedControls>
  3.                 <control idMso="Font" />
  4.             </sharedControls>
  5.             <documentControls>
  6.                 <control idMso="BordersGallery" />
  7.             </documentControls>
  8.         </qat>
其中sharedControls表示放置在其中的控件为共享控件,而documentControls表示放置其中的控件为文档控件(注意,周围带有边框)。结果如图3所示:

 
图3:自定义快速访问工具栏
自定义功能区
下面的XML在功能区中添加一个名为“Menu”的选项卡。

  1.             <tab id="rxExcelVBA" label="Menu">
接着,使用下面的代码在该选项卡中添加组。

  1.             <group idMso="GroupInsertChart**cel" />
上述代码添加内置的“图表”组。结果如下图4所示:

 
图4:在自定义选项卡“Menu”中添加“图表”组


  1.                 <group id="rxAuditMisc" label="My Sample">
  2.                     <box id="rxSortBox">
  3.                         <control idMso="SortAscendingExcel" showLabel="false" />
  4.                         <control idMso="SortDescendingExcel" showLabel="false" />
  5.                         <control idMso="SortDialog" showLabel="false" />
  6.                     </box>
  7.                     <control idMso="Copy" />
  8.                     <control idMso="PasteMenu" />
  9.                     <separator id="rxAuditMiscSeparator1" />
  10.                     <control idMso="NameManager" />
  11.                     <control idMso="ViewFreezePanesGallery" />
  12.                     <control idMso="WindowSwitchWindowsMenuExcel" />
  13.                 </group>
上述代码添加一个名为“My Sample”的自定义组,box元素用来组织控件的排列,separator元素用来放置分隔条。结果如图5所示:

 
图5:在自定义选项卡“Menu”中添加“My Sample”组,包含一些内置的功能


  1.                 <group id="rxDemo" label="My Menu">
  2.                     <menu id="rxMenu" label="Menu" imageMso="ReviewCompareMenu" size="large">
  3.                         <menu id="subMenu1" label="SubMenu1">
  4.                             <menu id="subMenu11" label="3-SubMenu1">
  5.                                 <button id="rxMenu11" label="Up" imageMso="OutlineMoveUp" />
  6.                                 <button id="rxMenu12" label="GoTo" imageMso="GoTo" />
  7.                                 <button id="rxMenu13" label="Down" imageMso="OutlineMoveDown" />
  8.                             </menu>
  9.                         </menu>
  10.                         <menu id="subMenu2" label="SubMenu2">
  11.                             <menu id="subMenu21" label="3-SubMenu2">
  12.                                 <button id="rxMenu21" label="Up" imageMso="OutlineMoveUp" />
  13.                                 <button id="rxMenu22" label="GoTo" imageMso="GoTo" />
  14.                                 <button id="rxMenu23" label="Down" imageMso="OutlineMoveDown" />
  15.                             </menu>
  16.                         </menu>
  17.                         <menuSeparator id="MySeparator" />
  18.                         <button id="rxMenuButton" label="Button" />
  19.                     </menu>
  20.                 </group>
上述代码添加一个名为“My Menu”的组,其中放置了嵌套的层级菜单。结果如下图6所示:

 
图6:在自定义选项卡“Menu”中添加“My Menu”组,包含层级菜单


  1.                 <group id="rxMyGroup" label="My Sample Group1">
  2.                     <button id="Button1" imageMso="HappyFace" size="large" label="BigButton" />
  3.                     <separator id="rxSeparator1" />
  4.                     <button id="b1" imageMso="HyperlinkInsert" size="large" label="Surf the Net" onAction="surf"/>
  5.                     <button id="b2" imageMso="HappyFace" label="Smile" onAction="smile"/>
  6.                     <button id="b3" imageMso="FormatPainter" label="Paint" onAction="paint"/>
  7.                     <button id="b4" imageMso="AutoFilterClassic" label="Filter" onAction="filter"/>
  8.                 </group>
上述代码添加一个名为“My Sample Group1”的组,其中放置了一些带有内置图像的控件并进行了合理布局。结果如下图7所示:

 
图7:在自定义选项卡“Menu”中添加的“My Sample Group1”组,包含一些带有内置图像的控件


  1.                 <group id="rxMyGroup1" label="My Sample Group2">
  2.                     <toggleButton imageMso="TranslationToolTip" id="MyToggleButton" size="large" label="Insert My Object"/>
  3.                     <separator id="rxSeparator2" />
  4.                     <checkBox id="AllowChanges" label="Allow Changes" />
  5.                     <dropDown id="ChooseDepartment" showLabel="true" label="Choose Department">
  6.                         <item id="Dept1" label="Shipping" />
  7.                         <item id="Dept2" label="Accounting" />
  8.                         <item id="Dept3" label="Engineering" />
  9.                     </dropDown>
  10.                     <comboBox id="ComboBox1" label="ComboBox">
  11.                         <item id="item1" label="one" imageMso="_1" />
  12.                         <item id="item2" label="two" imageMso="_2" />
  13.                         <item id="item3" label="three" imageMso="_3" />
  14.                     </comboBox>
  15.                 </group>
上述代码添加一个名为“My Sample Group2”的组,其中包含切换按钮、复选框、组合框、下拉框,并添加了项目。结果如图8所示:

 
图8:在自定义选项卡“Menu”中添加的“My Sample Group2”组,包含切换按钮、复选框、下拉框和组合框,并在其中添加了选项


  1.         <contextualTabs>
  2.             <tabSet idMso="TabSetChartTools" />
  3.         </contextualTabs>
上述代码添加上下文选项卡,当选中工作表中的图表时,会出现“图表工具”选项卡,如图9所示:

 
图9:选中图表后出现“图表工具”上下文选项卡
完整的代码
上述示例完整的XML代码如下:


  1. <customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
  2.     <commands>
  3.         <command idMso="FileSave" enabled="false" />
  4.     </commands>
  5.     <ribbon startFromScratch="true">
  6.         <officeMenu>
  7.             <button id="rxOMBtn1" label="My Office Button1" />
  8.             <button id="rxOMBtn2" label="My Office Button2" />
  9.             <menu id="MyOfficeMenu" label="My Office Menu">
  10.                 <button id="rxSend1" label="My Menu1" />
  11.                 <button id="rxSend2" label="My Menu2" />
  12.                 <button id="rxSend3" label="My Menu3" />
  13.                 <button id="rxSend4" label="My Menu4" />
  14.                 <button id="rxSend5" label="My Menu5" />
  15.                 <button id="rxSend6" label="My Menu6" />
  16.                 <button id="rxSend7" label="My Menu7" />
  17.                 <button id="rxSend8" label="My Menu8" />
  18.                 <button id="rxSend9" label="My Menu9" />
  19.             </menu>
  20.         </officeMenu>
  21.         <qat>
  22.             <sharedControls>
  23.                 <control idMso="Font" />
  24.             </sharedControls>
  25.             <documentControls>
  26.                 <control idMso="BordersGallery" />
  27.             </documentControls>
  28.         </qat>
  29.         <tabs>
  30.             <tab id="rxExcelVBA" label="Menu">
  31.                 <group idMso="GroupInsertChart**cel" />
  32.                 <group id="rxAuditMisc" label="My Sample">
  33.                     <box id="rxSortBox">
  34.                         <control idMso="SortAscendingExcel" showLabel="false" />
  35.                         <control idMso="SortDescendingExcel" showLabel="false" />
  36.                         <control idMso="SortDialog" showLabel="false" />
  37.                     </box>
  38.                     <control idMso="Copy" />
  39.                     <control idMso="PasteMenu" />
  40.                     <separator id="rxAuditMiscSeparator1" />
  41.                     <control idMso="NameManager" />
  42.                     <control idMso="ViewFreezePanesGallery" />
  43.                     <control idMso="WindowSwitchWindowsMenuExcel" />
  44.                 </group>
  45.                 <group id="rxDemo" label="My Menu">
  46.                     <menu id="rxMenu" label="Menu" imageMso="ReviewCompareMenu" size="large">
  47.                         <menu id="subMenu1" label="SubMenu1">
  48.                             <menu id="subMenu11" label="3-SubMenu1">
  49.                                 <button id="rxMenu11" label="Up" imageMso="OutlineMoveUp" />
  50.                                 <button id="rxMenu12" label="GoTo" imageMso="GoTo" />
  51.                                 <button id="rxMenu13" label="Down" imageMso="OutlineMoveDown" />
  52.                             </menu>
  53.                         </menu>
  54.                         <menu id="subMenu2" label="SubMenu2">
  55.                             <menu id="subMenu21" label="3-SubMenu2">
  56.                                 <button id="rxMenu21" label="Up" imageMso="OutlineMoveUp" />
  57.                                 <button id="rxMenu22" label="GoTo" imageMso="GoTo" />
  58.                                 <button id="rxMenu23" label="Down" imageMso="OutlineMoveDown" />
  59.                             </menu>
  60.                         </menu>
  61.                         <menuSeparator id="MySeparator" />
  62.                         <button id="rxMenuButton" label="Button" />
  63.                     </menu>
  64.                 </group>
  65.                 <group id="rxMyGroup" label="My Sample Group1">
  66.                     <button id="Button1" imageMso="HappyFace" size="large" label="BigButton" />
  67.                     <separator id="rxSeparator1" />
  68.                     <button id="b1" imageMso="HyperlinkInsert" size="large" label="Surf the Net" onAction="surf"/>
  69.                     <button id="b2" imageMso="HappyFace" label="Smile" onAction="smile"/>
  70.                     <button id="b3" imageMso="FormatPainter" label="Paint" onAction="paint"/>
  71.                     <button id="b4" imageMso="AutoFilterClassic" label="Filter" onAction="filter"/>
  72.                 </group>
  73.                 <group id="rxMyGroup1" label="My Sample Group2">
  74.                     <toggleButton imageMso="TranslationToolTip" id="MyToggleButton" size="large" label="Insert My Object"/>
  75.                     <separator id="rxSeparator2" />
  76.                     <checkBox id="AllowChanges" label="Allow Changes" />
  77.                     <dropDown id="ChooseDepartment" showLabel="true" label="Choose Department">
  78.                         <item id="Dept1" label="Shipping" />
  79.                         <item id="Dept2" label="Accounting" />
  80.                         <item id="Dept3" label="Engineering" />
  81.                     </dropDown>
  82.                     <comboBox id="ComboBox1" label="ComboBox">
  83.                         <item id="item1" label="one" imageMso="_1" />
  84.                         <item id="item2" label="two" imageMso="_2" />
  85.                         <item id="item3" label="three" imageMso="_3" />
  86.                     </comboBox>
  87.                 </group>
  88.             </tab>
  89.         </tabs>
  90.         <contextualTabs>
  91.             <tabSet idMso="TabSetChartTools" />
  92.         </contextualTabs>
  93.     </ribbon>
  94. </customUI>
自定义Excel界面如图10所示:

 
图10:自定义的Excel界面
看起来代码较多,其实并不复杂,如果大家有疑问,先不要着急,有概念就行,后面我们将慢慢详细地讲解。
示例文档下载:06.png
 
2楼
omnw
阅读完毕,留个脚印
3楼
bobbyhust
很全面 不过我想知道怎么调用自带的调色盘呢
4楼
bobbyhust
能否只调用调色盘 而只返回选择的颜色的值
5楼
chenlifeng
有后文吗?

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap