使用RibbonX扩展Excel 2007

文章参考:Eric Faller利用您自已的功能区选项卡和控件扩展2007 Office System
在2007 Office System中,使用了全新的用户界面,其用户界面的模型被称为RibbonX。通过使用XML来指定UI的内容和结构,并在其背后使用动态回调机制,使得RibbonX将UI设计与代码编写分开来。
在Office 2007中,仍支持以前在Office 2003中编写的加载项,但它们均显示在“加载项”选项卡中。“加载项”选项卡包含三个组:“菜单命令”、“工具栏命令”和“自定义工具栏”,“菜单命令”和“工具栏命令”组分别包含添加到原先版本的内置菜单和工具栏中的自定义控件,而“自定义工具栏”组将任何自定义工具栏水平显示。
RibbonX中的新功能
RibbonX使得Office编程可以基于XML进行UI声明,即创建指定UI外观的XML文件,而不再需要使用一系列对象模型调用来编写构建UI的复杂代码。这样,使得UI设计与代码相分离,UI设计者不需要为了偿试新设计而知道手动更新代码的方法。而且,Office可以自动清理加载项的UI,因此不必写入任何清理代码。此外,有效的XML文件需要包含xmlns命名空间声明,用于标识文件所遵循的架构版本,这样RibbonX便能得知特定加载项所针对的Office版本,并能在版本之间有差异时正确映射UI。
CommandBars对象模型可视为使用“推”模型,其中加载项会通过设置对象模型中的各种属性将所有UI数据推入Office。UI中控件的每个属性必须在启动时由加载项明确设置,即使此控件所在的菜单或工具栏从未显示。如果涉及到加载大量图像文件,则会对性能造成极大影响。
RibbonX使用“拉”模型,其中Office仅在需要时将数据从加载项中拉出。加载项提供回调,例如getLabel或getImage,而不再设置像CommandBar.Name或CommandBarButton.Picture之类的属性。需要知道某个控件的标签或图像时,Office便会调用这些回调。
拉模型的主要优点在于性能优势。在2007 Office版本中,应用程序启动时可能大多数加载项的UI都不可见,尤其是当加载项在“加载项”选项卡中添加了自已的顶级选项卡或组时。因此没有必要立即加载这些控件的所有图像,否则会导致性能急剧下降。仅需在用户单击该选项卡时加载图像。RibbonX会尽可能延迟回调的调用,以分摊整个会话中的资源加载成本,并在即便安装了若干加载项的情况下,保持Office应用程序快速启动。
如果Office确定调用这些回调的时间,您可能想知道如何动态更改控件属性。RibbonX缓存回调的返回值,并且在加载项使这些返回值无效之前不会进行回调。加载项可以通过IRibbonUI接口的Invalidate和InvalidateControl方法来实现此目的。一旦控件的属性失效,RibbonX即会知道在下次需要时进行回调。如果此控件当前显示在屏幕上,它将立即回调并更新值。如果它没有显示在屏幕上,则RibbonX会等到它出现在屏幕上时才进行回调。
RibbonX提供许多不同的控件类型以用于扩展,如下面列出的这些控件类型。
RibbonX控件:(1)按钮;(2)toggleButton;(3)editBox;(4)菜单;(5)comboBox;(6)dropDown;(7)dialogBoxLauncher;(8)库;(9)splitButton;(10)标签;(11)checkBox;(12)组;(13)选项卡;(14)superTip
CommandBars只能使用此列表中的前6项。现在有许多新UI选项可供RibbonX加载项使用,其中,最引人注目击者的新控件类型是包括按钮和下拉菜单的splitButton以及展开以显示图像选择的库。这两类控件广泛应用于2007 Office版本中,目的是减少UI混乱并方便预览可见操作。Microsoft鼓励加载项编写者使用这些新控件类型来为自已的UI提供相同的效果。
StartFromScratch模式
许多开发人员会使用Office作为平台来构建自已的应用程序,在运行时,这些应用程序会删除所有的内置Office UI并使用自已的UI进行替换。在以前的Excel版本中,必须编写大量的代码来处理Excel的内置菜单。在Excel 2007中,RibbonX引入了StartFromScratch模式,只需一行XML就可以隐藏Office UI。在标记上设置StartFromScratch=”true”,将执行以下操作:

  • 隐藏所有的主要内置选项卡(但不包括上下文选项卡集)
  • 隐藏快速访问工具栏的内容
  • 允许加载项将自已的按钮添加到快速访问工具栏
  • 隐藏Office菜单上除“新建”、“打开”和“保存”以外的所有命令

注意,如果用户在多文档界面(MDI)模式下编辑多个文档,如果文档之一启用了StartFromScratch模式,那么用户在该文档与其他文档之间切换时,所有UI都将自动隐藏或显示,而不需要编写任何代码。
命令禁用和重用
Office加载项的另一个常见用途是禁用内置命令。RibbonX很容易实现这样的操作:

<Command idMso=”Bold” enabled=”false” />

这将禁用在UI任何位置出现的”Bold”(粗体)按钮。如果加载项要有条件地禁用命令,则可以使用getEnabled回调。
可以使用RibbonX来重用在单击时执行操作的任何按钮(但不能重用较复杂的控件类型,例如库或组合框)。下面的代码重用“Save”(保存)按钮:

<Command idMso=”Save” onAction=”MySaveFunction” />

当单击“Save”(保存)时,加载项的MySaveFunction将运行,从而执行自已的操作,并可选择是否允许内置Save函数执行。
此外,Save按钮的所有副本(位于Office菜单和快速访问工具栏上)将由此行XML重用,并且如果个别文档正在执行重用,则此操作不会应用于其他打开的文档(除非文档被加载为全局模板或加载项)。
Open XML文件格式
Open XML文件格式包含以各种方式彼此相关的一批文件的压缩包。可以手动编辑.zip文件以插入Ribbon XML和图标图像,当然,可以使用工具来方便地执行这项操作,例如“Custom UI Editor”。


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

留下回复