本类文章的标签为 ‘XML’


细品RibbonX(14):核心的OpenXML架构元素

1 颗星2 颗星3 颗星4 颗星5 颗星 (1 人投票, 平均: 5.00 out of 5)
Loading ... Loading ...

在编写自定义Office 2007界面的XML时,总是以customUI元素开始,紧接着是Ribbon元素。下面我们将详细介绍customUI元素、Ribbon元素,以及tabstabgroup元素,在自定义界面时几乎总是要使用这些元素。

customUI元素

要创建格式良好的XML文档,必须包含一个且唯一一个“最外层的元素”,嵌套所有其他的元素。这个最外层的元素被称作“根元素”。对于功能区定制来说,该元素就是customUI元素。这意味着customUI标签里嵌套着所要使用的所有其它标签。

现在,打开CustomUI Editor,输入下面的代码:

<customUI xmlns=http://schemas.microsoft.com/office/2006/01/customui>

    <!– All other instructions go here –>

</customUI>

然后,单击“validate”按钮验证代码。注意,验证代码是一个好习惯。

1customUI元素必需的属性

每个customUI标签必须指定xmlns属性,如下表1所示。

1customUI元素必需的属性

静态属性

允许值

xmlns

http://schemas.microsoft.com/office/2006/01/customui

2、带有回调签名的可选的静态属性和动态属性

也可以在customUI标签中添加下表2列出的部分或全部属性。当然,这些属性不一定非得在XML中使用,随您的需要而定。

2customUI元素的可选属性

静态属性

动态属性

允许值

默认值

动态属性的VBA回调签名

xmlns:Q

(none)

11024个字符

(none)

(none)

(none)

onLoad

11024个字符

(none)

Sub onLoad(Ribbon as IRibbonUI)

(none)

loadImage

11024个字符

(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元素相同的<>括号内,对其他可选属性也是如此。并且,可以每行列出一个属性,无须包括连续或行中断的代码。

3customUI元素的子对象

customUI标签是一个容器,包含其他对象。实际上,customUI仅能包含下列元素:

n         commands

n         ribbon

ribbon元素

要修改功能区,则要在customUI标签内嵌套ribbon元素,如下所示:

<customUI xmlns=http://schemas.microsoft.com/office/2006/01/customui>

    <ribbon>

        <!– All other instructions go here –>

    </ribbon>

</customUI>

1ribbon元素必需的属性

ribbon元素没有任何必需的属性。

2、可选的静态属性

ribbon元素有一个非常特别的属性,如下表3所示。

3ribbon元素的可选属性

静态属性

动态属性

允许值

默认值

动态属性的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>

3ribbon元素的子对象

ribbon对象可以包含下列元素:

n         contextualTabs

n         officeMenu

n         qat

n         tabs

tabs元素

这是除customUIribbon之外的另一个容器,必须嵌套在功能区(Ribbon)块中。示例代码如下:

<customUI xmlns=http://schemas.microsoft.com/office/2006/01/customui>

    <ribbon>

        <tabs>

            <!– All other instructions go here –>

        </tabs>

    </ribbon>

</customUI>

tabs标签的目的是集中要引用、创建或修改的每个元素和单个选项卡。

1tabs元素必需的属性

tabs元素是要使用的最容易的元素之一,没有单个的属性。

2tabs元素的子对象

tabs元素是一个容器元素,用于包含特定引用的(或创建的)选项卡控件。

tab元素

tab元素包含在tabs容器中,用于创建或引用功能区中单个的选项卡。理解tabs对象和tab对象之间的不同是非常重要的。tabs(复数形式)引用整个选项卡集合,而tab(单数形式)指定特定的选项卡。

1tab元素必需的属性

tab对象是层级中的第一个元素,需要id属性。必须从下表4中选择且只能选择其中一个:

4tab元素的id属性

属性

何时使用

id

当创建自已的选项卡时

idMso

当使用现有的Microsoft选项卡时

idQ

当创建在命名空间之间共享的选项卡时

为什么需要id属性的原因很简单:如果选项卡没有id属性,那么如何引用该选项卡呢?

2、带有回调签名的可选的静态属性和动态属性

tab元素提供了几个可选的静态属性。如果要设置某选项卡相对于任何其它现有的选项卡的位置,则使用下表5列出的insert属性之一。

5tab控件可选的insert属性

insert属性

允许值

默认值

何时使用

insertAfterMso

有效的Mso选项卡

在最近的选项卡之后插入

Microsoft选项卡之后插入

insertBeforeMso

有效的Mso选项卡

在最近的选项卡之后插入

Microsoft选项卡之前插入

insertAfterQ

有效的选项卡idQ

在最近的选项卡之后插入

在共享的命名空间选项卡之后插入

insertBeforeQ

有效的选项卡idQ

在最近的选项卡之后插入

在共享的命名空间选项卡之前插入

注意,如果没有指定insert属性,那么选项卡将被添加到最后一个选项卡之后,而不管是自定义选项卡还是内置选项卡。

tab控件也接受下表6列出的任一或全部属性:

6tab控件的可选属性和回调

静态属性

动态属性

允许值

默认值

动态属性的VBA回调签名

keytip

getKeytip

13个字符

none

Sub GetKeytip(control As IRibbonControl,ByRef returnedVal)

label

getLabel

11024个字符

none

Sub GetLabel(control As IRibbonControl,

ByRef returnedVal)

tag

none

11024个字符

none

n/a

visible

getVisible

true,false,1,0

true

Sub GetVisible(control As IRibbonControl,                                              ByRef returnedVal)

注意,动态回调用于在文件使用时动态修改功能区,使用了VBA代码来运行。

3tab元素的子对象

tab对象仅仅可以包含组元素,例如内置的剪贴板组或者自已创建的自定义组。

4、内置的选项卡

当在功能区中处理选项卡时,有两种类型的选项卡:内置的和自定义的。内置选项卡由Microsoft提供,而自定义选项卡由自已创建。

1)引用内置选项卡

每个内置选项卡都有自已唯一的idMso属性,通过调用该属性引用这个选项卡,因此应该弄清楚idMso属性。

下表7列出了ExcelAccessWord的一些最通用的选项卡名称,注意大小写。

7:最常用的内置选项卡名称

选项卡名称

idMsoExcel

idMsoWord

idMsoAccess

开始

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中打开该工作簿文件,此时“开始”选项卡没有了。

此时,关闭该工作簿文件,将使“开始”选项卡重新出现。

5、自定义选项卡

1)创建自定义选项卡

创建自定义选项卡时,不需要引用idMso,而是为新选项卡指定一个唯一的id属性。

继续上面的练习,在Excel中关闭工作簿文件,在customUI Editor中重新打开该文件,输入下面的代码:

<customUI xmlns=http://schemas.microsoft.com/office/2006/01/customui>

    <ribbon startFromScratch=false>

        <tabs>

            <tab id=rxtabDemo label=Demo>

            </tab>

        </tabs>

    </ribbon>

</customUI>

验证代码并关闭该文件,然后在Excel中重新打开该工作簿,此时在功能区中将增加一个新的自定义选项卡,如下图1所示。

1:功能区中新增加的自定义选项卡

2)放置自定义选项卡

现在我们将自定义选项卡放置在“开始”选项卡之后,代码如下:

<customUI xmlns=http://schemas.microsoft.com/office/2006/01/customui>

    <ribbon startFromScratch=false>

        <tabs>

            <tab id=rxtabDemo

               label=Demo

               insertAfterMso=TabHome>

            </tab>

        </tabs>

    </ribbon>

</customUI>

即为insert属性指定有效的idMso,将自定义选项卡放置在想要的位置。此时,工作簿如下图2所示。

2:自定义选项卡放置在“开始”和“插入”选项卡之间

注意,当插入多个控件时,将按照它们在XML代码中的顺序插入。

group元素

group元素的作用是为实际的按钮、复选框、菜单和其他允许在功能区中配置的命令创建占位符。

1group元素必需的属性

tab元素一样,每个组需要一个唯一的id属性,如下表8所示。

8group元素的id属性

属性

何时使用

id

当创建自已的组时

idMso

当使用现有的Microsoft组时

idQ

当创建在命名空间之间共享的组时

2、带有回调签名的可选的静态属性和动态属性

要设置某个组相对于任何其他现有的组的位置,需要指定下表9列出的insert属性之一。

9group控件可选的insert属性

insert属性

允许值

默认值

何时使用

insertAfterMso

有效的Mso

最近的组之后插入

Microsoft组之后插入

insertBeforeMso

有效的Mso

最近的组之后插入

Microsoft组之前插入

insertAfterQ

有效的组idQ

最近的组之后插入

共享的命名空间组之后插入

insertBeforeQ

有效的组idQ

最近的组之后插入

共享的命名空间组之前插入

group控件也接受下表10列出的任何或全部属性。

10group控件可选的属性和回调

静态属性

动态属性

允许值

默认值

动态属性的VBA回调签名

image

getImage

11024个字符

none

Sub GetImage(control As IRibbonControl,                                             ByRef returnedVal)

imageMso

getImage

11024个字符

none

同上

keytip

getKeytip

13个字符

none

Sub GetKeytip(control As IRibbonControl,                                             ByRef returnedVal)

label

getLabel

11024个字符

none

Sub GetLabel(control As IRibbonControl,                                              ByRef returnedVal)

screentip

getScreentip

11024个字符

none

Sub GetScreentip(control As IRibbonControl,                                           ByRef returnedVal)

supertip

getSupertip

11024个字符

none

Sub GetSupertip(control As IRibbonControl,                                           ByRef returnedVal)

tag

none

11024个字符

none

none

visible

getVisible

true,false,1,0

true

Sub GetVisible(control As IRibbonControl,                                           ByRef returnedVal)

3group元素的子对象

group元素能够包含下列对象的任意组合:

n         box

n         button

n         buttonGroup

n         checkBox

n         comboBox

n         control

n         dialogBoxLauncher

n         dropdown

n         editBox

n         gallery

n         labelControl

n         menu

n         separator

n         splitButton

n         toggleButton

下面是在自定义选项卡中创建一个自定义组的XML代码:

<customUI xmlns=http://schemas.microsoft.com/office/2006/01/customui>

    <ribbon startFromScratch=false>

        <tabs>

            <tab id=rxtabDemo

               label=Sample

               insertBeforeMso=TabHome>

                <group id=rxgrpDemo

                       label=Demo Group

                       imageMso=HappyFace

                       keytip=D

                       screentip=This is my screentip

                       supertip=This is my supertip>

                </group>

            </tab>

        </tabs>

    </ribbon>

</customUI>

结果如下图3所示:

3:自定义选项卡中的自定义组

注意,在上面的XML中设置的属性,仅label属性的值出现在功能区中。大多数可选的属性例如imageMso,在组控件中将没有可见的效果。因此,经调试后,可以忽略一些可选的属性。

4、内置组

使用内置组,仍然能够提供内置功能。此外,能够将经常使用的控件组合在一起。

1)引用内置组

与选项卡相似,通过引用其id属性识别自定义组,通过引用其idMso属性识别内置组。下表11列出了ExcelAccessWord中的一些内置组。

11:在ExcelAccessWord中通用的组

显示的名称

idMso名称

剪贴板

GroupClipboard

字体

GroupFont

形状

GroupShapes

例如,隐藏Excel中剪贴板组的XML如下:

<customUI xmlns=http://schemas.microsoft.com/office/2006/01/customui>

    <ribbon startFromScratch=false>

        <tabs>

            <tab idMso=TabHome>

                <group idMso=GroupClipboard

                       visible=false>

                </group>

            </tab>

        </tabs>

    </ribbon>

</customUI>

结果如下图4所示:

4:隐藏了“剪贴板”组的“开始”选项卡

2)在自定义选项卡中使用内置组

能够在自已的选项卡中使用内置组,这是Office 2007的一项关键功能。

Microsoft虽然花费了大量的人力和财力研究用户的使用习惯,但默认的控件顺序不会总是满足特定的需求。因此,利用重复使用Microsoft内置组的能力,可以容易地在单个选项卡中放置最常用的命令,这样更方便于使用且随时可见,避免在功能区选项卡之间来回切换。

在许多场合,创建一个自定义且经过整理的选项卡能够节省无数次的键击并极大地提高生产力。例如,假设要花时间审阅Excel工作簿的一致性,在默认的功能区中,需要经常在功能区选项卡之间来回切换以利用所需要的控件,下表12列出了在Excel中需要使用到的组。

12:在Excel中常用的审核工具的位置

组名

默认的选项卡

名称

剪贴板

开始

GroupClipboard

字体

开始

GroupFont

公式审核

公式

GroupFormulaAuditing

批注

审阅

GroupComments

编辑

开始

GroupEditingExcel

现在,创建一个包含上述组的自定义选项卡,其XML代码如下:

<customUI xmlns=http://schemas.microsoft.com/office/2006/01/customui>

    <ribbon startFromScratch=false>

        <tabs>

            <tab id=rxtabMyTools

                 label=My Tools

                 insertBeforeMso=TabHome>

                 <group idMso=GroupClipboard/>

                 <group idMso=GroupFont/>

                 <group idMso=GroupFormulaAuditing/>

                 <group idMso=GroupComments/>

                 <group idMso=GroupEditingExcel/>

            </tab>

        </tabs>

    </ribbon>

</customUI>

注意,在上面的代码中,group元素没有使用单独的结束标签,而是在行尾使用/>结束。这样的编写非常简洁。此时,结果如下图5所示。

5:填充内置组的自定义选项卡

注意,在自定义组中引用的内置组只是原来组的副本,内置组仍然在原来的位置。

5、自定义组

1)创建自定义组

tab元素一样,通过指定一个唯一的id属性来创建自定义组,而不是引用内置组的idMso

继续上面的示例,关闭Excel文件,在CustomUI Editor中重新打开该文件,在最后一个group标签之后,添加下面的XML代码:

<group id=rxgrpMyGroup

        label=My Group>

</group>

注意,上述代码并没有在同一行中开始和结束组代码。这样,方便在其中添加其他控件,例如按钮、复选框或动态菜单。

验证代码后保存文件并关闭CustomUI Editor。再打开Excel,此时,在自定义选项卡中添加了一个空组,如下图6所示。

6:自定义选项卡中的自定义组

2)放置自定义组

有时,可能想让自定义的组放置在指定的位置或按指定的顺序排列,可以采取两种方法来实现。

方法1:在XML代码中,按想要显示的顺序编写代码。

方法2:使用insertBeforeMso属性或insertAfterMso属性,在某个组之前或之后放置自定义的组。例如,上例中使用下面的代码将自定义组放置在“字体”组之前:

<group id=rxgrpMyGroup

        label=My Group

       insertBeforeMso=GroupFont>

</group>

结果如下图7所示。

7:将自定义选项卡放置在“剪贴板”组和“字体”组之间

3)在内置选项卡中的自定义组

在内置选项卡中插入自定义组也是很容易的,下面仍以Excel 2007为例来演示。

步骤1 创建一个新的Excel文档并保存,然后关闭该文档。

步骤2 CustomUI Editor中打开该文档,并输入下面的代码:

<customUI xmlns=http://schemas.microsoft.com/office/2006/01/customui>

    <ribbon startFromScratch=false>

        <tabs>

            <tab idMso=TabHome>

                <group id=rxgrpMyGroup

                      label=My Group

                      insertBeforeMso=GroupFont>

                </group>

            </tab>

        </tabs>

    </ribbon>

</customUI>

步骤3 验证代码并保存代码,然后关闭CustomUI Editor

步骤4 Excel中重新打开该文件,现在看到在“开始”选项卡中有一个自定义组,如下图8所示。

8:在开始选项卡中的自定义组

此时,在内置的“开始”选项卡中添加了自定义组“My Group”,并且将该组放置在第二位,即“字体”组之前。然后,您就可以在自定义组中添加想要的控件了!

相关文章

细品RibbonX(13):初识XML

1 颗星2 颗星3 颗星4 颗星5 颗星 (目前还没有人投票)
Loading ... Loading ...

XML是扩展标记语言(Extensible Markup Language的缩写,最初由W3C发布。XML不是真正的编程语言,因为它缺乏执行操作的某种机制,相反,XML是一组规则,其意图是简化跨平台的数据共享。

Office 2007文件以MicrosoftOpenXML格式发布,是包含几个XML文件的一个简单的压缩容器。使用XML格式的文件具有下列优点:

1XML文件能够明显地节省空间。

2)通过XML结构化数据后,能够快速地被索引,因而能使其他程序通过索引搜索到特定的字符串或其他项目。

3)对于开发者来说,能够链接某个应用程序里的XML架构来验证XML而确保代码像意料中的那样工作。例如前面介绍的CustomUI EditorXML Notepad,如果没有这些架构,CustomUI Editor将不能验证代码,XML Notepad不能提供智能感知功能。

当然,我们之所以关心XML,是因为XML功能区的核心。要定制Office 2007用户界面,必须编写XML代码。虽然VBA在定制界面时也能起到关键的作用,但它不是必需的。而XML在定制中几乎总是必需的,但也有例外。例如弹出式菜单和一些出现在加载项选项卡中的VBA定制。

下面,我们来了解如何构成XML代码,以及如何编写XML

标签(Tags

先看看下面的代码片断:

<group id=”rxgrpTest”>

<button idMso=”Bold”/>

<button idMso=”Italic”/>

<splitButton id=”rxsbtnTest”>

    <button idMso=”Underline”/>

</splitButton>

</group>

留意上面代码的结构,注意<>/号的使用,这些符号在XML中有特定的用途:指出了标签的开始和结束位置。例如,开始的<group>标签和结束的</group>标签之间的内容包含了在功能区中显示的组。

在组里面列出的splitButton标签使用与组相同的结构,以<splitButton>标签开始,接着包含了所有的项目直至由</splitButton>标签结束。本例中,仅仅下划线按钮出现在拆分按钮中。

现在,看看按钮本身的代码,注意到/号位于标签的结尾,这样就不需要单独的标签来关闭元素。

这里演示了用于开始和结束XML标签的两种方法。您需要理解和使用这两种方法来创建自定义UI的结构。如下所示:

开始和关闭标签分开:<element attribute(s)=”Value”></element>

开始和关闭标签未分开:<element attribute(s)=”Value”/>

通过上面的例子,应该了解到:

1)在XML中,每个标签至少包含一个元素并且通常至少有一个属性。

2)在处理代码时,涉及的每个项目都被称作对象object。例如,对象包括功能区中的组、按钮、复选框、甚至是菜单。许多对象都有子对象。当某控件有子控件时,该控件称作为父控件。注意,父对象通常(但不总是)有不同类型的子对象。选项卡有一个或多个组对象作为子对象,并且一个组可能有按钮、复选框和动态菜单子对象的组合。其中,dynamicMenu对象除了其他子对象类型外,还有dynamicMenu子对象。某些父对象甚至有完整的子对象群,称之为集合(collection)。

每个子对象同时也是它自已的子对象的父对象。每个子对象控件必须嵌套在其父对象的开始和结束标签中。并且,每个子对象仅可能有一个父对象。

3)为了创建格式良好(有效的)XML,必须理解:所有的标签,无论是元素还是属性,都区分大小写,即SPLITBUTTON元素与splitButton元素不相同。属性值必须被放置在单引号或双引号内。在父元素中的子元素的嵌套必须准确,每个开始标签必须与其结束标签相匹配,或者使用“/>”结束在相同的标签内,或者在后面使用单独的标签。

元素(Elements

当处理功能区的XML时,可以看到每个元素指定功能区控件(或结构)的特定部分。

对于初学者来说不容易弄清楚标签和元素的区别,然而很容易定义:group是一个元素,而<group>是一个标签。因此,标签实质上是通过<>符号识别代码块的标志。

每个标签必须包括一个且唯一一个元素。此外,元素总是XML标签的第一部分,告诉编译器希望开始处理或者停止处理的特定项目。

属性(Attributes

标签告诉编译器要处理的对象,而属性告诉编译器该对象的特性,例如对象的名称、在屏幕中显示的标题以及是否对象可见。

与元素不同的是,在所给标签内可以为对象设置多个属性。例如,下面的代码片断显示了带有多个属性的标签示例:

<button id=”rxbtnProtectAll”

    size=”normal”

    label=”Protect All Sheets”

    imageMso=”ReviewProtectWorkbook”

onAction=”rxbtnProtectAll_click”/>

上面的代码提供给按钮一个唯一的id并指定了大小、标签文本和图像,还提供了一个onAction回调签名,当单击该按钮时启动相应的VBA过程。

1id属性

在创建额外的对象之前,需要探讨如何在代码中识别这些对象。而id属性用于识别在自定义XML代码内特定的对象,为其提供名称,使得后面能够使用该名称引用该对象。这是引用对象的唯一方法。在下列容器中每个对象都需要id属性:

n         contextualTabs

n         officeMenu

n         qat

n         tabs

id属性有几种不同的类型并且每一个都有不同的用途。下面列出了id属性的不同类型及其主要用途。

n         id属性用于唯一地标识控件。如果动态地装载项目,其属性将被赋值。

n         idMso属性用于唯一地标识内置控件、选项卡、命令,等等。使用该属性与内置对象交互。

n         idQ属性用于跨共享的命名空间引用对象。

为了识别某对象,只需简单地在开始标签中添加id属性,例如,要通过id引用某选项卡,使用下列XML

<tab id=”rxtab”

    <!—放置其它的选项卡属性! –>

</tab>

同样地,如果试图引用内置的字体(Font)组,则使用下面的XML

<group idMso=”Font”

    <!—放置其它的组属性! –>

</group>

注意,所有的ididQ属性都是唯一的。如果使用已存在的id,或者由Microsoft保留的id,将会导致错误并阻止装载自定义用户界面。

为了避免与内置的控件相冲突,建议所有自定义控件使用标准的命名约定加上前缀。

2label属性

label属性指定用户能够在屏幕上读取的内容,它不必是唯一的,但应该合乎逻辑、简洁明了且一致。label属性为用户提供了清晰的向导。要为控件添加标签文本,使用下面所示的代码:

<tab id=”rxtab”

    label=”My Custom Tab”>

</tab>

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>

XML代码中创建注释

注释能够使自已或他人清楚代码的作用。

放置注释的方法是:在开始处放置一个小于号(<),然后输入感叹号(!),随后是两个连字号(),结束注释需要两个连字号加一个大于号(>),例如:

<!—这是一段注释 –>

如果注释很长,可能需要几行,那么可以按如下所示编写:

<!–

这是一段相当长的注释。因为您想使用长的注释解释这段代码有什么作用,各个符号代码什么意思,以帮助您以后好理解。

–>

<!––>之间的内容被当作连续的注释。

此外,不能够将注释放置在一块开始的XML代码的中间。下面的示例来进行演示:

<!—这是我的按钮 –>

<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”>

<!—这是我的按钮 –>

</button>

上述两段代码都是正确的,但下面的代码会产生错误:

<button id=”rxbtn”

<!—这是我的按钮 –>

    label=”This is my button”

    imageMso=”HappyFace”

    size=”large”

    onAction=”rxbtn_Click”/>

上面的问题在于注释被插入到了未关闭的代码块中。

相关文章

XML和Excel

1 颗星2 颗星3 颗星4 颗星5 颗星 (目前还没有人投票)
Loading ... Loading ...

题注:本文译自www.jkp-ads.com,供有兴趣的朋友参考。
什么是XML
XML是可扩展标记语言(eXtended Markup Language)的缩写。对于网页来说,XML是标准的设想,目标是容易搜索网页中的信息。其原理是对信息添加描述性的“标记(tags)”,使信息容易查找和分类。例如,所有的笑话可以被标记

<joke></joke>

所包围,这样,搜索引擎只会寻找网页中的这些标记以找到所有的笑话,图1展示了一段XML“代码”。正如您所看到的,它看起来很像HTML。这意味着XML是HTML的方言吗?

图1:在IE中显示的XML文件
就像HTML一样,XML是所谓的标记语言或元语言,一种提供另一种语言的信息的语言,或者换句话说,提供关于其内容的信息的语言。标记代码长期以来都围绕着内容。在出版时,编辑开始使用标记来指明何种格式需要被应用到文本的哪部分。
在六十年代,IBM开发了“通用标记语言”(GML),能够处理相同的电子档案。在1986年,GML被进一步扩展,并且成为了ISO标准,称为“标准通用标记语言”(SGML)。
后来,在瑞士欧洲核子研究中心研究所(CERN)的研究人员更进一步地扩展了SGML,因为他们需要一种标记他们的带有格式说明的电子存储出版物的方式。他们的文档包含了大量对其它资源、数学公式以及其它复杂信息的链接,他们希望在每个人的系统中都有同样的显示,并且他们期望容易搜索。结构化的CERN设计是当前HTML的基础。
因此,HTML和XML都来源于SGML,即“标准通用标记语言”。两种标准都由万维网联盟(World Wide Web consortium,即W3C)管理。
XML和HTML都使用“标记”,但是标记的目的不同。HTML主要是一种标准,用于定义信息的格式。一个能够使用的HTML标记是在标准里已经预定义了的,原则上没有创建自已的标记的自由。此外,HTML标记不会传递关于信息的实际内容的信息,只是代表。而XML则集中于标准信息的类型,而不是指定格式。在XML中,用户决定需要什么标记,XML标准仅仅设置了XML文件的结构。
XML的特征
XML有一些重要的特征(摘自Addison Wesley出版社的《Professional Excel Development》):

  • XML是一种结构化的格式,这意味着我们可以严密地定义在文件中如何排列、组织和表达数据。当我们获得一个文件,在导入数据之前,我们可以检验该文件是否遵循特定的结构。当我们预先知道了文件的结构,就知道其包含的内容以及如何处理每项。在XML之前,在文本文件中唯一的结构是位置,例如知道第四个逗号之后的文本应该是出生日期,然而没有办法验证是否是出生日期还是单纯的日期,也无法验证其使用的是日/月/年还是月/日/年顺序。
  • XML是一种描述性的格式,这意味着在文本文件里,数据的每一项都有名称,该名称对人和机器都具有可读性并且具有独立标识。我们能够打开文件,阅读其中的内容并理解包含的数据,无须参考其它文档来查找第四个逗号后的文本代表什么。同样,我们能够很自信并正确地编辑文档。
  • XML可以容易地描述层级数据以及数据间的相互关系。如果我们想导入和导出作家列表,包含作家的姓名、地址和著作,那么采用合理格式的CSV文件则一点也不直接。使用XML,可以定义作家项以及其姓名、地址和多个著作项。也可以定义著作项及其标题、出版商和ISBN。层级和关系按自然顺序来定义。
  • 能够验证XML,这意味着我们可以提供第二个XML文件——XML架构定义文件——准确地描述如何构造XML数据文件。在处理XML文件之前,可以将其与架构比较来确保文件遵循我们期望接受的结构。
  • XML是一种可识别的格式,这意味着程序(包括Excel 2003/2007)可以解析XML数据文件,推断数据项之间的结构和关系。这也意味着我们可以读取XML文件,推断其结构并生成遵循相同结构的新的XML数据文件,显然新XML数据文件将会通过验证。
  • XML是一种强类型格式,这意味着架构定义文件指定每个元素的数据类型。当导入数据时,应用程序能够检查架构定义从而识别导入的数据类型。我们不再担心将产品代码01-03作为日期导入。
  • XML是一种全球统一的格式。在XML文件中仅有一种表示数字的方式(US数字格式),并且仅有一种表示日期的方式。我们不再需要检查是使用美语设置还是法语设置创建CSV文件,并相应地调整对其的处理。
  • XML是一种标准的格式。万维网联盟(W3C)指定XML文件内容的定义方式,允许应用程序(包括Excel 2003/2007)读取、理解和验证XML文件的结构,并且遵循特定的结构创建文件。同时,允许不同的应用程序读取、写入、理解和验证相同的XML文件,允许我们以一种相当健壮的方式在应用程序间分享数据。

XML文件的结构
图1显示的XML代码是相当容易读取并理解的(即下载的示例文件中的test_en.xml文件)。
第1行(蓝色的)表示我们正在处理XML文件。该行应该出现在每个XML文件中。该文件包含信息和在信息周围成对的打开的和关闭的标记。一组打开的和关闭的标记及其中的信息称作元素。下面的文本显示了完整的元素:

<name>Joe Jackson</name>

上面显示的XML示例包含下列已命名的元素:
companies,company,companyname,employee,code,name,street,houseno,areacode,place,phone。
标记名是区分大小写的,“name”与“Name”不是相同的名称。标记的特征是将文本放置在尖括号内:

<tag>

每个标记必须对应着一个关闭的标记:

</tag>

在打开的和关闭的标志之间的所有文本都属于该标记。
如果在标记之间没有内容,那么可以将打开的和关闭的标记组合成一个自关闭的标记:

<tag/>

当没有内容或者当标记的内容带有该标记的属性时,这样处理:

<name name=“Jan Janssen”/>

等价于:

<name>Jan Jansen</name>

属性的使用实际上不会改善可读性,建议使用成对的打开和关闭标记。
XML文件的第2行包含根元素的开始标记:

<companies>

元素“companies”就是所谓的XML文件的根元素。每个XML文件必须包含一个根元素。将XML文件与根相比较:树有一个树干,如果有多个树干,我们称为灌木,而不是树。
第3行表明元素“companies”的开始。在“companies”元素里,可以嵌套多个“company”元素。第4行显示全部的“companyname”元素,之后的第5至27行包含了“Stanford and Son”公司三个雇员的数据。
XML的强大在于方便理解数据的结构以及XML文件的意图,所需做的只是看一看该文件。同时,可以设想在该文件中添加新公司,并且能够很简单地添加雇员信息。
XML架构
一个XML文件有一个依附于它的架构定义(XSD),架构定义确定XML文件的结构。此外,XSD文件还可以定义:

  • 元素里面的数据格式(字符串、数字,等等)
  • 元素是否是强制的
  • 元素是否能重复

要依附一个XML文件到架构,对架构文件的引用必须包含于XML文件里。能够添加架构引用作为根元素的属性,例如:

<companies xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Schema.xsd">

粗体文本创建对架构文件schema.xsd的引用,本例中该文件必须放置在与xml文件相同的文件夹中。无须理解架构定义准确语法的细节,下面是与文件test1_en.xml相联系的架构定义:
Listing 1: Schema.xsd

<?xml version='1.0' encoding='UTF-16'?>
<!-- XmlMap.DataBinding.SourceUrl: C:\Data\OfficeMagazine\XML\test2.xml -->
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
	<xsd:element name="companies">
		<xsd:complexType>
			<xsd:sequence minOccurs="0">
				<xsd:element minOccurs="0" name="company" >
					<xsd:complexType>
						<xsd:sequence minOccurs="0">
							<xsd:element minOccurs="0" type="xsd:string" name="companyname" />
							<xsd:element minOccurs="0" maxOccurs="unbounded" name="employee" >
								<xsd:complexType>
									<xsd:sequence minOccurs="0">
										<xsd:element minOccurs="1" type="xsd:string" name="code" />
										<xsd:element minOccurs="1" type="xsd:string" name="name" />
										<xsd:element minOccurs="0" type="xsd:string" name="street" />
										<xsd:element minOccurs="0" type="xsd:string" name="houseno" />
										<xsd:element minOccurs="0" type="xsd:string" name="areacode" />
										<xsd:element minOccurs="0" type="xsd:string" name="place" />
										<xsd:element minOccurs="0" type="xsd:string" name="phone" />
									</xsd:sequence>
								</xsd:complexType>
							</xsd:element>
						</xsd:sequence>
					</xsd:complexType>
				</xsd:element>
			</xsd:sequence>
		</xsd:complexType>
	</xsd:element>
</xsd:schema>

很明显,这样一个架构与相关联的XML文件相比,很难阅读。点此获取关于架构的更多信息
扩展的样式表
扩展样式表(xsl文件)xml文件能够被转换成其它的格式,例如SpreadsheetML,即支持电子表格的XML格式。关于这些样式表如何工作的介绍已超出了本文的范围。在w3c的网站上可以获得更多关于扩展样式表的信息
Excel中的XML
现在,让我们使用Excel来处理XML文件。使用Excel 2003/2007导入XML数据是非常简单的。不巧的是,XML功能仅仅可用于Microsoft Office专业版或旗舰版,或者从单独购买的Excel程序包安装的Excel。当从Excel中打开文件时,可以看到可用的Excel文件中的XML文件类型,如下图2所示。

图2:Excel 2007的文件——打开窗口
选择文件test_en.xml,出现如下图3所示的窗口。

图3:Excel询问怎么处理XML文件
选择第3个选项,Excel将分析XML文件的结构,并在任务窗格中呈现结构(如图4)。此时Excel不会打开该XML文件。

图4:XML文件的结构在任务窗格中显示
能够将XML文件的元素绑定到工作表单元格中,只需简单地从任务窗格将它们拖动到Excel单元格中即可。如图5所示。

图5:拖动元素到Excel单元格后的结果
拖动包含多个其它元素的元素(或者使用Ctrl+单击或Shift+单击选择任务窗格中的多个元素)到Excel单元格,所有元素作为列表依次放置,如图6所示。

图6:拖动“employee”元素到工作表中后产生的列表
现在,我们已经定义了能够从XML文件中导入数据的模板。我们能够从test_en.xml中导入数据,只需按“表工具 设计”选项卡中“外部表数据”的“刷新”按钮,或者单击Excel 2003列表工具条中的“刷新XML数据”按钮,将从test_en.xml中读取数据到我们新创建的模板,如图7和图8所示。

图7:使用功能区刷新数据

图8:导入数据后的结果
要将不同的文件导入到相同的结构,使用连接属性对话框。如图9所示,单击“刷新”按钮下拉箭头,可以找到连接属性命令。

图9:改变连接属性以导入另一个XML文件到Excel
单击连接属性后,出现“连接属性”对话框,单击其中的“定义”选项卡,然后单击“浏览”按钮访问不同的XML文件。
XML验证
非常奇怪,缺省情况下根据其依附的架构定义的ML文件的验证是关闭的。打开该选项将迫使Excel在导入和导出时根据架构检查每个XML文件。
首先,包含对架构引用的XML文件必须被映射到Excel单元格。关闭Excel中所有不需要的文件,然后打开test2-en.xml文件。我已经忽略了该文件中第一个雇员的名字。并且,选择“使用XML源任务窗格”选项。将“employee”拖动到任一单元格中。接着,单击功能区表工具选项卡中的属性按钮,如图10所示。

图10:功能区中的XML属性按钮
此时,出现“XML映射属性”对话框:

图11:XML映射属性对话框
单击“根据架构验证进行导入和导出”旁的复选框。
现在,单击“刷新”按钮从test2_en.xml中导入数据,将出现下面的对话框:

图12:导入违反架构的XML文件导致错误消息
单击“详细信息”按钮,Excel将显示更多关于使用该XML文件发生的错误的信息(如图13)。此时,Excel指出不接受出现的元素“Street”,应该是“name”。之所以导致这个错误消息,是因为忽略了name标记,因而该标记不在XML文件中应该出现的位置。虽然出现了错误消息,但Excel仍然会导入数据。

图13:违规的XML文件导致验证错误的详细信息
在导出数据时,验证也会工作。打开文件ExcelXML_en.xlsx,完全移除名称列。此时,试着导出XML列表(如图14)。

图14:单元格右键菜单,XML选项,导出

图15:导出违反架构的XML数据之后的错误消息
小结
本文仅仅介绍了XML的一些非常基础的知识:XML是什么以及它可能是什么。例如,这里没有介绍XML提供的共享选项的信息:非常容易跨平台重复使用数据。下面是一些关于XML更多信息的资源。
参考资源
XML:http://www.w3.org/XML/
MSDN和XML:http://msdn.microsoft.com/xml/
架构(Schemas):http://www.w3.org/TR/xmlschema-0/
扩展样式表(Extensible Stylesheets):http://www.w3.org/Style/XSL/
关于Excel和XML:
http://office.microsoft.com/nl-nl/assistance/HP030737771043.aspx
关于Word和XML:
http://office.microsoft.com/nl-nl/assistance/CH060832811043.aspx
本文示例下载:

相关文章

细品RibbonX(5):开放的XML文件格式

1 颗星2 颗星3 颗星4 颗星5 颗星 (2 人投票, 平均: 5.00 out of 5)
Loading ... Loading ...

众所周知,Office 2007采用了新的文件格式。例如,在Excel 2007中,当您保存文件时会默认以xlsx为扩展名来保存,采用这种格式的文件不包含宏;如果要保存带有宏的工作簿,那么应该以xlsm为扩展名保存。(当然,您可以在Excel选项中更改保存文件时默认的文件格式)。
新的文件格式有:

  • xlsx:不带有宏的工作簿文件。
  • xlsm:包含宏的工作簿文件。
  • xltx:不带有宏的工作簿模板文件。
  • xltm:包含宏的工作簿模板文件。
  • xlsa:加载项文件。
  • xlsb:与旧的xls文件格式相同,但是可以兼容新特性的二进制文件。
  • xlsk:备份文件。

除xlsb文件外,其他的文件都是可以打开的XML文件,意味着其他文件可以读写这些文件。
Office 2007的新文件格式称为开放的XML文件格式,这是一种新的基于XML的文件格式。新的文件格式改进了文件和数据管理、数据恢复和可交互操作的能力。采用这种格式的文件实际上是压缩文件,您可以将其解压缩到文件夹中查看文件内部的情况。任何支持XML的应用程序都能访问和处理Office 2007文件信息,即只要提供了对XML的支持,那么非Office应用程序软件也可以方便地创建和操纵Office文件。即便是在系统没有安装Office软件的情形下,也可以查看文件的内容。
下面,主要以Excel 2007为例,并使用Jan Karel Pieterse研究Excel 2007新的文件格式的工作簿示例,来了解Office 2007开放的XML文件格式。

探索Office 2007 XML文件格式
新的XML文件格式基于压缩的ZIP文件格式规范,每个ZIP容器由许多包含Microsoft称作“部件”的XML文件组成。大多数部件是描述工作簿数据、元数据、文档信息的XML文件,非XML文件例如代表图片或OLE对象的二进制文件也包含在ZIP文件中。也有描述部件之间关系的相关联的部件,从而提供工作簿文件的结构,这些部件是工作簿的内容和内容部件如何组合在一起的关系详情。
下面演示了开放的XML格式的文件容器。
RibbonX(5)-0

分析Excel 2007文件
一个Excel 2007文件实际上就是一个压缩了的容器(ZIP文件),其中包含一些文件夹和文件。您可以将Excel 2007文件的扩展名更改为.zip或.rar,然后双击该文件来或者将其解压缩到特定的文件夹中来查看其包含的文件夹和文件。在ZIP文件中,可以看到一些XML组件,其中一些独立的XML文件存储了文档所有的设置(setting)、样式(style)、绘图(drawing)和数据等内容。
例如,新建一个Excel 2007工作簿,在该工作簿中输入数据、插入图表、放置控件和图片及图示、输入VBA代码等,然后将该工作簿命名为test1.xlsm,关闭该工作簿。将工作簿test1.xlsm的扩展名更改为test1.xlsm.zip,并解压缩到文件夹中。可以看到其XML文件包结构如图1所示。
RibbonX(5)-1
图1:Excel 2007的.xlsm文件的内容
该工作簿文件包含3个根文件夹和1个名为[Content_Types].xml的文件。其中:

  • _rels文件夹:有一个名为.rels的文件,包含关于程序包关系的信息。其中有三个关系属性:Id为任意字符串,在.rels文件中必须是唯一的;Type表示关系的类型;Target指定包含关系的目标的文件夹和文件。
    很多子文件夹内部都包含有一个名为_rels的文件夹,这些文件夹都包含有定义与其他部分之间关系的XML文件。
    关系:Excel 2007文档由部件组成。这些部件通过定义在不同的XML文件里的关系联系在一起。
  • docProps文件夹:包含各种XML文件,描述文件属性和应用程序设置。类似于单击Office按钮,选择“准备——属性”后看到的内容。docProps文件夹包含着至少一个名为app.xml的文件和一个名为core.xml的文件。这些文件包含着Excel文件的元信息,例如创建者的名字、修改的和创建的日期。
  • xl文件夹:包含文件的核心部分。根据工作簿中的内容,该文件夹中含有一些子文件夹,并且还含有工作簿设置的XML文件。如果工作簿中含有VBA代码,那么文件夹中还有以bin为扩展名的二进制文件。
  • [Content_Types].xml文件:列出了包括在Excel文件程序包中其它部件的内容类型。

打开名为“xl”的文件夹,其包含的内容如图2所示。
RibbonX(5)-2
图2:文件夹“xl”中的内容
可以看出,除VBA工程、图片等特殊情形以二进制格式存储外,几乎所有文件都是XML文件。下面列举一些。

  • _rels:其中的关系文件workbook.xml.rels定义了工作簿、数据和格式部件的关系。
  • activeX:包含控件设置的XML文件。
  • charts:包含图表设置的XML文件。
  • chartsheets:包含工作簿中每个图表数据的XML文件。
  • diagrams:描述工作簿中形状(SmartArt)的XML文件。
  • media:包含内嵌的媒体文件,例如GIF文件、JPG文件等。
  • tables:包含带有每个表的数据的XML文件。
  • theme:包含工作簿主题的数据的XML文件。
  • worksheets:包含工作簿中每个工作表的XML文件。

除一些文件夹外,还有一些单独的XML文件。例如,workbook.xml文件包含的部分内容如图3所示。
RibbonX(5)-3
图3:文件“workbook.xml”包含的部分内容
在这个文件中,我们可以找到各个工作表对应的id号,即r:id。如果希望对某工作表进行操作,那么先找到其r:id。例如,假设我们想在工作表Comments中添加内容,则需要找到包含该工作表内容的xml文件,即要找到图3中工作表对应的r:id。在图3中该工作表的r:id为rId7。
在文件夹“_rels”中,包含着一个名为“workbook.xml.rels”的文件,包含着XML代码,如图4所示。
RibbonX(5)-4
图4:在文件“workbook.xml.rels”中,指明Id值所对应的工作表
如图4所示,名为“sheet7.xml”的文件代表工作表“Comments”(rId7)。下图5为文件夹“worksheets”中的文件列表。
RibbonX(5)-5
图5:文件夹“worksheets”中的文件列表

使用压缩包中的XML文件来操作Office文档
读取单元格的值
工作表“Comments”中的内容如图6所示。
RibbonX(5)-6
图6:工作表Comments中的内容,单元格B2中包含批注
sheet7.xml文件的内容如图7所示。
RibbonX(5)-7
图7:文件sheet7.xml中的内容,显示了单元格A1、A2、A3
如何知道单元格A1中的内容呢?看看图7中的内容:

<c r="A1" t="s">

,可以知道单元格A1中包含字符串(t=”s”)。下一行:

<v>28</v>

告诉我们需要在“xl”文件夹中名为sharedStrings.xml的文件里找到项目数值28。该文件顶部的内容如图8所示。
RibbonX(5)-8
图8:文件sharedStrings.xml顶部的内容
表明在该工作簿中有45个唯一字符串。由于索引值是以0为基数开始,图7中的内容告诉我们需要的索引值是28,因此我们需要找到sharedStrings.xml文件中第29个

<si>

条目。如图9所示。
RibbonX(5)-9
图9:文件sharedStrings.xml中的第29个si即为工作表Comments中单元格A1的内容
在单元格中添加文本
现在,让我们在工作表Comments中添加新的文本数据。首先,修改sharedStrings.xml文件顶部的字符串数,将图8中的代码修改如图10所示。
RibbonX(5)-10
图10:将文件sharedStrings.xml顶部的字符串数修改为46
接下来,在该文件中添加新字符串。在该文件的相应添加新字符串,如图11所示。
RibbonX(5)-11
图11:在文件sharedStrings.xml中添加新字符串
然后,修改sheet7.xml文件,以添加带有新字符串的行,如图12所示。
RibbonX(5)-12
图12:在文件sheet7.xml中添加代码以添加带有新字符串的行
此时,工作表如图13所示。
RibbonX(5)-13
图13:编辑XML文件后的结果
在单元格中添加数字
在单元格中添加数字与添加文本相似,但有两点不同:数字是直接保存在工作表xml文件中并且可以添加数字格式。
例如,在前面的sheet7.xml文件中,数字单元格的格式为“常规”并且没有设置专门的格式。
通过索引值来定义单元格格式,例如下面的代码表示在单元格A3中显示的是日期:

<row r="3" spans="1:2">
  <c r="A3" s="34">
    <v>39218</v>
  </c>
</row>

索引值34指向文件包中的另一个文件:styles.xml,该文件的开始部分是自定义数字格式列表,下面一部分是称作cellXfs的单元格格式交叉引用转到自定义数字格式列表。在工作表xml文件中的s=”34″指向该节点(cellXfs节点)的某一元素。由于索引值基于0,因此索引值34代表列表中的第35项(即最后一项),如图14所示。
RibbonX(5)-14
图14:索引值34在列表中的项目
单元格格式交叉引用依次引用numFormatId列表、FontId列表、fillId列表以及borderId列表,都包含在Styles.xml文件中。
因此,不能直接添加格式化单元格到工作表,必须检查特定的单元格格式组合是否已经存在于单元格格式交叉引用中(在styles.xml中),这涉及到要为各个元素检查所有单个的格式引用。同时,如果格式组合是新的,则必须扩展带有新格式的格式元素列表,并更新样式交叉引用。当然,也需要更新列表的所有“count”参数。
上文演示的示例工作簿下载:

改变窗体控件的属性
通常,窗体控件与控件工具箱中的控件不同,例如不能改变按钮的背景色、不能改变组合框的字体和颜色等。下面来探索如何利用工作簿文件包更改这些属性。
例如,工作簿FormControls.xlsm的工作表Sheet1如图15所示。
RibbonX(5)-15
图15:包含一些窗体控件的演示工作簿
现在,来分析这些窗体控件存放的位置。将工作簿FormControls.xlsm重命名为FormControls.xlsm.zip。双击该文件,然后打开文件夹“xl”,接着打开文件夹“worksheets”。打开“sheet1.xml”文件,可以找到如图16中的条目。
RibbonX(5)-16
图16:文件sheet1.xml中指定窗体控件的条目
要找到“rId2”,打开“_rels”文件夹,如图17所示。
RibbonX(5)-17
图17:打开文件夹“_rels”
打开“sheet1.xml.rels”文件,找到rId2,如图18所示。
RibbonX(5)-18
图18:文件“sheet1.xml.rels”中Id为rId2的条目
这告诉我们应该查找文件“..\xl\drawings\vmlDrawing1.vml”。
每个工作表中有一个vmlDrawing?.vml文件,包含着控件或者在该vml文件中捕捉到的任何其它对象。
现在,将vmlDrawing1.vml文件拖到桌面上,然后打开它。找到定义复选框的部分,如图19所示。
RibbonX(5)-19
图19:文件vmlDrawing1.vml中定义Excel工作表中复选框的部分
通常,我们不能改变窗体控件中复选框的字体。现在,让我们在vmlDrawing1.vml文件中改变其字体,将图19中的内容:

<span style="color: #a00000; font-family: Arial Black;">CheckBox 3</span>

修改为:

<span style="color: #a00000; font-family: Courier New;">CheckBox 3</span>

保存并关闭该vml文件,然后将其拖回压缩文件夹的drawings文件夹中,再将文件名称FormControls.xlsm.zip改为FormControls.xlsm。现在,打开工作簿FormControls.xlsm后,复选框如图20所示。
RibbonX(5)-20
图20:修改字体后的窗体复选框控件
在这个vml文件中,还可以看出控件的其它信息,例如控件的大小和位置,即Anchor。如图19中的内容:

<x:Anchor>4, 30, 2, 0, 8, 39, 3, 18</x:Anchor>

其中,前2个数字指定控件左上角的水平位置:第1个数字是所在列数(基于0),第2个数字代表控件基于该列左侧的偏移量;随后的2个数字指定控件左上角的垂直位置:第1个数字是所在行号(基于0),第2个数字代表控件基于该行顶部的偏移量;最后的4个数字指定控件的右下角的位置。
也就是说,在上面的xml中,控件的左上角位于列E、第3行、向右移29像素,右下角位于单元格I4,向右移38像素,相对于左上角下移18像素。
也可以改变复选框字体的颜色,将内容:

<span style="color: #a00000; font-family: Courier New;">CheckBox 3</span>

修改为:

<span style="color: #ff0066; font-family: Courier New;">CheckBox 3</span>

修改后的效果如图21所示。
RibbonX(5)-21
图21:修改窗体复选框控件中字体的颜色
上文演示的示例工作簿下载:

通过上面的介绍后,大家可以寻找并更改相关的xml文件内容,以实现在工作表界面中无法实现的操作。

结语
XML是一种可扩展标记语言,可显示任何平台或应用程序可读的数据,并且XML文件是一种简单的文本文件,可以使用记事本创建,任何程序都可以很容易地从中读取数据,而且这种文件格式也不易损坏。而Microsoft Office引入的新的开放的XML文件格式,就具备了这些优点。它使得我们可以使用其他应用程序软件来读取或编辑Office文档,例如无须打开Excel就能修改工作簿、插入新工作表等。此外,与旧的二进制格式文件相比,新的文件格式也减少了工作簿损坏的机率,并且能够根据文件包内的相关文件来修复文件,例如删除或破坏了XML文件的一些字节后,在Excel中仍然可以读取数据的其余部分。使用新文件格式的文档数据实际上是文本文件,这使得文件大小也比相应的二进制文档要小。同时,文档组织也是结构化的,因此可以提取其中单独的元素。
还有很重要的一点是,新的XML文件格式使得可以通过自定义功能区来重新调整用户界面,实现新增的功能。

相关文章