ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: fanjy

[分享]《RibbonX:自定义Office 2007功能区》阅读笔记

  [复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-4-10 18:20 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
XML Notepad的优点
XML Notepad提供了许多CustomUI Editor或标准的记事本没有的优点,包括:
(1)XML Notepad能够使得开发更容易,由于安装了相关的架构,有效的元素和属性能够从下拉列表中选择,也有类似于大多数Microsoft编码工具中的智能感知(IntelliSense)功能。
(2)XML Notepad有能力进行查找和替换样式搜索,这是其主要的优点。
(3)XML Notepad包含一种称之为“Nudge”的功能,将一块代码作为一个单元向上或各下移动。
(4)在XML Notepad中显示的步进布局使得容易识别嵌套的元素。
(5)因为XML Notedpad被链接到XML架构,能够实时进行有效性检查并报告所找到的错误。
XML Notepad的缺点
除了不能将文件放入编辑器或者从编辑器中获得文件外,还有下面的缺点:
(1)虽然能够从下拉列表中创建格式良好的XML,但XML Notepad实际上不会验证代码。因此应该先后使用XML Notepad和CustomUI Editor,使得代码得到完美的验证。
(2)CustomUI Editor能够生成回调标签,但XML Notepad不容易生成回调。
(3)CustomUI Editor能够使得创建自定义用户接口更容易。除了自动创建某些代码部分外,也提供了附加图片到文件中的容易的接口。但XML Notepad缺乏这项功能。
(4)如果使用XML Notepad创建customUI.xml文件来开始功能区修改,需要人工链接.rels文件。因此,建议使用CustomUI Editor创建初始的联接。仍然在XML Notepad中创建CustomUI代码的构造,然后将其复制到CustomUI Editor中,正如上面的示例所做的。

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-4-15 13:33 | 显示全部楼层
二、Microsoft Access定制
与Word和Excel文件基于新的OpenXML文件标准不同,Microsoft Access仍然是二进制文件。而为定制在所有应用程序之间使用的基本的XML实际上是相同的,二进制文件结构表明Access Ribbon定制使用与Open XML文件(例如Excel或Word)完全不同的方法装载。
咋一看,通过表定制Access的UI似乎相当复杂,但当采用定制时Access实际上是相当灵活的。
在表中存储自定义UI信息来定制UI
当在Access中处理功能区定制时最合理的开始是在表中包含XML代码。
步骤1 使用表创建Access UI更改
(1)打开Access并创建一个新的数据库。
(2)在左侧的“表1”中单击右键,选择“设计视图”。
(3)当出现提示时,命名表名为USysRibbons。
(4)确保该表有下面三个字段:
ID(自动编号的字段,作为UI记录的索引值)
RibbonName(一个文本类型的字段)
RibbonXml(一个备注类型的字段)
(5)关闭该表,当出现提示时保存。
(技巧:以前缀“USys”命名表,例如本例中的USysRibbons,确保该表将在导航窗格中隐藏,除非在“导航选项”对话框中选中了“显示系统对象”。)
(6)打开USysRibbons表并在其中添加一条新记录。在RibbonName字段中输入一个有意义的名称(如本例中的MainRibbonUI),在RibbonXml字段中,粘贴下面的XML代码:
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
    <ribbon startFromScratch="false">
        <tabs>
            <tab id="rxtabCustom"
                label="My Very Own Tab"
                insertBeforeMso="TabHomeAccess">
                <group idMso="GroupRichText">
                </group>
                <group idMso="GroupRecords">
                </group>
            </tab>
        </tabs>
    </ribbon>
</customUI>
此时,表类似下图:

(7)保存该表,然后关闭并重新打开数据为文件。重新打开后,在“Access选项”中,选择“当前数据库”选项,在“功能区和工具栏选项”中,在“功能区名称”下拉列表中将找到一个选项选择自定义功能区UI,如本例中的MainRibbonUI,如下图所示。
 
(8)单击“确定”后,将出现必需关闭该文件才能使更改生效的提示,单击“是”。重新打开数据库文件后,自定义UI应该已装载,如下图。
 
可以看出,上述方式必须经过许多步骤且要关闭并重新打开文件几次后,才能显示最后定制的功能区。
如果需要测试许多不同的UI并在它们之间切换,一种更好的方式是使用VBA来执行。虽然要花费时间编写VBA代码,但一旦编写好代码后,就能够重复使用这些代码。(本书的后面将讨论这个问题)
Access UsysRibbons警告
主要是备注的字符数量限制。
Access UI定制的其他技术
(1)在表中存储XML(前面已看到过)
(2)从外部文件中读取XML
(3)在另一个Access数据库中存储XML
(4)链接到包含XML的Excel工作表
此外,如果遇到字符限制问题并确定要在USysRibbons表中存储XML代码,也可以使用VBA。

[分享]《RibbonX:自定义Office 2007功能区》阅读笔记

[分享]《RibbonX:自定义Office 2007功能区》阅读笔记

[分享]《RibbonX:自定义Office 2007功能区》阅读笔记

[分享]《RibbonX:自定义Office 2007功能区》阅读笔记

[分享]《RibbonX:自定义Office 2007功能区》阅读笔记

[分享]《RibbonX:自定义Office 2007功能区》阅读笔记

TA的精华主题

TA的得分主题

发表于 2008-4-17 16:18 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-4-18 22:27 | 显示全部楼层

第三章 理解XML
这里的学习内容包括如何创建访问和操纵内置功能区所需的核心XML框架。
什么是XML,为什么需要XML
XML是Extensible Markup Language的缩写,最初由W3C发布。XML不是编程语言,它缺乏执行操作的任何机制。XML是一组规则,其意图是简化跨平台的数据共享。
Office 2007文件以Microsoft的OpenXML格式配置,是包含几个XML文件的一个简单的压缩容器。
(1)XML节省空间。
(2)结构化数据后,能够快速地被索引,因而能使其他程序为特定的字符串或其他项目搜索索引。
(3)对于开发者来说,能够链接某个应用程序里的XML架构来验证XML而确保像意料中的那样工作。例如前一章中介绍的CustomUI Editor和XML Notepad,如果没有这些架构,CustomUI Editor将不能验证代码,XML Notepad不能提供智能感知功能。
现在我们关心XML,是因为XML是Ribbon的核心。要定制Office 2007用户界面,必须编写XML代码,虽然VBA在定制中也能起到关键的作用,但它不是必需的。而XML在定制中几乎总是必需的,但也有例外。例如弹出式菜单和一些出现在加载项选项卡中的VBA定制。
本章下面的内容将集中介绍如何从头开始创建XML框架,引导您通过必需的XML创建和修改功能区。
基本的背景知识
即,XML的构成及如何编写XML。
1、标签(Tags)
例如,下面的代码片断:
<group id=”rxgrpTest”>
<button idMso=”Bold”/>
<button idMso=”Italic”/>
<splitButton id=”rxsbtnTest”>
    <button idMso=”Underline”/>
</splitButton>
</group>
看看上面代码的结构,注意<、>和/号的使用,指示了标签的开始和结束。例如开始的<group>标签和结束的</group>标签之间的内容包含了在功能区中显示的组。
此外,注意到按钮的代码,其中/号位于标签的结尾,不需要单独的标签来关闭元素。
其实,上面演示了使用标签的两种方法。您需要理解并使用这些方法来创建自定义UI的结构。如下面的表格所示:
表:开始和关闭标签的形式
开始和关闭标签分开        <element attribute(s)=”Value”></element>
开始和关闭标签未分开      <element attribute(s)=”Value”/>
(1)在XML中,每个标签至少包含一个元素和通常至少一个属性
(2)在处理代码时,涉及的每个项目都被称作对象(object)。例如,对象包括功能区中的组、按钮、复选框、甚至是菜单。当某控件有子控件时,将该控件称为父控件。
注意,父对象通常(但不总是)有不同类型的子对象。选项卡有一个或多个组对象作为子对象,并且一个组可能有按钮、复选框和动态菜单子对象的组合。其中,dynamicMenu对象除了其他子对象类型外,还有dynamicMenu子对象。某些父对象甚至有完整的子对象群,称之为集合(collection)。
每个子对象也能够成为它自已的子对象的父对象。每个子对象控件必须嵌套在其父对象的开始和结束标签中。
(3)为了创建格式良好(有效的)XML,必须理解:
所有标签,无论是元素还是必属,都区分大小写,即SPLITBUTTON元素与splitButton元素不相同。
属性值必须被放置在单引号或双引号内。
在父元素中的子元素的嵌套必须准确。每个开始标签必须与其结束标签相匹配。
2、元素(Elements)
当处理功能区的XML时,可以看到每个元素指定功能区控件(或结构)的特定部分。
group是一个元素,而<group>是一个标签。因此,标签实质上是通过<和>符号识别代码块的标志。
每个标签必须包括一个且唯一一个元素。此外,元素总是XML标签的第一部分。告诉编译器希望开始处理或停止处理的特定项目。
3、属性(Attributes)
标签告诉编译器要处理的对象,而属性告诉编译器该对象的属性,包括对象的名称、在屏幕中显示的标题以及是否对象可见。
与元素不同的是,在所给标签内可以为对象设置多个属性。例如,下面的代码片断显示了带有多个属性的标签示例:
<button id="rxbtnProtectAll"
    size="normal"
    label="Protect All Sheets"
    imageMso="ReviewProtectWorkbook"
onAction="rxbtnProtectAll_click"/>
上面的代码提供给按钮一个唯一的id并指定了大小、标签和图像,此外也提供了一个onAction回调签名,当单击该按钮时启动相应的VBA过程。
(1)id属性
在创建额外的对象之前,需要讨论如何在代码中识别这些对象。而id属性用于识别在自定义XML代码内指定的对象,为其提供名称,使得后面能够使用该名称引用该对象。这是引用对象的唯一方法。在下列容器中每个对象都需要id属性:
contextualTabs
officeMenu
qat
tabs
id属性有几种不同的类型并且每一个都有不同的使用。下表描述了id属性的不同类型及其主要用途。
表:id属性表
属性           何时使用
id            用于唯一地标识控件。如果动态地装载项目,其属性将被赋值
idMso         用于唯一地标识内置控件、选项卡、命令,等等。使用该属性与内置对象交互
idQ           用于跨共享的命名空间引用对象。
为了识别某对象,简单地在开始标签中添加id属性,例如:
<tab id="rxtab"
    <!-- Other tab attributes would go here! -->
</tab>
同样地,如果试图引用内置的字体(Font)组,使用下面的XML:
<group idMso="Font"
    <!-- Other group attributes would go here! -->
</group>
注意,所有的id和idQ属性都是唯一的。如果使用已存在的id,或者由Microsoft保留的id,将会导致错误并阻止UI装载。
为了避免与内置的控件相冲突,建议所有自定义控件使用标准的命名约定加上前缀。
(2)label属性
即用户能够在屏幕上读取的内容,不必是唯一的,但应该是合乎逻辑、简洁明了且一致。Label属性为用户提供清晰的向导。要添加标签,如下面的代码:
<tab id="rxtab"
    label="My Custom Tab">
</tab>
4、布置XML代码的技巧
使用硬回车或制表符将代码分成逻辑块,容易阅读和解释。下面是一段示例代码,更容易阅读:
<group
    id="rxgrp"
    label="My First Group">

    <button
        id="rxbtn1"
        imageMso="Italic"
        label="Large size button"
        size="large"
        onAction="rxbtn1_Click"/>

    <button
        id="rxbtn2"
        imageMso="Bold"
        label="Normal size button"
        size="normal"
        onAction="rxbtn2_Click"/>

    <button
        id="rxbtn3"
        imageMso="WrapText"
        label="Normal size button"
        size="normal"
        onAction="rxbtn3_Click"/>

    <button
        id="rxbtn4"
        imageMso="ConditionalFormatting"
        label="Normal size button"
        size="normal"
        onAction="rxbtn4_Click"/>
</group>
5、在XML代码中创建注释
注释能够使自已或他人清楚代码的作用。放置注释的方法是:在开始处放置一个小于号(<),然后输入感叹号(!),随后是两个连字号(--),结束注释需要两个连字号加一个大于号(>)。
<!-- This is a comment -->
如果注释很长,可能需要几行,如下所示:
<!--
This is a comment that has become extremely long.Since you decided that
you do not want to have short,one line comments to describe what you
are doing, you let it run over several lines.
-->
在<!--和-->之间的被当作连续的注释。
此外,不能够将注释放置在一块开始的XML代码的中间。下面的示例来进行演示:
<!-- This is my first button -->
<button id="rxbtn"
    label="This is my button"
    imageMso="HappyFace"
    size="large"
    onAction="rxbtn_Click"/>
或:
<button id="rxbtn"
    label="This is my button"
    imageMso="HappyFace"
    size="large"
onAction="rxbtn_Click">
<!-- This is my first button -->
</button>
上述两段代码都是正确的,但下面的代码会产生错误:
<button id="rxbtn"
<!-- This is my first button -->
    label="This is my button"
    imageMso="HappyFace"
    size="large"
    onAction="rxbtn_Click"/>
上面的问题在于注释被插入到了未关闭的代码块中。

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-4-19 10:21 | 显示全部楼层
核心的XML框架
每个定制都以customUI和Ribbon元素开始,取决于是否决定从头开始创建自已的UI、对内置的控件顺序作小的调整、或者创建两者的组合。
除了已经列出的元素外,也将研究tabs、tab和group元素,几乎在所有的定制中都将使用这些元素。

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-4-19 10:22 | 显示全部楼层
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

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-4-19 10:23 | 显示全部楼层
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

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-4-19 10:25 | 显示全部楼层
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元素是一个容器元素,用于包含特定引用的(或创建的)选项卡控件。

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-4-19 10:26 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
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对象可包含同组元素,例如内置的剪贴板组或者自已制作的自定义组。

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-4-19 10:27 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
内置的选项卡
当在功能区中处理选项卡时,有两种类型的选项卡:内置的和自定义的。
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中打开该工作簿文件,此时“开始”选项卡没有了。
此时,关闭该工作簿文件,将使“开始”选项卡重新出现。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-12-22 02:29 , Processed in 0.040010 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表