Microsoft Office

指南自定义 Office 2007 功能区

Stephanie Krieger

概览:

  • Office Open XML 文件的体系结构
  • 创建自定义功能区选项卡的步骤
  • 向功能区添加 VBA 宏

内容

什么被涉及创建自定义功能区?
您是否需要哪些工具开始?
创建自定义功能区选项卡
将 customUI 文件添加到 ZIP 包
向功能区添加 VBA 宏
获取创造性
共享自定义

管理 2007 Microsoft Office 系统环境、 您是 Microsoft Office 电源用户喜欢自定义在的环境的还是您编写 Visual Basic for Applications (VBA) 宏,您需要查看只是多么简单也可以是自定义 2007 Office 系统文档、 模板,和加载功能区。 您需要 Windows 记事本。 此文章中, 我将向您展示如何。

要跳转到创建自定义用户界面的右侧,我正在进行某些假设您熟悉与 Office Open XML 格式和 VBA。 您可能已经知道 Office 打开 XML 文档是组成 XML 文件 (称为文档部件)、 其他文件 (如任何媒体文件文档中包含) 和组织所有这些元素的文件夹的少数的 ZIP 包。 您可能可以看到 Office (即使您永远不会实际已编写它) 中打开 XML 标记或类似。 因此,您已经知道 Office Open XML 都相当普通的语言编写,这就是您不必将开发人员获得。 要自定义功能区,请注意我将还讨论 VBA 本文由于将可能需要将添加您自己的宏 (而不只是内置命令)。

在开始自定义功能区之前,如果您还不熟悉 Office Open XML 文档,请将该结构查看:

  1. 创建一个简单的 Office Word 2007 文档,保存该文件,然后关闭它。
  2. 为新文档文件扩展名更改为.zip 中。
  3. 打开的 ZIP 包,然后看周围。 首次打开包时它应该看与图 1 非常相似。
  4. 打开 _ rels 文件夹,并可以看到一个名为.rels 文件。 这将定义下面看到的顶级文档组件之间关系。 我将正在编辑下文中的.rels 文件。
  5. 现在打开 Word 文件夹,; 您会看到它包含类项为 document.xml (即是主文档正文)、 styles.xml 和可能熟悉的其他部分。

fig 01.gif

图 1 的 Office Open XML 文档 </a0>-结构

您还可能看到某些其他的文件和文件夹名称,具体取决于内容文件中。 是例如您看到媒体文件夹如果文档包含图片、 声音的文件或其他媒体。

什么被涉及创建自定义功能区?

可以使这比我要讨论更复杂。 但我使用任何任务的最简单的解决方案的一大风扇。 若要将到 2007 Office 系统 Word、 Excel 或 PowerPoint 文件中功能区自定义所要做是:

  1. 创建一个名为 customUI.xml 的文件并为您的自定义文件中添加标记。
  2. 创建名为 customUI 文件夹、 将您的 customUI.xml 文件放在有,,然后放置到文档的 ZIP 包的顶层的文件夹。
  3. 打开指定.rels 文件并向其中告知您的自定义功能区的文档中添加一行标记。
  4. 打开文档,并在您创建的美 bask。

这就是的一切就是它并为我将展示如何执行所有的结束本文。

您是否需要哪些工具开始?

您可以编写使用 Windows 记事本 customUI.xml 文件。

还有两个下载应获取从 Microsoft Web 站点参考: 第一个是在" 2007 Office System Document: 的控制 ID 的列表",功能区控件 ID 工作簿的所有内置的命令包含在功能区启用了 2007 Office 系统程序。 第二个下载后," 2007 Office System 外接程序: 图标库",这是一个包含所有 Office 2007 内置的功能区图标的 ID 驱动宏的工作簿。

您已经编辑了软件包的内容后,您需要文件扩展名从.zip 更改为其原来的扩展名。 但是您没有保存更改扩展名为.zip 每次编辑基础程序包的时。 相反,您可以使用一个将识别为 ZIP 包 Office 打开 XML 格式文档而不过在更改扩展实用程序。 有是最少一些。 我喜欢的一个开源选项是 7-压缩. 安装后,则只需右键单击 Office 打开 XML 格式文档,指向 7-Zip,然后单击打开存档。 可以甚至包中直接的编辑 XML 文档部件,并存档实用工具将提示您保存所做的更改后更新包。

在开始之前,没有一件事要做。 还有 Office 应用程序可以启用提示您,如果您打开一个包含用户界面错误的文件的设置。 在某些情况错误禁止自定义功能区显示,但不是始终因此有助于获得一条警告立即。 您看到该错误消息告诉您错误是位于,它也可以是一个 timesaver。 您可以启用此设置在 Word、 Excel,或 PowerPoint (或甚至访问),并它会将应用到所有。

  1. 在 Word、 Excel 或 PowerPoint,中单击 Microsoft Office 按钮,然后,菜单底部单击 <program> 选项。
  2. 在高级选项卡上滚动到要查找常规设置底部。 选中标记为显示加载项用户界面错误,框,然后单击确定。

现在继续进行并打开按照本文的记事本。 记事本是您将需要按照本文的其余部分。 但是,如果您有 Microsoft Visual Studio 2008 方便,不是使用担心。 您不必编写任何托管的代码 (或甚至知道哪些托管代码) 获得一些非常凉爽编辑 Office 打开 XML 文档部件中使用该软件的优点。 我使用 Visual Studio 2008,因为 Visual Studio 知道在 customUI 架构,因此它提供 IntelliSense 菜单和自动语法检查。 这可以节省许多时间,而且时您学习术语,IntelliSense 菜单都非常方便。

创建自定义功能区选项卡

功能区在每个适用的 2007 Office 系统应用程序包含多个选项卡、 每个选项卡都包含几个的组组和每个组可能会显示几个命令。 许多类型的控件用于显示包括按钮、 库、 拆分按钮、 菜单,和其他的命令。

可以自定义任何内置选项卡 (以及 Microsoft Office 按钮菜单),创建您自己的自定义制表位,或甚至从头您自己的完全自定义功能区。 当然,我无法探讨所有可能的类型,一个本文的功能区自定义的但我将介绍非常大量可执行的任务。

我将首先创建一个简单的自定义选项卡,显示运行内置命令的几个控件的 Word。 在这的种情况下我需要创建的用户的文档模板,并想要开始一组命令我知道用户会频繁地需要的自定义功能区。 当然,我可以置于其模板的快速访问工具栏无需编写任何 XML,但我希望这些命令是大小相同功能区和并行的一些其他自定义命令,我会将其添加到在选项卡上的任何一位。 图 2 显示了新的自定义组的外观。 以下是 customUI.xml 我来创建它的标记:

<?xml version="1.0" encoding="utf-8"?>
<customUI xmlns="https://schemas.microsoft.com/
office/2006/01/customui">
<Ribbon>
<tabs>
<tab id="customTab" label="My Custom Tab">
<group id="customGroup1" 
label="Helpful Tools">
  <gallery idMso="QuickStylesGallery"
  visible="true" size="large" />
  <button idMso="PasteSpecialDialog"
  visible="true" size="large" 
  imageMso="Paste"/>
  <button idMso="CrossReferenceInsert"
  visible="true" size="large" label="Insert a
  Cross-Reference" />
</group>
</tab>
</tabs>
</Ribbon>
</customUI>

fig 03.gif

图 2 : 简单自定义选项卡

让我们看 XML 结构在此标记。

  1. 如果您打开任何 Office 打开 XML 文档部件,您看到显示 (请参见红色标记) 第一行。 格式所使用的一个标记。 只是键入它所示它。 该第二行是定义的数据类型在此处提供的标记。 这是 customUI 标记,且带下划线的属性 (xmlns) 为命名空间定义,指示正在使用的架构。 严格按照再次,只是这里的形式键入您看到。
  2. 请注意此处显示的标记的许多都成对 (请参见蓝色标记)。 您有靠近顶部的开始标记: customUI,跟功能区,跟选项卡的功能区上的所有选项卡集引用、 选项卡 (引用到您正在处理各个选项卡),和组 (组创建)。 然后下,数据新组中的命令, 看结束标记按相反的顺序为每个。 成对的标记被嵌套在其他。 请注意,每个标记放在 angled 括号、 每对标记的结束标记之后在打开的括号开始使用斜杠和每个属性跟随立即等号,然后它在引号内的值。 如一个丢失的斜杠一个小型的语法错误可以使用户界面自定义显示。
  3. 则此自定义组中的命令将每个独立标记中 (请参见绿色标记)。 因为所有数据都需要该命令为此标记中,不需要结束标记有嵌套它们没有其他标记。 因此,指示标记的数据的结束,斜杠提供每个这些标记的末尾。 请注意,但是,不是所有的功能区控件独立标记。 对于是实例如果我创建了自定义库要我添加其他控件,将需要成对的标记才能嵌套其他标记。 同样,自定义菜单控件是可以在其中添加按钮和其他控件的成对的标记。

确定让我们看一些更接近。 您将添加到自定义 UI 的结构的每个元素需要被唯一地标识一种方法:

<tab id="customTab" label="My Custom Tab">
<group id="customGroup1" label="Helpful Tools">

请注意对于我自定义的选项卡标记和组的标记我创建每个具有 ID 属性。 可以只是有关您喜欢的任何命名 (但不是的能含有空格请),只要的唯一文件中。 在仅其他属性我为这些标记的每个自定义为它的标签。

由于此自定义的选项卡上,三个命令是内置 Office 2007 命令,我需要为标识符,而不是 ID 使用 idMso 属性:

<gallery idMso="QuickStylesGallery" visible="true" size="large" />
<button idMso="PasteSpecialDialog" visible="true" size="large" imageMso="Paste" />
<button idMso="CrossReferenceInsert" visible="true" size="large" label="Insert a Cross-Reference" />

Word 功能区控件工作簿中,我发现这些控件 ID。 有几件事值得注意有关这些标记和属性。

第一个命令是一个库,其他两个按钮。 我知道这因为我已经使用该的功能,但还可以查找在功能区控件工作簿中此信息对于每个程序 (命令类型权限旁边列出其 ID)。

可见的属性是 True 默认情况下的那么从技术上讲您不必将其,添加但是一个好主意。 您可能希望控制的命令在可见性。

此大小命令,另一方面,默认为"正常"(其类似,是例如剪切、 复制,或格式刷命令在 Word、 Excel 和 PowerPoint 开始选项卡上)。 如果您希望用于显示大命令,必须将此属性。

如果您在 2007 Office 系统程序之一中看一看选择性粘贴命令,可以看到它的默认情况下正常大小命令。 显示这种方式的某些命令有仍看起来正确显示大时, 的图标,但这不是之一。 如果将此控件的自定义图标,看模糊。 因此,我添加图像粘贴命令粘贴上看到的拆分在开始选项卡上的按钮。 这是您在选择性粘贴命令的按钮标记中看到该 imageMso 属性。

我还选择根据按钮标记为该控件中看到有是些调整交叉引用的标签。 默认情况下的只是的交叉引用但我想要添加有点更多信息,因为它不出现在选项卡上,提供上下文。

将 customUI 文件添加到 ZIP 包

如果尚未,创建名为 customUI 的一个文件夹,并放置在该 customUI.xml 文件,现在是时间。 我要将此 customUI 文件夹添加到 Word 模板。 因为我还希望此模板,我会将其添加到功能区中包含宏,我为.dotm 文件 (启用了宏的 Word 2007 模板) 中保存我的模板。 请记住,您可以添加自定义 UI 使用此处显示到任何 Office 2007 的相同步骤打开 XML 格式化 Word、 Excel 或 PowerPoint 文档、 模板,或加载项文件。

打开 Office Open XML 包的您要添加您 customUI 文件夹和放置在鼠标右键。 它是最高级别与 _ rels、 docProps,and 特定于程序的文档文件夹中 (即,Word、 xl 或 Ppt,根据您自定义文档类型),和 [Content _ Types].xml 文件。

立即打开 _ rels 文件夹,然后打开指定.rels 文件。 (如果要不可以编辑文件,而包中的一个实用程序使用可能必须复制它出包的第一次)。 在此文件,您可以看到类似于 customUI.xml 文件中的嵌套的结构。 有是一组关系成对的 < … Relationships > 标记中为每个关系的独立标记。 每个关系 > 标记包含三个属性: 该 ID,该的类型和目标。

将您 customUI 内容的以下标记添加到确保其范围 < … 关系 > 的组的开始和结束标记之间该.rels 文件中:

<Relationship Id="rId5" 
Type="https://schemas.microsoft.com/office/2006/relationships/
ui/extensibility" Target="customUI/customUI.xml"/>

如果.rels 文件已经包含与 ID rId5 关系标记,使用一个不同的数值。 ID 必须是唯一的。

您添加您的文件在文件的信息应查找的内容类似的后显示 图 3 中。 如果您在作为一个编辑器中使用记事本,并要查看使用结构 (如 图 3 中所示) 将标记,可以在 Internet Explorer 中打开该文件。

fig 05.gif

图 3 我编辑的.rels 文件

如果您有复制出 ZIP 包对其进行编辑,复制的.rels 文件备份中。 然后在 Word 中打开该文件,并检查您的工作。 新选项卡 (名为"我自定义选项卡"如果您使用我的示例) 显示在功能区的末尾。

向功能区添加 VBA 宏

是易于将内置命令添加到功能区,但如果您需要添加您自己的工具? 以下是您做。

打开该模板文件,然后按 Alt+F 11 打开 Visual Basic 编辑器 (VBE)。 如果您还没有已经这样做,请在在左侧 VBE 项目资源管理器中选择您的模板。 然后,在插入菜单上单击模块,将在代码模块添加到模板。 然后,可以添加一个简单的消息框如 图 4 所示。 (当然,您可以使用所需的任何宏)。

fig 06.gif

图 4 添加模板的代码模块

更多的 VBA 体验和人员要获取其,请注意有我们实际上应添加以下最佳做法的其他元素。 但没有这些元素是关键任务手头 (这将此宏添加到功能区),因此我将跳过为简单起见这些任务。

离开 VBE 之前, 没有将添加到此宏,以便在功能区将识别它一件事。 您必须将其声明为功能区控件。 要进行的中, 只添加过程名的括号内的以下文本:

ByVal Control as IRibbonControl

现在,宏如下所示:

Sub TakeABreak(ByVal control As
  IRibbonControl)
MsgBox "Go get some coffee! You deserve it."
End Sub

注意将宏名,因为您需要的添加到 customUI.xml 文件。 保存然后关闭该模板。

可以添加以下的标记,只要您想在您自定义选项卡上,现在您的 customUI.xml 文件中添加该命令。 我创建了此命令我要放在第一个组后面的一个新组。

<group id="customGroup2" label="Break Time" >
  <button id="myBreak" visible="true"
  size="large" label="Take a Break"
  imageMso="HappyFace" 
  onAction="TakeABreak" />
</group>

当您添加此内容时, 一定要将其添加上一组和为自定义选项卡在结束标记之前在结束标记之后。 或者,如果您不想创建一个新组可以只添加按钮信息它自己的标记中您现有的组中。

有值得注意以下几件事。

  • 请记住,是否您创建一个新组,需要自己的唯一标识符。 我还授予此组唯一的标签。
  • 我新按钮使用自定义的命令,因此在使用而不是 idMso id 属性。 除了您知道创建第一个组的属性,我已经添加了一个 onAction 属性。 这是我用来调用我的宏的该属性。 该属性的有效值是宏名称。
  • 您看到的任何 Office 大写打开 XML 标记名称、 属性名称和内置的 2007 Office 控件名称作为语法的任何其他一部分是通常一样多的要求。
  • 我图标库工作簿中选择 HappyFace 图标。

添加新按钮后,更新 ZIP 软件包中的 customUI.xml 文件。 无需编辑包中的任何其他文件,只需打开您的模板。 (您可能需要执行此操作时启用宏)。 然后请继续执行并单击您的新按钮试一试的宏。

获取创造性

您有跌的基础知识,并使用内置和自定义的命令创建自定义选项卡后, 可以非常更只通过添加不同的属性中进行执行。 下面是一些示例。

如果您希望在选项卡属于某处而不在功能区的末尾,指定在选项卡上的开始标记,与属性 insertBeforeMso。 是例如将选项卡只是已在功能区中创建第一个选项卡,将其放在开始选项卡之前就像这样:

<tab id="customTab" label="My Custom Tab" 
insertBeforeMso="TabHome">

适用的程序,您可以在功能区控件工作簿中找到任何内置选项卡的正确的名称。

要添加到内置的选项卡的一组,只是 customUI.xml 文件添加标记,该选项卡。 没有关系的选项卡显示在 customUI 文件中 ; 中的第一次只是一定要正确嵌套在新的标记。 </tab></tabs>是例如如果您将它放在自定义选项卡之后,它应属于结束标记之后您自定义选项卡和组的标记在结束标记之前 (之间和)。 此处我已经向插入选项卡添加中断时间组:

<tab idMso="TabInsert">
<group id="customGroup2" label="Break
Time" insertAfterMso="GroupInsertTa
bles" >
  <button id="myBreak" visible="true"
  size="large" label="Take a Break" 
  imageMso="HappyFace"
  onAction="TakeABreak" />
</group>
</tab>

如果所创建唯一的模板的特殊要求,并且您想要为用户提供仅自定义命令,可能要创建该模板的完全自定义功能区。 为此,customUI.xml 在功能区 (<ribbon> 标记) 的开始标记中,将只添加属性 startFromScratch ="true",如下所示。

<ribbon startFromScratch="true">

若要添加自定义命令按钮之外,请语法总是相同。 如果要向其添加拆分按钮菜单,是例如只需继续成对的标记的规则,并且考虑和此自定义中的嵌套标记将非常简单。 说要所有已添加的命令为止放到一个拆分按钮菜单,而不是单独的按钮。 请尝试此操作:

<splitButton id="customSplit1" visible="true"
size="large">
  <menu id="customMenu1" visible="true" >
    <button id="myBreak" visible="true"
    label="Take a Break" imageMso="HappyFace"
    onAction="TakeABreak" />
    <button idMso="PasteSpecialDialog"
    visible="true" imageMso="Paste" />
    <button idMso="CrossReferenceInsert"
    visible="true" label="Insert a 
    Cross-Reference" />
    <gallery idMso="QuickStylesGallery"
    visible="true" />
  </menu>
</splitButton>

结果如 图 5 所示。 请注意菜单中的第一个按钮命令将成为拆分按钮默认。 这就是为什么我重新排列要在顶部我笑脸命令。 拆分按钮必须是一个按钮控件。 第一个快速样式 (以使用剪辑库控件) 是否它已被跳过拆分按钮控件和该控件曾第一个按钮控件菜单中。

fig 08.gif

图 5 一个 Single 类型的值的拆分按钮菜单

这是示例的可以执行自定义 UI。 您可以找到大量帮助联机考虑这进一步向一个命令中添加您自己的自定义图像,或使用 VBA 宏有条件地控制某些命令的行为。 签出, Office 开发人员中心 在 MSDN 的想法。

要有条件地控制功能区行为上搜索帮助,查找属性如 getVisible 和 getLabel。 您已经知道要功能区以查看如何行为 (引用为回调) 上的方向的宏的该属性之前使用 get 前缀。

共享自定义

您可以保存用户界面自定义任何 2007 Office 系统的 Word、 Excel 或 PowerPoint 文档、 模板,或加载项中。 如果要安装您的自定义用户界面,因此无论文档或正在使用的模板可用? 这也是非常简单。

在 Word,只保存.dotm 文件包含您的宏和相关的 customUI 回 Word Startup 文件夹,并且 Word 启动时自动加载它。

在 Excel 或 PowerPoint,您需要保存作为外接中, 包含在宏和自定义 UI 设置文件,然后加载该加载项。 在适用的程序 (启用宏如果系统提示) 中打开该文件,,然后使用另存为命令副本保存为加载项。 (加载项文件类型 Excel 2007 加载项是.xlam 和对于 PowerPoint 2007 中,它是.ppam。 当您使用此格式保存文件时,它的自动保存在 Microsoft AddIns 文件夹中。 现在将其加载通过您通过在 <Program> 底部找到 <Program> AddIns 对话框选项,AddIns 选项卡。 可能提示您启用宏在加载外接 in–just 第一次单击启用宏。 之后,它应自动加载该程序打开时。

Stephanie Krieger 是 Microsoft Office System MVP 和两个的本书的作者 Advanced Microsoft Office Documents 2007 Edition Inside OutMicrosoft Office Document Designer。 她也经常写入,提供,并为 Microsoft 创建的内容。 您可以访问 Stephanie 通过自己的博客 arouet。 net.