Office Fluent 功能区概述
注意
在某些 Microsoft Office 应用程序中使用 CommandBar 已被 Office Fluent 用户界面的新功能区组件取代。
Office Fluent 功能区取代了以前在早期版本的 Office 中由分层菜单、工具栏和任务窗格构成的体系。 功能区包含一个针对效率和可发现性进行了优化的更简单的界面体系。 功能区包含可提高用户效率和生产率的已改进的上下文菜单、屏幕提示、浮动工具栏和键盘快捷方式。
此外,您可以使用功能区扩展性(或 RibbonX)增强用户体验。 使用可扩展标记语言 (XML) 和多种常规编程语言之一来操作构成功能区的组件。 由于 XML 是纯文本,因此,您可以在任何文本编辑器中创建自定义文件,也可以使用您喜欢的 XML 编辑器。 由于每个应用程序均使用相同的编程模型,因此,您只需做最少调整即可重用自定义文件。 例如,可以重复使用在 Word、Excel、Access 或 PowerPoint 中创建的自定义文件。
使用 XML 标记文件自定义功能区将大大降低创建基于 CommandBars 对象模型的复杂加载项的需要。 不过,在早期版本的 Office 中编写的加载项仍将在功能区中提供,这些加载项已进行少量更改或未进行更改。 可以通过执行以下任一操作,在 Word、Excel 或 PowerPoint 中为功能区创建应用程序级自定义项:
- 在托管或非托管代码中使用 COM 加载项。
- 使用特定于应用程序的加载项,例如 .ppam 和 .xlam 文件。
- 在 Word 中使用模板 (.dotm 文件) 。
在典型方案中,COM 加载项中的代码包含从外部自定义文件或从代码本身包含的 XML 返回 XML 标记的过程。 当启动应用程序时,加载项将加载并执行返回 XML 标记的代码。 Office 针对 XSD 架构验证 XML 标记,然后将其加载到内存中,并在显示功能区之前将其应用于功能区。 菜单项和控件使用回调过程来执行加载项中的代码。
文档级自定义项使用相同的 XML 标记和具有下列扩展名之一的 Open XML 格式文件:docx、.docm、.xlsx、.xlsm、.pptx、或 .pptm。 在此方案中,创建包含 XML 标记的自定义文件并将该文件保存到文件夹中。 然后,修改 Open XML 格式容器中的部分以指向该自定义文件。 当您在 Office 应用程序中打开文档时,该自定义文件将加载到内存中并应用于功能区。 随后,命令和控件将调用文档中包含的代码以提供其功能。
现有解决方案
在 Office 2007 之前的 Office 版本中,开发人员使用 CommandBars 对象模型创建修改 UI 的 Visual Basic 代码。 在 Office 中,此旧代码在大多数情况下仍可继续工作,无需修改。 但是,对 Office 2003 中的工具栏所做的更改现在显示在 Office 的“加载项 ”选项卡上。
显示的自定义项的类型取决于加载项的原始设计。 例如,Office 将创建一个包含您向之前的菜单结构(“文件”菜单、“插入”菜单、“工具”菜单等)中添加的项的“菜单命令”组。 它还创建一个包含您向之前内置的工具栏(例如,“标准”工具栏、“格式设置”工具栏和“图片”工具栏)添加的项的“工具栏命令”组。 此外,加载项或文档中的自定义工具栏将显示在“加载项”选项卡上的“自定义工具栏”组中。
回调过程将功能添加到功能区
使用功能区扩展性,可以指定回调以更新属性并在运行时从 UI 执行操作。 例如,请考虑以下 RibbonX 标记中的按钮的 onAction 回调方法: <button id="myButton" onAction="MyButtonOnAction" />
此标记指示 Office 在选择按钮时调用 MyButtonOnAction 函数。 MyButtonOnAction 函数具有取决于所选语言的特定签名;下面是 Visual C# 中的一个示例。
public void MyButtonOnAction (IRibbonControl control)
{
if (control.Id=="myButton")
{
System.Windows.Forms.MessageBox.Show("Button clicked!");
}
}
使用 COM 加载项自定义功能区
在应用程序级别进行自定义会导致修改后的功能区显示在应用程序中,不管打开的是哪一个文档。 创建 COM 加载项主要是为了进行这些修改。 若要使用 COM 加载项自定义功能区,请执行下列操作:
- 创建一个 COM 加载项项目。 创建的外接程序必须实现所有 COM 加载项实现的 Extensibility.IDTExtensibility2 接口,以及 Microsoft.Office.Core 命名空间中的 IRibbonExtensibility 接口。
- 构建加载项和安装项目,然后安装该项目。
- 启动 Office 应用程序。 加载外接程序时,它将触发 IDTExtensibility2::OnConnection 事件,该事件初始化外接程序,就像在早期版本的 Office 中一样。
- 下一步,调用 QueryInterface 方法,这将确定是否实现 IRibbonExtensibility 接口。
- 如果实现该接口,则调用 IRibbonExtensibility::GetCustomUI 方法,这将加载 XML 自定义文件中的 XML 标记或过程中嵌入的 XML 标记,然后将自定义项加载到应用程序中。
- 自定义的 UI 现已可供用户使用。
使用 Office Open XML 格式文件自定义功能区
若要使用 XML 标记自定义 UI,请执行下列操作:
在任何文本编辑器中创建自定义文件。 添加向功能区添加新组件的 XML 标记,修改现有组件或隐藏组件。 将文件另存为“customUI.xml”。
在桌面上创建一个名为“customUI”的文件夹,并将自定义文件复制到此文件夹中。
使用自定义 UI 架构验证 XML 标记。
注意
此为可选步骤。
在 Office 应用程序中创建一个文档,然后将该文档另存为带下列扩展名之一的 Open XML 格式文件:.docx、.docm、.xlsx、.xlsm、.pptm 或 .pptx。 出于安全方面的考虑,包含宏的文件具有一个 m 后缀,并可以包含由 RibbonX 命令和控件调用的过程。
将 .zip 扩展名添加到文档文件名,然后打开此文件。
通过将文件夹拖动到文件来向容器添加自定义文件。
将 .zip 文件中的“.rels”文件提取到您的桌面。 包含 .rels 文件的“_rels”文件夹将复制到桌面。
打开 .rels 文件并添加一个行,用于在文档文件和自定义文件之间创建关系,然后保存该文件。
将 _rels 文件夹添加回容器,覆盖现有文件。
通过删除 .zip 扩展名将此文件重命名为其原始名称。 当您打开此 Office 文件时,将显示功能区(包括对功能区进行的自定义)。
XML 标记文件的常规格式
使用 XML 标记自定义功能区。 以下示例显示了可用于在 Word 中自定义功能区的 XML 标记文件的常规格式。
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
<ribbon>
<tabs>
<tab idMso="TabHome">
<group idMso="GroupFont" visible="false" />
</tab>
<tab id="CustomTab" label="My Tab">
<group id="SampleGroup" label="Sample Group">
<toggleButton id="ToggleButton1" size="large" label="Large Toggle Button" getPressed="MyToggleMacro" />
<checkBox id="CheckBox1" label="A CheckBox" screentip="This is a check box" onAction="MyCheckboxMacro" />
<editBox id="EditBox1" getText="MyTextMacro" label="My EditBox" onChange="MyEditBoxMacro"/>
<comboBox id="Combo1" label="My ComboBox" onChange="MyComboBoxMacro">
<item id="Zip1" label="33455" />
<item id="Zip2" label="81611" />
<item id="Zip3" label="31561" />
</comboBox>
<advanced>
<button id="Launcher1" screentip="My Launcher" onAction="MyLauncherMacro" />
</advanced>
</group>
<group id="MyGroup" label="My Group" >
<button id="Button" label="My Large Button" size="large" onAction="MyButtonMacro" />
<button id="Button2" label="My Normal Button" size="normal" onAction="MyOtherButtonMacro" />
</group >
</tab>
</tabs>
</ribbon>
</customUI>
此示例按以下顺序对 Word 中的功能区进行以下更改:
声明默认命名空间和自定义命名空间。
隐藏位于内置“主页”选项卡上的内置“GroupFont”组。
向最后的内置选项卡的右侧添加新的“CustomTab”选项卡。
注意
使用 id= identifier 属性创建自定义项,例如自定义选项卡。使用 idMso= identifier 属性引用内置项,例如“TabHome”选项卡。
向“我的选项卡”选项卡添加一个新的“SampleGroup”组。
将大型 ToggleButton1 按钮添加到 “我的组” ,并指定 onAction 回调以及 GetPressed 回调。
使用自定义屏幕提示向“我的组”添加 CheckBox1 复选框,并指定 onAction 回调。
将 EditBox1 编辑框添加到 “我的组” ,并指定 onChange 回调。
将 Combo1 组合框添加到包含三个项目 的“我的组 ”。 该组合框指定使用每个项中的文本的 onChange 回调。
使用 onAction 回调集将 Launcher1 启动器添加到 “我的组 ”。 启动器还可以显示自定义对话框以便为用户提供多个选项。
向自定义选项卡添加一个新的“MyGroup”组。
将大型 Button1 按钮添加到 MyGroup 并指定 onAction 回调。
将正常大小的 Button1 按钮添加到 MyGroup 并指定 onAction 回调。
使用旧版命令栏加载项
在创建 COM 加载项时,您通常需要为用户提供与加载项进行交互的方式。 在早期版本的 Office 中,使用 CommandBars 对象模型将菜单项或工具栏按钮添加到应用程序。 在此版本的 Office 中,大多数情况下,自定义应用程序继续在功能区中工作而不进行修改。 但是,使用 CommandBars 对象模型或修改菜单或工具栏(如 WordBasic 或 XML)的任何其他技术所做的更改将显示在单独的“ 加载项 ”选项卡上。这使用户能够更轻松地找到控件。
动态更新功能区
除非您指定重复此调用,否则返回控件的属性的回调通常将被调用一次。 可通过在 CustomUI 元素中实现 onLoad 回调来再次查询回调。 当成功加载 RibbonX 标记文件时,将调用此回调,然后将代码传递给 IRibbonUI 对象。
下面的代码示例获取 IRibbonUI 对象,以便可以在运行时更新控件。
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" onLoad="ribbonLoaded">
在 C# 中,在 Connect 类中编写回调。
IRibbonUI myRibbon;
public void ribbonLoaded(IRibbonUI ribbon) {
myRibbon = ribbon;
}
此功能区使用户能够灵活使用 Office 应用程序。 使用简单的、基于文本的声明性 XML 标记创建并自定义功能区。 利用几行 XML,可以为用户创建适当的界面。 由于 XML 标记位于一个文件中,因此在要求发生更改时,可以更轻松地修改界面。 通过将命令放置在用户可轻松找到它们的位置,也可以提高用户的工作效率。 最后,功能区为应用程序添加了一致性,这将减少用户在了解每种应用程序上所花费的时间。
另请参阅
- 使用托管 COM 加载项自定义 Office Fluent 功能区
- 使用 Open XML 格式文件自定义 Office Fluent 功能区
- 使用 Visual Basic COM 加载项自定义 Office Fluent 功能区
支持和反馈
有关于 Office VBA 或本文档的疑问或反馈? 请参阅 Office VBA 支持和反馈,获取有关如何接收支持和提供反馈的指南。