Microsoft Office 2000 Web 组件基础(转)

Microsoft Office 2000 Web 组件基础

适用于:Microsoft Office 2000

摘要:本文讨论了从 Microsoft Excel 中发布 Microsoft Office Web 组件以及在如下环境中使用这些组件的方法:Microsoft Internet Explorer、Visual Basic 编辑器、Microsoft FrontPage 和 Microsoft Access。

下载 MSOWCBasics.exe 示例文件 (135 KB)。

目录

概述
从 Microsoft Excel 发布组件
在 Microsoft Internet Explorer 中使用组件
通过 Microsoft Visual Basic 使用组件
在 Microsoft FrontPage 中使用组件
在数据访问页中使用 Microsoft Office Web 组件
总结
更多信息

概述

Microsoft® Office Web 组件首次包含在 Microsoft® Office 2000 中。它们是用于向 Web 页添加电子表格、图表和数据处理功能的 ActiveX® 控件的集合。在使用 Microsoft® Internet Explorer 浏览包含 Office Web 组件的 Web 页时,您可以直接在 Internet Explorer 中处理显示的数据,如对数据进行排序和筛选,输入新的数值,展开和折叠明细数据,进行行列旋转以查看源数据的不同汇总信息等。Microsoft® Office Web 控件能够提供所有这些功能。

由于 Office Web 组件是完全可编程的,您可以在很多设计环境中使用这些组件来建立复杂的、交互的和基于 Web 的解决方案。这些设计环境包括 Microsoft® FrontPage®、Microsoft® Access 数据访问页以及 Microsoft® Visual Basic®。您也可以使用最小的设计设置直接在 Microsoft® Excel 中发布这些 Office Web 组件。

共有三种 Office Web 组件:Spreadsheet 组件、Chart 组件和 PivotTable® 组件。每种组件包含相关的 ActiveX 控件(SpreadsheetChartPivotTable List)以及对象(SpreadsheetChartSpacePivotTable)。除了这些 Office Web 组件和与它们关联的 ActiveX 控件外,还有第四种 ActiveX 控件:Data Source 控件,用于将其他组件绑定到一个数据源;这个控件在 Access 的数据访问页中广泛使用。Data Source 控件发布以后,对于在 Internet Explorer 中查看网页的用户是不可见的。和其他的 ActiveX 控件一样,Data Source 控件有一个相关联的对象:DataSourceControl 对象。Office Web 组件和 Data Source 控件全部在同一 DLL (Msowc.dll) 中提供。

介绍完这些组件后,我们将讨论从 Excel 中发布组件的方法, 然后讨论浏览器技巧,最后讨论在 Visual Basic 窗体、Internet Explorer [通过使用 Microsoft Visual Basic Scripting Edition (VBScript®)]、FrontPage Web 页和 Access 数据访问页中使用这些组件的方法。示例文件 (OWCExamples.xls) 包括在 MSOWCBasics.exe 下载文件中,用于演示从 Excel 中发布组件的方法;它还包含 Visual Basic for Applications (VBA) 代码示例。

此时我们假设读者已经对 HTML、VBA、VBScript、Access 以及 FrontPage 设计环境有了适当的理解。

要求

Office Web 组件要求使用 Microsoft Internet Explorer 4.01 或更高版本,并使用 Microsoft® Windows® 95、Microsoft Windows 98、Microsoft Windows NT® 版本 4.0 或 Microsoft Windows 2000 操作系统。硬件要求:16 MB 的 RAM、Intel 486、Pentium 或 Intel 兼容处理器或者任何 DEC Alpha 处理器。要使用 Access 设计基于组件的网页,或者要浏览用 Access 创建的网页,您必须使用 Microsoft Internet Explorer 5 或更高版本来体验浏览器的完整功能。如果使用较早版本的 Internet Explorer 来查看 Access 发布的网页,您只能查看组件提供的数据,但不能在浏览器中交互使用数据。用户要使用 Office Web 组件交互地浏览 Web 页,必须拥有 Office 2000 许可证。没有许可证的用户所遇到的情况将在本文后面的“未安装组件时发布”一节中讨论。

Spreadsheet 组件

Spreadsheet 组件能够在 Internet Explorer 中提供类似 Excel 的功能。Spreadsheet 组件使您可以获得一个完整的电子表格、某一单元格区域或某一命名区域(如打印区域、自动筛选区域或用户定义名称区域)并将其发布到 Web 页,如图 1 所示。数据发布以后公式将保留下来,这样用户可以修改 Web 页中的数据并在浏览器中查看公式或数据改变后的结果。注意,您也可以使用 Spreadsheet 组件来发布数据透视表报表。但是,通过这种方式发布的报表不包含数据透视表功能。

图 1:显示在 Internet Explorer 中的 Spreadsheet 组件

当包含数据的单元格区域从 Excel 中发布时,Spreadsheet 组件将自动使用这些数据进行填充。您也可以使用数据通过编程来填充 Spreadsheet 控件。

Spreadsheet 组件在 Internet Explorer 中提供如下功能:

  • 支持 Excel 2000 中的大部分功能

  • 重新计算引擎

  • 简单的电子表格用户界面

  • 基本的电子表格格式

  • 数据排序

  • 自动筛选

  • 多重撤消

Chart 组件

Chart 是 Microsoft Office 使用的数据绑定 ActiveX 控件,用于向 Web 页添加图表功能。如图 2 所示,当该组件从 Excel 中发布以后,根据图表数据在电子表格中的位置不同(在某区域中或在数据透视表报表中),得到的 Web 页将不仅包含 Chart 组件,还包含 Spreadsheet 组件或 PivotTable 组件。在 Internet Explorer 中查看 Chart 组件时,对 Spreadsheet 或 PivotTable 组件中数据的更改将自动显示在 Chart 组件中。

图 2:从 Excel 中发布的 Chart 组件

如果从 Microsoft Excel 中发布 Chart 组件,它将自动绑定到包含其数据的 Spreadsheet 或 PivotTable 组件。但是,您也可以通过编程将 Chart 组件绑定到一个数据源,或者可以提供数据以便使用代码制图。

PivotTable 组件

PivotTable 组件允许用户通过向 Web 页添加排序、分组、筛选、分级和其他数据处理功能来分析数据。本组件将 Excel 的列表功能(排序、自动筛选和分级)和数据透视表报表的自动汇总功能结合到运行于 Internet Explorer 中的单一 ActiveX 控件中。因此,Web 页上的数据透视表列表几乎等同于 Excel 工作表中的数据透视表报表。

数据透视表列表中的源数据可以来自 Excel 电子表格、任何列表形式的 OLE DB 或 ODBC 数据源,或者用于 OLAP 服务的 Microsoft OLE DB 提供程序所支持的任何 OLAP 数据源。PivotTable 组件提供如下功能:

  • 交叉列表(能够旋转行列以查看源数据的不同汇总信息)

  • 浏览报表数据

  • 动态筛选(自动筛选、按选定内容筛选、筛选字段)和排序

  • 按行或按列分组

  • 创建总计

  • 有效处理大量数据或少量数据

  • 进一步处理总计后面的明细数据(只能处理列表数据源,不能处理 OLAP 数据源)

要理解数据透视表报表和列表的工作方式,您应熟悉如下区域,如图 3 所示:

  • 拖放区域   用于数据透视表列表中,能够将字段拖放到该区域。

  • 筛选区域   数据透视表列表的顶端拖放区域。用于整个数据透视表列表的筛选。在筛选区提供了所有条目的下拉选择列表。选中特定的条目将只允许该条目显示在数据区域/明细数据区域。

  • 行区域   左边的拖放区域。用于行的分组。

  • 列区域   筛选区域下面的区域。用于列的分组。

  • 数据区域   数据透视表列表的主要部分。用于所有的总计(求和、计数、最小值、最大值)和列表。

  • 明细数据区域   也是数据透视表列表的主要部分。用于支持明细数据的字段(即没有应用总计功能)。您可以通过单击 PivotTable 组件工具栏上的“展开/折叠”按钮来显示此区域。

图 3:未填充的 PivotTable List 控件,显示筛选区域、列区域、行区域和汇总/明细区域

PivotTable 组件不支持计算字段。数据透视表从 Excel 中发布时,任何计算字段都将从发布区域中删除。

Data Source 控件

Data Source 控件 (DSC) 是个强大的控件,但此处仅将它与其他 Microsoft Office Web 组件关联起来进行讨论。该控件提供了用于 Office Web 组件的数据检索、数据绑定和游标管理功能。只有在发布图表或数据透视表报表且这些组件需要绑定到数据时,Data Source 控件才会从 Microsoft Excel 中发布。在 Internet Explorer 中,Data Source 控件本身是不可见的,而且也没有在 Microsoft Excel、Microsoft FrontPage 或 Microsoft Access 中向它发布的选项。它主要由 Access 的数据访问页使用。

跨域使用组件

Microsoft Office Web 组件除了能够用于 Internet 外,也能够用于 Intranet。通过同一个域的 Intranet 访问这些组件时,组件将正常运行。但是,如果试图通过另一个域访问数据,您可能会收到安全警告。例如,如果您正在查看的网页位于域 http://www.microsoft.com,而您访问的数据位于域 http://www.msn.com,除非 http://www.msn.com 是 http://www.microsoft.com 的信任域,否则您将收到如下安全警告:

“本页在其他域中访问数据。您是否允许这样做?要避免 Internet Explorer 中显示此消息,请在‘Internet 选项’对话框中的‘安全’选项卡上的‘可信站点’区域添加一个安全 Web 站点。”

建议您显示该警告,它可以保护您免受恶意脚本的攻击。将该域添加到“可信站点”区域以后,再从该站点访问数据时将不会收到警告信息。您可以在 Internet Explorer 5 的“安全设置”对话框中调整这一特定的安全选项(“通过域访问数据资源”)。要访问该对话框,单击“工具”菜单上的“选项”命令,然后单击“安全”选项卡。注意,Internet Explorer 4 使用“对标记为可安全执行脚本的 ActiveX 控件执行脚本”设置来控制跨域警告。

注意:这是确定恶意脚本进行未经授权的数据访问问题的最简单的方法,但这种方法假设:您信任所有有权向“可信站点”区域的服务器或文件共享发布数据的用户;或是系统管理员在发布包含数据绑定的 Office Web 组件的所有网页之前,检查了所有网页中的脚本并确定其中没有恶意脚本。有关数据访问页的安全问题的详细信息,请参阅在 Internet 或 Intranet 上发布数据访问页。(英文)

如果将 Data Source 控件的 UseRemoteProvider 属性设置为 TrueData Source 控件将修改连接字符串以使用远程数据服务,并指向网页的来源 Web 服务器。这种方法也可避免出现跨域数据访问警告。

使用 Microsoft Office Web 组件

创建 Office Web 组件有五种基本方法:

  • 在 Excel 中选择某一单元格区域或图表,或者创建一个列表或数据透视表报表,然后将其发布或另存为一个交互式 Web 页。请根据选项的提示将其保存为正确的组件(Spreadsheet、Chart 或 PivotTable)。

  • 向 VBA 用户窗体、Visual Basic 窗体或 Access 窗体添加组件之一。

  • 向 Microsoft Access 中的数据访问页添加组件之一。

  • 在 Microsoft FrontPage 中创建一个 Web 页,然后使用“组件”菜单插入某一 Office Web 组件。

  • 将组件插入到 Microsoft® Visual InterDev® 环境下的项目中。

从 Microsoft Excel 中发布组件

执行如下步骤之一,在 Microsoft Excel 中创建 Office Web 组件:

  • 在“文件”菜单上单击“另存为 Web 页”命令,在“另存为”对话框中选择“添加交互”复选框,然后单击“保存”按钮。

  • 在“文件”菜单上单击“另存为 Web 页”命令,在“另存为”对话框中单击“发布”按钮,在“发布为 Web 页”对话框中选择“添加交互对象”复选框并选择所需功能,然后单击“发布”按钮。

上面两种选项可以实现同样的功能:将 Excel 数据发布为 Web 页,这样用户即可在 Internet Explorer 中直接修订或更改数据。在 Excel 中选定的条目将决定在发布数据时使用的组件,如下表所示。

Excel 中选定的条目 用于发布的 Microsoft Office Web 组件
工作表、单个单元格、单元格区域、高级筛选列表、打印区域 Spreadsheet
数据透视表报表、扩展数据区(查询表)、经过自动筛选的列表 PivotTable
图表或 PivotChart® 报表 Chart(包含显示在 Spreadsheet 或 PivotTable 组件中的源数据)

“发布为 Web 页”对话框

在 Microsoft Excel 中的“文件”菜单上单击“另存为 Web 页”命令,可以发布整个工作簿(静态)或当前选定内容(交互或非交互)。如果在“另存为”对话框中单击“发布”按钮,将显示“发布为 Web 页”对话框,该对话框提供了保存 .htm 文件的更多选项。显示此对话框时,当前选择的所有条目都显示在“选择”列表中。如图 4 所示,在 Excel 工作簿中选择了某一单元格区域。

图 4:“发布为 Web 页”对话框

但是,您仍能选择要保存的内容。Excel 标识了所有能够发布的可用对象并将它们在“选择”框中列出。在图 5 中,“选择”列表显示了能够从工作簿中发布的默认条目列表。

图 5:可以发布的条目列表

如果您选择了“在‘工作表名称’上的条目”,将显示该工作表上所有条目的列表,如图 6 所示。

注意:当选择了“在‘工作表名称’上的条目”时,在“选择”列表中显示的工作表中指定区域只有打印区域和自动筛选列表。如果在“选择”列表中选择了“单元格区域”(而不是“在‘工作表名称’上的条目”),可以在单元格引用编辑框中按照格式 =DefinedName 手动输入要指定的区域。

图 6:选择了“在工作表名称上的条目”后显示的列表

在发布数据时,将提示您输入文件名。如果您试图将数据发布到现有文件,您将被提示替换文件或向现有文件添加数据。如果选择添加至文件,组件将发布于该文件已有信息的下面。

重新发布条目

请注意,在图 5 上部,“选择”列表的一个条目是“曾经发布过的条目”。只有在您已经从工作簿中发布过内容后该选项才可用。如果选中该选项,“选择”列表将显示当前工作簿曾经发布过的所有条目。工作簿储存了重新发布一个曾经发布过的条目所需的所有信息。因此,您可以多次发布某一特定条目,而不必进行重新设置。

未安装组件时的发布

要使用 Office Web 组件交互地浏览 Web 页,您必须拥有 Microsoft Office 2000 许可证。如果是在 Microsoft Office 软件包外获得 Excel 程序,您只能从 Excel 中进行交互发布,而不能查看发布之后所得到的 Web 页,因为 Excel 的单行版本不包含这些组件。虽然 Excel 的单行版本和 Microsoft Office Small Business 版本包含允许交互发布的选项,但是如果没有 Office Web 组件,您仍然不能查看交互发布的网页。

在使用 Office Web 组件发布 Web 页时,该页能够在用户计算机上启动基于 Web 的安装程序。在该页的源代码中,下列行被添加到页中作为对象定义的一部分:

codebase="file:\\installationpath\msowc.cab#version=version"

codebase 的路径或是指向 Office 2000 在网络服务器上的安装位置,或是指向由 Windows 注册表指定的位置,或是指向由 Excel 的“Web 选项”对话框中“文件”选项卡(“工具”菜单,“选项”命令,“常规”选项卡)指定的位置。

当用户在未安装 Office Web 组件的计算机上查看包含这些组件的网页时,在 Internet Explorer 中有两种可能的结果:

  • 如果您使用 codebase 属性或“Web 选项”对话框来指定下载 Office Web 组件的服务器的位置,Internet Explorer 将显示图 7 中所示的画面。

    图 7:未安装 Web 组件时显示的画面

    除了图 7 显示的画面外,还会显示图 8 中的对话框。

    图 8:Microsoft Office Web 组件安装程序提示

    如果用户单击 Yes(“是”),即可安装 Microsoft Office Web 组件并查看这些组件中的数据。

    注意:要在打开 Web 页时自动安装 Office Web 组件,打开 Web 页的用户必须能够建立对安装文件所在的 Windows 网络文件共享(如 \\MyServer\MyShare)的安全访问。Office Web 组件不能通过 HTTP、HTTPS 或 FTP 连接自动安装。因此,当用户直接从 Internet 上查看 Web 页时,不能直接从 Web 服务器(或者其他 HTTP 或 FTP 地址)自动安装 Office Web 组件。但是,如果用户已经安装了包含 Office Web 组件的 Office 2000, 就可以直接打开并使用数据访问页。另外,如果用户拥有 Office 2000 许可证,但是没有安装 Office Web 组件,并且确实拥有在注册表中配置的本地网络的安装位置,那么当用户直接从 Internet 上打开数据访问页时,即可自动安装 Office Web 组件。

  • 然而,如果 codebase 属性没有指定任何服务器,Internet Explorer 将显示如下信息,这里“Microsoft Office Web 站点”是指向 Microsoft Office 更新 Web 站点的链接:

    “要交互使用此 Web 页,您必须使用 Microsoft Internet Explorer 4.01 或更高版本以及 Microsoft Office Web 组件。详细信息请参阅 Microsoft Office Web 站点。”

有关查看 Web 页时安装 Microsoft Office Web 组件的详细信息,请参阅位于 http://www.microsoft.com/Office/ORK/2000/Journ/OWCInstall.htm(英文)的 Microsoft Office Resource Kit 杂志的文章“跨 Intranet 共享交互数据”,或者参阅位于 http://www.microsoft.com/Office/evaluation/prodinfo/WebCmpnt.htm(英文)的文章“Microsoft Office 2000 Web 组件”。

发布示例

下例使用了本文包含的文件 OWCExamples.xls。

电子表格示例

执行如下步骤来发布电子表格示例:

  1. 打开 OWCExamples.xls。

  2. 选择 OWCSS 工作表。

  3. 选择单元格 $B$6 并试着更改数据。由于本工作表受保护,您将不能修改 $B$6 的数据。

  4. 选择区域 $A$1:$B$6。

  5. 在“文件”菜单上,单击“另存为 Web 页”命令。

  6. 在“另存为”对话框中,单击“选择:$A$1:$B$6”。

  7. 选定“添加交互”复选框。

  8. 在“文件名”框中,键入“OWCSS.htm”,然后选择文件保存的位置。

  9. 单击“保存”。

在 Internet Explorer 中打开 OWCSS.htm,更改抵押信息,看到每月费用的改变了吗?它将随之变动。请注意,您无法更改每月费用单元格中的公式。由于该单元格在 Microsoft Excel 是受保护的,当它的数据发布以后,在 Internet Explorer 中也是无法更改的。要在 Internet Explorer 中查看 Spreadsheet 组件的帮助信息,请单击 Spreadsheet 组件工具栏上的“帮助”按钮。

图表示例

执行如下步骤来发布图表示例:

  1. 在 OWCExamples.xls 文件中,选择 OWCChart 工作表。

  2. 单击一次图表以选中它。

  3. 在“文件”菜单上,单击“另存为 Web 页”命令。

  4. 在“另存为”对话框中,单击“选择:图表”。

  5. 选定“添加交互”复选框。

  6. 在“文件名”框中,键入“OWCChart.htm”,然后选择文件保存的位置。

  7. 单击“保存”。

在 Internet Explorer 中打开 OWCChart.htm。请注意,Chart 和 Spreadsheet 组件都是可见的。当您更改 Spreadsheet 组件中的数据时,可以看到 Chart 组件也相应更新。

数据透视表列表示例

执行如下步骤来发布数据透视表列表的示例:

  1. 在 OWCExamples.xls 文件中,选择 OWCPT 工作表。

  2. 选择区域 $E$1:$G$31。由于它是数据透视表报表,您必须按下 SHIFT 键然后使用方向键来选择该区域。

  3. 在“文件”菜单上,单击“另存为 Web 页”命令。

  4. 在“另存为”对话框中,单击“发布”按钮。

  5. 在“选择”列表中,单击“在 OWCPT 上的条目”。

  6. 在“选择”列表下部,单击“PivotTable3($E$1:$G$31)”。

  7. 选定“添加交互对象”复选框。它将自动使用默认选项“数据透视表功能”。

  8. 在“文件名称”框中,键入“OWCPT.htm”,然后选择文件保存的位置。

  9. 单击“发布”按钮。

在 Internet Explorer 中打开 OWCPT.htm。请注意,数据透视表列表中包含数据。要查看 PivotTable 组件的帮助,单击 PivotTable 组件工具栏上的“帮助”按钮。

在 Microsoft Internet Explorer 中使用组件

现在我们来使用几个示例,看看能在 Internet Explorer 中得到什么。在三个组件中,只有 Spreadsheet 和 PivotTable 组件在 Internet Explorer 显示时为用户提供了与组件交互的方法。二者全部使用了工具栏和属性工具箱来实现用户的交互和操作。以下各节简要讨论了这些运行时用户界面。

理解 Spreadsheet 组件的用户界面

Spreadsheet 组件工具栏(如图 9 所示)是 Excel 标准工具栏的缩小版本。虽然您能够将整个工具栏关闭,但是不能只禁用或隐藏其中的一个按钮。

图 9:Spreadsheet 组件工具栏

Spreadsheet 组件工具栏中的很多按钮与 Excel 中对应按钮具有相同的基本功能。除了帮助外,在 Excel 中右键单击表格所打开的快捷菜单上的命令同样适用于电子表格的网格。Excel 功能和 Spreadsheet 组件功能的不同之处在下表中列出。

按钮 在 Spreadsheet 组件中的行为
撤消 可以撤消下列操作:排序、应用筛选、删除筛选、应用数字格式、更改单元格的值、粘贴、更改字体格式(字形、字号、粗体、斜体、颜色)、更改单元格格式(填充、对齐)、清空单元格以及插入列或行。
剪切复制粘贴 支持向剪贴板剪切、复制或粘贴 HTML 或文本,但不支持剪切、复制或粘贴 BIFF、RTF 或其他格式。

始终复制到操作系统剪贴板。

与 Excel 不同的是,在剪切、复制、粘贴操作中可以进行干预,这意味着您在复制一个单元格后不必立即粘贴。

自动求和 与 Excel 中的功能相同。
升序排序降序排序 与 Excel 中的功能相同。快捷菜单命令层叠到“排序”菜单上,列出了要排序的字段标题。在 Excel 中没有“排序”对话框。
自动筛选 在下拉列表中包含多个复选框来实现多选。

没有“前 10 个”或“自定义”选项。

您不能使用高级筛选功能。

导出到 Excel 打开 Microsoft Excel,并将所有数据从 Spreadsheet 组件复制到一个新的、只读的工作表中,该工作表名称为 OWCSheet#####.htm 格式(##### 为一随机数)。最多可有 65,536 行,这与 Excel 是一样的,但是从 A 到 ZZ 共计 676 列,而 Excel 只有 256 列可用。如果使用的列超出 256 列,那么当数据导出到 Excel 时,超出的列中的数据将丢失。
属性工具箱 显示 Spreadsheet 组件的属性工具箱。有关“属性工具箱”的详细信息,请参阅本文后面的“属性工具箱”一节。
帮助 显示 Microsoft 电子表格帮助。

理解 Chart 组件的用户界面

Chart 组件运行时不显示用户界面,没有工具栏或工具箱,快捷菜单中只有一个选项“关于”,它显示了标准的“关于 Microsoft Office Web 组件”对话框。如果图表的数据源(Spreadsheet 或 PivotTable 组件)可见,用户可以通过更改数据源中的数据来在运行时处理图表。Chart 组件包括“图表向导”,但是向导只有在适当的设计环境中使用时才能激活。本文后面的“在 FrontPage 中使用组件”一节中将讨论“图表向导”。

理解 PivotTable 组件的用户界面

PivotTable 组件也使用了工具栏和属性工具箱。PivotTable 组件工具栏(如图 10 所示)具有与 Excel 中的数据透视表工具栏相同的基本功能,但它还有其他一些控件。

图 10:PivotTable 组件工具栏

下表简述了 PivotTable 组件工具栏上控件的功能。

控件 控件类型 操作
关于 按钮 显示“关于 Microsoft Office Web 组件”对话框。
复制 按钮 将选定数据复制到剪贴板。
升序排序降序排序 切换 打开时,按升序或降序对列或行字段进行排序。关闭时,数据恢复到保存时的方式。与 Excel 中的数据透视表报表不同的是,空格被排在顶端。
自动筛选 切换 打开时,根据行字段或列字段下拉列表中复选框的状态(选中或未选中)来显示或隐藏条目。关闭时,所有条目都将显示。
自动计算 菜单 允许您选择使用求和、计数、最小值、最大值功能来汇总字段。可以被数据透视表列表的创建者禁用。
分类汇总 切换 显示或隐藏选定字段的分类汇总。
移动到行区域 按钮 将选定的列字段移动到行区域(选定内容变为行字段)。
移动到列区域 按钮 将选定的行字段移动到列区域(选定内容变为列字段)。
移动到筛选区域 按钮 将选定字段移动到筛选字段区域(选定内容变为筛选)。能够被数据透视表列表的创建者限制。
转到明细数据 按钮 将选定字段移动到明细(数据)区域。如果下面两个选项中有一个为真,则不能移动字段:数据透视表列表的创建者已限制对数据区的访问;数据透视表列表是基于来自 OLAP 数据库的源数据。
升级 按钮 将选定字段向外移动一级(通常从数据区域移动)。
降级 按钮 将选定字段向内移动一级(通常从数据区域移动)。
展开/折叠 切换 展开或折叠选定字段、数据条目或数据区域中单元格的数据明细。与在 Excel 中不同的是,这里只有一个按钮在“展开”和“折叠”之间切换。而在 Excel 中,它们是两个按钮。
刷新 按钮 从源列表或数据库更新数据。详细信息请参阅下一节“使用刷新按钮”。
导出到 Excel 按钮 启动或切换到 Excel,同时将数据以数据透视表报表格式复制到新的工作簿中。只有在需要进一步分析数据时才使用此功能。请使用“复制”向 Excel 电子表格传递数据。
属性工具箱 按钮 显示 PivotTable 组件的属性工具箱。有关属性工具箱的详细信息,请参阅本文后面的“属性工具箱”一节。
字段列表 按钮 显示数据透视表列表的源数据中可用字段的层次列表。
帮助 按钮 显示 Microsoft 数据透视表列表的帮助。

使用“刷新”按钮

如果数据透视表列表中的数据能够被刷新,则可以使用“刷新”按钮。但在以下几种情况中数据是不能被刷新的:

  • 由于网络故障,如数据源在防火墙的另一端,或者没有获得许可,将导致数据透视表列表不能连接到数据源。

  • 数据源不再存在。

  • 没有安装正确的提供程序。

  • 从 Web 查询或导入的文本中获得的数据不能刷新。

使用字段列表

字段列表(如图 11 所示)包含所有能够放置到 PivotTable 组件中的数据源字段。要将某字段放入数据透视表列表,只需将该字段从字段列表拖到数据透视表列表适当的拖放区域即可(行区域、列区域、筛选区域、数据区域)。

 

图 11:PivotTable 组件字段列表

属性工具箱

Spreadsheet 和 PivotTable 组件在设计时和运行时都使用属性工具箱(如图 12 所示)。Chart 组件只在设计时使用属性工具箱。在运行时单击“属性工具箱”按钮将显示工具箱的运行时版本。在设计时单击“属性工具箱”按钮将显示设计时的工具箱。设计时工具箱包括所有运行时工具箱的功能以及其他专门用于设计和安装的功能。

图 12:带有展开的“常规”和“格式”选项的运行时 Spreadsheet 属性工具箱

除了同时能够展开多个选项外,工具箱的功能类似于下拉菜单,如图 12 所示。单击工具栏上某一栏可以展开该工具箱的一部分。在属性工具箱上显示的栏根据组件中选定的内容而变化。例如,当选中了 PivotTable 组件中的行或列字段时,“排序”栏可用,而选中筛选字段或汇总字段时,该栏不可用。

如果 Web 页包含一个以上的组件,那么只显示一个属性工具栏。属性工具栏设置的变动将影响所有活动的组件。

在有模式对话框或窗体中,运行时的属性工具箱不可用。

通过 Microsoft Visual Basic 使用组件

Office Web 组件也可以运行于 VBA 用户窗体、Visual Basic 窗体和 Access 窗体上。为简单起见,我们将使用在任何 Office 应用程序中均可用的 Visual Basic 编辑器。

向 Visual Basic 编辑器中的用户窗体上添加 Office Web 组件

  1. 从任意 Office 应用程序中打开 Visual Basic 编辑器 (ALT+F11)。

  2. 插入新的用户窗体。

  3. 右键单击工具箱。

  4. 在快捷菜单上,单击“附加控件”命令。

  5. 在“附加控件”对话框中,选中“Microsoft Office Chart 9.0”、“Microsoft Office Data Source Control 9.0”、“Microsoft Office PivotTable 9.0”和“Microsoft Office Spreadsheet 9.0”复选框,然后单击“确定”。

  6. 将相应控件从工具箱拖动到用户窗体。

向 Microsoft Visual Basic 6.0 中的窗体添加 Office Web 组件

  1. 右键单击工具箱。

  2. 在快捷菜单上,单击“组件”命令。

  3. 在“组件”对话框中,选中“控件”选项卡上的“Microsoft Office Web Components 9.0”。

    六个新的控件显示在工具箱中。除了控件 SpreadsheetChartPivotTable ListData Source 外,您还将看到一个 Record Navigation 控件和一个 Expand 控件。由于这两个控件只用于数据访问页,此处不再进行讨论。

使用这种方式插入控件时,在默认情况下,这些控件不包含任何数据,必须通过它们的控件或通过编程向这些组件添加数据。以下各节中的示例显示了如何向这些控件中填充数据。代码示例包含在 OWCExamples.xls 工作簿中。某些示例代码中的注释内容包含详细信息,请充分利用这些代码。

使用 Spreadsheet 组件

有两种向 Spreadsheet 组件填充数据的方法:在设计时添加数据;在运行时获得数据。

在设计时添加数据

向组件中添加数据最简便的方式是直接键入数据或粘贴数据。在设计时向单元格中添加的内容将在运行时显示;但是,在运行时对电子表格中数据的更改不能被保存。所以在下一次显示组件时,出现的仍然是原始数据。

另一种向 Spreadsheet 组件添加数据的方式需要一个指向文件的 URL,该文件包含您要显示的数据;它可以是包含 HTML 格式表格的 Web 页,也可以是文本文件。创建该文件的最佳方式是:以 HTML 文件格式保存一个 Excel 文件,这样数据中的公式和全精度值都将包括在 HTML 的编码中。

在创建完包含要显示的数据的文件后,您可以使用设计时的属性工具箱中“导入数据”栏中的“URL”框来指向该文件,如图 13 所示。输入 URL 后,单击“立即导入”按钮从文件中获得数据。如果 URL 指向的这个文本文件或 HTML 表经常由数据库刷新或编译,为了动态地获得最新数据,您可能希望选中“运行时从 URL 刷新”复选框。请注意,“导入数据”选项只能用于从 URL 导入数据。它不能用于从 ODBC 数据源中导入数据。

图 13:Spreadsheet 属性工具箱的“导入数据”部分

在从 Web 页导入数据时,网页上第一个表中的数据将填入 Spreadsheet 组件中;Web 页格式也同时被导入。导入文本文件将只导入行数据。

在运行时获得数据

Spreadsheet 组件的四个属性使运行时向控件传递数据变得比较容易,这四个属性是:HTMLDataCSVDataHTMLUrlCSVUrl。数据属性允许您将 HTML 或逗号分隔的字符串传递到电子表格。URL 属性允许您将路径传递到 Web 页或逗号分隔的文本文件。下面的示例出现在 OWCExamples.xls 文件的 frmSS1 窗体中:

Private Sub UserForm_Initialize()
Dim strPath as String
strPath = "file://c:\windows\win.ini"
    ' 使用 Win.ini 文件中的内容填充电子表格。
    Spreadsheet1.CSVURL = strPath
End Sub

虽然不能直接将 ActiveX Data Objects (ADO) 的记录集传递给 Spreadsheet 组件,但是有一种 Recordset 对象的方法允许您以逗号分隔的字符串形式将记录集传递到 CSVData 属性。下面的示例出现在 OWCExamples.xls 文件的 frmSS2 窗体中:

Private Sub UserForm_Initialize()
    Dim cnn As ADODB.Connection
    Dim rst As ADODB.Recordset
Dim strPath as String
    
    Set cnn = New ADODB.Connection
    Set rst = New ADODB.Recordset
    strPath = "C:\Program Files\Microsoft Office\Office\Samples\NorthWind.mdb"
    cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
        "Data Source=" & strPath
    
    rst.CursorType = adOpenKeyset
    rst.Open "Customers", cnn
    
    ' 替换现有所有数据并从 A1 开始写入新数据。
    Spreadsheet1.CSVData = rst.GetString(adClipString, , ",")
    
    rst.Close
    cnn.Close
    
    Set rst = Nothing
    Set cnn = Nothing
End Sub

使用上面的方法有一定的局限性。在开始时,使用 CSVData 属性可替换从工作表的单元格 A1 开始的所有数据。如果您正在初始化该控件,则不会有问题,但如果该控件总是可见的,就可能会打乱窗体的布局。如果要在指定位置放置数据,请使用 ParseText 方法,如下所示:

Spreadsheet1.ActiveSheet.Range("B6").ParseText rst.GetString(), vbTab

另一个局限是,Recordset 对象的 GetString 属性将根据您指定的分隔符来分析数据。如果一个字段中包含该分隔符,该字段将被分析为两个字段,甚至被分析为独立的行。例如,包含逗号或回车的地址字段将会被分析为独立的几个字段或行。为了避免这种情况,示例文件 OWCExamples.xls 包含了一个自定义分析函数,它能够除掉多余的逗号、换行和回车。要了解更多内容,请参阅示例文件中 frmSS2 窗体中的代码注释。

在 Spreadsheet 组件中添加数据的方法是完全通过代码向单元格赋值。虽然在需要向电子表格添加大量数据时该过程非常费时,但它非常适用于简单的电子表格。下面的示例创建了一个简单的抵押计算器,可以在示例文件 OWCExamples.xls的 frmSS3 窗体下找到:

Private Sub UserForm_Initialize()
    ' 通过编程在指定的单元格中填入数据。
    ' 该示例在窗体中创建了一个抵押计算器。
    
    With Spreadsheet1.ActiveSheet
        .Range("A1").Value = "Mortgage Calculator"
        .Range("A2").Value = "Principal"
        .Range("A3").Value = "Down Payment"
        .Range("A4").Value = "Term in Years"
        .Range("A5").Value = "Annual Rate"
        .Range("A6").Value = "Payment"
        .Range("B2").Value = 250000
        .Range("B3").Value = 50000
        .Range("B4").Value = 30
        .Range("B5").Value = 0.075
        .Range("B6").Formula = "=PMT(B5/12,B4*12,B2-B3)"
    
    ' 自动调整功能将改变列尺寸。
        .Range("A:B").AutoFitColumns
    End With
End Sub

使用 Chart 组件

Chart 组件放置在用户窗体上以后,无法在设计时添加数据。右键单击 Chart 组件,然后单击快捷菜单中的“属性工具箱”命令,您可以对 Chart 组件的格式进行局部修改。Chart 组件在用户窗体中应用后,所有的数据和大部分的格式属性都必须通过编程设置。

在运行时向 Chart 组件中输入数据有多种方法。所有这些方法都要用到 SetData 方法来真正将数据写入 Chart 组件,因此将详细介绍此方法。SetData 方法应用于 WCChartWCErrorBarsWCSeries 对象并能向这三种对象输入数据。

SetData 方法有三个参数:DimensionDataSourceIndexDataReferenceDimension 参数引用图表中被填充数据的一部分。可用的维度常数为 SeriesNamesCategoriesValuesYValuesXValuesOpenValuesCloseValuesHighValuesLowValuesBubbleValuesRValuesThetaValues。这些常数每一种都引用了图表的一部分;例如,SeriesNames 常数引用了每个序列名,OpenValuesCloseValues 常数引用股票图的开盘价和收盘价等等。每个常数都是作为诸如 chDimSeriesNameschDimCategories 等窗体中的枚举常数而传递给该方法的。

DataSourceIndex 参数接受两个值:chDataLiteral(通知控件:DataReference 常数引用的是直接量),或者是引用该图表的 WCDataSources 集合中数据源的索引号。可以使用的数据源包括 ADO 记录集、Spreadsheet 组件、PivotTable 组件或 Data Source 控件。

可以通过 DataReference 参数向图表发送实际数据。当使用的 DataSourceIndex 参数值为 chDataLiteral 时,您可以向 DataReference 参数传递一维数组或以制表符间隔的字符串。如果使用 WCDataSources 集合中的数据源作为 DataSourceIndex 的参数时,您能够传递 Excel 风格的区域引用(例如,A1:A10)或者记录集的字段名。有关将区域引用传递到 SetData 方法的细节,将在本文后面的“示例 3:使用 Spreadsheet 组件”一节中说明。

下面三个示例显示了使用两种直接量数据和数据源的方法。第一个示例使用数组建立了一个股票价格升降图。第二个示例是从 ADO 记录集直接拖动数据。第三个使用了完全相同的 ADO 记录集,但是它被用于填充作为图表的实际数据源的电子表格。这些示例有两项要求:1)安装在默认位置的 Access 罗斯文商贸示例数据库 (c:\Program Files\Microsoft Office\Office\Samples);2)对 Microsoft ActiveX Data Objects 2.1 对象库的引用。

示例 1   使用数组

请注意,本示例中 SetData 方法的每一个常数都使用 chDataLiteral,这是因为我们正在传递数组中的直接量数据。下面的代码可以在 OWCExamples.xls 文件的 frmChart1 窗体中找到。

Private Sub UserForm_Initialize()
    Dim varCategories As Variant
    Dim varCloseValues As Variant
    Dim varLoValues As Variant
    Dim varHiValues As Variant
    Dim chtStock As OWC.WCChart
        
    varCategories = Array("1/3", "1/4", "1/5", "1/6", "1/7")
    varCloseValues = Array(116.5625, 112.625, 113.8125, 110, 111.4375)
    varLoValues = Array(112, 112.25, 109.375, 108.375, 107.4375)
    varHiValues = Array(118.625, 117.125, 116.375, 113.875, 112.25)
    
    ' 添加图表标题。
    With ChartSpace1
        .HasChartSpaceTitle = True
        .ChartSpaceTitle.Caption = "Microsoft Stock 1/3 - 1/7"
    End With
    
    ' 向 ChartSpace 对象添加图表。
    Set chtStock = ChartSpace1.Charts.Add
    chtStock.Type = chChartTypeStockHLC
    
    ' 指定记录集中的哪一个字段是值和标签。
    chtStock.SetData chDimCategories, chDataLiteral, varCategories
    
    With chtStock.SeriesCollection(0)
        .SetData chDimCloseValues, chDataLiteral, varCloseValues
        .SetData chDimHighValues, chDataLiteral, varLoValues
        .SetData chDimLowValues, chDataLiteral, varHiValues
    End With
    
    ' 指定轴的刻度。
    With chtStock.Axes(chAxisPositionLeft).Scaling
        .Maximum = 120
        .Minimum = 105
    End With
    
    ' 指定网格线。
    chtStock.Axes(chAxisPositionLeft).HasMinorGridlines = True
End Sub

示例 2   使用 ADO 记录集

本示例在用户窗体中只需要一个 Chart 控件。由于图表只有一个可用的数据源,所以在本示例和下一个示例中,SetData 方法都使用 0(零)作为 DataSourceIndex 参数所引用的索引号。本示例中的代码可以在 OWCExamples.xls 文件的 frmChart2 窗体中找到。

Private Sub UserForm_Initialize()
    Dim cnn As ADODB.Connection
    Dim rst As ADODB.Recordset
    Dim chtTopTen As OWC.WCChart
Dim strPath as String
    
    Set cnn = New ADODB.Connection
    Set rst = New ADODB.Recordset
    strPath = "C:\Program Files\Microsoft Office\Office\Samples\NorthWind.mdb"
    cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
        "Data Source=" & strPath
    
    ' 创建记录集。
    rst.CursorLocation = adUseClient
    rst.CursorType = adOpenDynamic
    rst.Open "SELECT DISTINCTROW TOP 10 [Products].[ProductName] " & _
        "AS TenMostExpensiveProducts, Products.UnitPrice FROM Products " & _
        "ORDER BY [Products].[UnitPrice] DESC;", cnn
    
    ' 连接图表和记录集并创建标题。
    With ChartSpace1
        .DataSource = rst
        .HasChartSpaceTitle = True
        .ChartSpaceTitle.Caption = "Ten Most Expensive Products"
    End With
    
    ' 向 ChartSpace 对象添加一个图表。
    Set chtTopTen = ChartSpace1.Charts.Add
    
    ' 指定记录集中哪一个字段是值和标签。
        With chtTopTen
        .HasLegend = True
        .SetData chDimCategories, 0, rst.Fields(0).Name
        .SetData chDimValues, 0, rst.Fields(1).Name
    End With
End Sub

示例 3   使用 Spreadsheet 组件

本示例要求用户窗体中包含 Chart 控件和 Spreadsheet 控件。本示例中的代码可以在 OWCExamples.xls 文件的 frmChart3 窗体中找到。

Private Sub UserForm_Initialize()
    Dim cnn As ADODB.Connection
    Dim rst As ADODB.Recordset
    Dim chtTopTen As OWC.WCChart
    
    Set cnn = New ADODB.Connection
    Set rst = New ADODB.Recordset
    cnn.Open "NorthWind"
    
    rst.CursorLocation = adUseClient
    rst.CursorType = adOpenDynamic
    rst.Open "SELECT DISTINCTROW TOP 10 [Products].[ProductName] " & _
        "AS TenMostExpensiveProducts, Products.UnitPrice FROM Products " & _
        "ORDER BY [Products].[UnitPrice] DESC;", cnn
        
    ' 使用记录集中的数据填充电子表格。
    Spreadsheet1.CSVData = rst.GetString(adClipString, , ",")
        
    ' 添加图表标题。
    With ChartSpace1
        .HasChartSpaceTitle = True
        .ChartSpaceTitle.Caption = "Ten Most Expensive Products"
    End With
            
    ' 将图表的数据源分配到电子表格。
        ChartSpace1.DataSource = Spreadsheet1
    
    ' 向 ChartSpace 对象添加图表。
        Set chtTopTen = ChartSpace1.Charts.Add
    
    ' 指定记录集中哪一个字段是值和标签。
        With chtTopTen
        .HasLegend = True
        .SetData chDimCategories, 0, "A1:A10"
        .SetData chDimValues, 0, "B1:B10"
    End With
End Sub

创建多图表布局

Chart 组件能够容纳一个以上的图表。但是,容纳多个图表只能通过编程实现。下面的示例显示的用户窗体中的 Chart 组件包含了两个图表。作为数据源的 Spreadsheet 组件包含单元格 A1:C5 中的数据。这些代码在同一 Chart 组件中创建了一个柱形图和一个圆环图。两个图表都使用 A 列作为分类标志,第一个图表使用 B 列作为数据,第二个图表使用 C 列作为数据。下面的代码可以在 OWCExamples.xls 文件的 frmChart4 窗体中找到。

Private Sub UserForm_Initialize()
    ChartSpace1.DataSource = Spreadsheet1
    
    ChartSpace1.Charts.Add 0
    ChartSpace1.Charts.Add 1
    
    With ChartSpace1.Charts(0)
        .Charts(0).SeriesCollection.Add
        .SeriesCollection(0).SetData chDimSeriesNames, 0, "B1"
        .SeriesCollection(0).SetData chDimCategories, 0, "A2:A5"
        .SeriesCollection(0).SetData chDimValues, 0, "B2:B5"
        .HasTitle = True
        .Type = chChartTypeColumnClustered
    End With
    
    With ChartSpace1.Charts(1)
        .SeriesCollection.Add
        .SeriesCollection(0).SetData chDimSeriesNames, 0, "C1"
        .SeriesCollection(0).SetData chDimCategories, 0, "A2:A5"
        .SeriesCollection(0).SetData chDimValues, 0, "C2:C5"
        .HasLegend = True
        .HasTitle = True
        .Type = chChartTypeDoughnut
    End With
End Sub

通过使用下表列出的属性,您可以控制多个图表的布局。前两个属性能够在属性窗口中设置;后两个属性必须通过代码设置。

属性 应用于 描述
ChartLayout ChartSpace 对象 控制行或列中是否显示多个图表,可接受如下值:

0   chChartLayoutAutomatic

1   chChartLayoutHorizontal

2   chChartLayoutVertical

ChartWrapCount ChartSpace 对象 控制某一行或列中图表的数目(如 ChartLayout 属性所确定)。
HeightRatio WCChart 对象 默认值为 100。如果有两个默认图表,则高度将是整个 ChartSpace 对象的 50%(200 的一半)。如果有两个默认图表,则每个图表的默认高度将是整个对象高度的 33%。单独一个图表的实际高度的百分比遵循如下公式:HeightRatio/(每一行的 HeightRatio 最大值之和)。
WidthRatio WCChart 对象 可以控制图表的宽度,其他方面和 HeightRatio 属性相同。

如果在行和列中同时存在多个图表,那么每一行或列将扩展为该行中最大的图表的比率。在图 14 中,图表左上角的 HeightRatio 属性设置为 200。图表右下角的 WidthRatio 属性设置为 200。其他比例设置保留为默认值。Chart 组件自身大小为 600x400,使用上面的设置后,第一行占据行空间的 66%,而第三列占据列空间的 50%。

图 14:在同一 Chart 组件中包含多个图表

使用 PivotTable 组件

您可以在设计时轻松地向 PivotTable 组件中输入数据,在运行时向其输入数据也比较容易。

在设计时获得数据

PivotTable 组件拥有一个在设计时连接现有数据的接口,在这一点上它是独一无二的。您可以使用属性工具箱的“数据源”部分来创建与任何 OLE DB 数据源的连接。单击“连接编辑器”按钮,根据向导的提示,按步骤创建数据源的连接字符串。

注意:虽然该选项在用户界面中可用,但是仍然不能在设计时将数据源设置为一个 Data Source 控件,即使是在包含了 Data Source 控件的 VBA 用户窗体中也不行。不过,我们可以在运行时将 PivotTable 组件的 Data Source 属性设置为一个 Data Source 控件。

在您已经使用了向导并连接到数据源后,属性工具箱的“数据源”部分中的“数据成员”列表(如图 15 所示)将会填入 PivotTable 组件所连接的数据库中的元素。指定这些条目之一后,字段列表将自动使用从该条目返回的所有字段进行填充。 如果要使用 SQL 语句或查询作为数据源,您必须在“命令文本”框中输入 SQL 语句或查询。

图 15:PivotTable 属性工具箱的“数据源”部分

在建立了连接并选择数据成员或输入命令文本后,您可以将字段从字段列表直接拖动到 PivotTable 组件的拖放区域。当包含 PivotTable 组件的窗体运行时,数据透视表列表将反映设计时移入的所有字段。用户可以移动或删除这些字段,但是在窗体关闭后,所有更改均不会被保存。

在运行时获得数据

在设计时连接数据源所需的信息,在运行时必须通过代码来指定。下面的示例显示了通过使用 ConnectionString 属性将 PivotTable List 控件连接到数据库、选择要在数据透视表列表中显示的字段以及使用 XML 文件作为数据源的方法。

示例 1   直接连接到数据库

本示例连接到罗斯文商贸示例数据库,并且使用 AutoLayout 方法将“客户”表中的所有字段填入数据透视表列表的数据区域。下面的代码可以在 OWCExamples.xls 文件的 frmPT1 窗体中找到。

Private Sub UserForm_Initialize()
Dim strPath as String
strPath = "c:\program files\microsoft office\office\samples\northwind.mdb"
    ' 创建罗斯文和 Customers 表的连接。
    PivotTable1.ConnectionString = "provider=microsoft.jet.oledb.4.0;" & _
        "data source=" & strPath
    PivotTable1.DataMember = "Customers"
    
    ' 自动填充 PivotTable 组件。
    PivotTable1.ActiveView.AutoLayout
End Sub

示例 2   指定放置字段的位置

本示例以上一示例为基础。它使用相同的连接,但没有自动填充数据透视表列表,而是使用 InsertFieldSet 方法将数据放置在不同的轴(筛选、行、数据)中。数据区域的字段使用 FieldSets 属性进行访问。FilterMember 属性用于设置 Country 字段的默认筛选。下面的代码可以在 OWCExamples.xls 文件的 frmPT2 窗体中找到。

Private Sub UserForm_Initialize()
Dim strPath as String
strPath = "c:\program files\microsoft office\office\samples\northwind.mdb"
    ' 创建罗斯文和 Customers 表的连接。
    PivotTable1.ConnectionString = "provider=microsoft.jet.oledb.4.0;" & _
        "data source=" & strPath
    PivotTable1.DataMember = "Customers"
    
    With PivotTable1.ActiveView
        .FilterAxis.InsertFieldSet .FieldSets("Country")
        .RowAxis.InsertFieldSet .FieldSets("Region")
        .DataAxis.InsertFieldSet .FieldSets("CompanyName")
        .DataAxis.InsertFieldSet .FieldSets("ContactName")
        .DataAxis.InsertFieldSet .FieldSets("Phone")
        .FieldSets("Country").FilterMember = "USA"
    End With
End Sub

示例 3   使用 XML 文件作为数据源

PivotTable 组件不能直接连接到 ADO 记录集。不过,ADO 记录集可以保存为一个 XML 文件并且 PivotTable 组件可以读取 XML 流。下面的代码(在示例文件的 frmPT3 窗体中)说明了保存 ADO 记录集然后将 PivotTable 组件连接到所保存的 XML 文件的过程。

Sub UserForm_Initialize()
    ' 创建记录集并保存为 XML 文件。
    Dim cnn As ADODB.Connection
    Dim rst As ADODB.Recordset
    Dim strPath As String
    Dim strNewLocation
    Set cnn = New ADODB.Connection
    Set rst = New ADODB.Recordset
    strPath = "C:\Program Files\Microsoft Office\Office\Samples\NorthWind.mdb"
    strNewLocation = "c:\customerlist.xml"
    cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
        "Data Source=" & strPath
        
    ' 创建记录集并保存为 XML 文件。
    With rst
        .CursorLocation = adUseClient
        .CursorType = adOpenDynamic
        .Open "Customers", cnn
        .Save strNewLocation, adPersistXML
    End With
    
    ' 将 PivotTable 组件连接到 XML 文件并
    ' 使用数据自动填充。
    With PivotTable1
        .ConnectionString = "Provider=MSPersist"
        .CommandText = strNewLocation
        .ActiveView.AutoLayout
    End With
End Sub

在 Microsoft FrontPage 中使用组件

在 Microsoft FrontPage 中,您可以编辑包含 Office Web 组件的网页,也可以创建新的使用 Office Web 组件控件的网页。

创建新网页

在新网页中插入 Office Web 组件是非常容易的。如果计算机中已经安装了 Office Web 组件,将鼠标指向 FrontPage 的“插入”菜单上的“组件”处,然后单击要插入的组件。该组件将插入到当前插入点。

向 Web 页插入 Office Web 组件后,FrontPage 不但插入基本的 <object> 标记来执行选定组件,而且还插入一组默认的参数和标记。要查看这些代码,请单击 FrontPage 中的 HTML 选项卡。

要在 FrontPage 中创建 Spreadsheet 和 PivotTable 组件,您只需象在 Visual Basic 或 Access 中一样选择这些组件并操作其控件。但是,在您向文档中插入 Chart 组件时,如果该 Web 页中有可用的数据源,FrontPage 将自动使用 Microsoft Office 图表向导提示您创建该组件。如果没有可用的数据源,您将收到说明信息,不会显示图表向导(请注意,图表向导不能用在 Visual Basic 编辑器中。)

Microsoft Office 图表向导(如图 16 所示)和 Microsoft Excel 中的图表向导非常相似。但是,由于 Chart 组件只支持平面图表而不支持三维图表,可用的图表类型和 Excel 有所不同。

图 16:Microsoft Office 图表向导的步骤 1

通过图表向导将 Chart 组件添加到 Web 页后,FrontPage 也向网页添加了 Data Source 控件,该控件用来将 Chart 控件绑定到所用的数据源。从网页上删除 Data Source 控件后,将得到空的图表。

修改现有网页

要修改已发布的包含 Office Web 组件的网页,只需在 FrontPage 中打开它。虽然由 Microsoft Access 创建的数据访问页能够在 FrontPage 中编辑,我们仍建议您使用 Access 来编辑它们。打开网页后,Office Web 组件的结构和它的支持代码都可以修改。要通过组件的工具栏和属性工具箱修改组件,应首先单击 FrontPage 的“普通”选项卡,然后单击一次控件以进入该控件的编辑模式。

修改 PivotTable 组件网页

  1. 进入 FrontPage,打开在本文前面的“发布示例”一节中创建的文件 OWCPT.htm。单击“普通”选项卡。

  2. 在数据透视表列表中,每个城市都包含“平均收入”和“平均房价”两行。要合并计算这些行,单击标题栏(应包含诸如“PivotTable3”等文字)来选择整个数据透视表列表,然后单击工具栏上的属性工具箱。

  3. 在属性工具箱中,单击“汇总”部分,在“汇总方向”框中,选择“列”。现在,数据显示为两列。

  4. 保持选中整个数据透视表列表状态,单击“显示/隐藏”部分然后单击“拖放区域”按钮,来去掉数据透视表列表中的文字“将列字段拖动到此处”。

  5. 单击“格式”部分并给数据透视表列表一个标题:平均收入和房价。

  6. 要更改列标题,请单击“Sum of Average Home Price”(平均房价总计)单元格,然后单击属性工具栏中的“汇总说明”栏,删除文本“总计”。同样删除“Sum of Average Income”(平均收入总计)单元格的文本“Sume of”(总计)。

  7. 要去掉每行的展开指示器,请单击“City”(城市)单元格,然后单击属性工具箱中的“显示/隐藏”栏。单击“展开指示器”按钮来去掉每一行边上的加号 (+)。

组件包含的代码

在 Web 页上创建 Office Web 组件需要同时使用 HTML 和 XML 代码。本节介绍了组件包含的代码。

<Object> 标记

<object> 标记识别 Web 页上使用的 Office Web 组件的类型、组件的 ClassID 和 codebase 属性(有关该属性的详细信息,请参阅本文前面的“未安装组件时的发布 msowcbasics_topic2a”一节),如下面的示例所示。

用于 Spreadsheet 组件时发布的 <object> 标记:

<object id="SpreadSheet1" classid="CLSID:0002E510-0000-0000-C000-000000000046">

用于 Chart 组件时发布的 <object> 标记:

<object id="Chart1" classid="CLSID:0002E500-0000-0000-C000-000000000046" width="80%" height="80%">

用于 PivotTable 组件时发布的 <object> 标记:

<object id="PivotTable1" classid="CLSID:0002E520-0000-0000-C000-000000000046">

用于 Data Source 控件时发布的 <object> 标记:

<object id="msodsc" classid="CLSID:0002E530-0000-0000-C000-000000000046">

<Param> 标记

在 <object> 的开始标记和结束标记之间有很多 <param> 标记。这些标记包含该组件在 Internet Explorer 中设置显示格式的信息。当组件从 Microsoft Excel 中发布时,最后一个 <param> 标记包含从 Excel 导出的实际数据。在这个 <param> 标记中,数据通过 name 属性标识为 HTML 或 XML 文件。

<param name=XMLData value=...>
<param name=HTMLData value=...>

因为在 <param> 标记中的 value 属性中的数据是编码,所以很难阅读。如下面由 FrontPage 创建的 HTMLData 代码所示:

&lt;x:ExcelWorkbook&gt;
  &lt;x:ExcelWorksheets&gt;
   &lt;x:ExcelWorksheet&gt;

HTML 或 XML 编码使用了 ISO Latin-1 字符集,某些字符还使用了 HTML 命名实体的引用或十进制代码。您使用下表即可解读这些数据,表中包含几种更为常用的编码字符。

编码文本 实际文本 编码类型
&lt; < 命名实体
&gt; > 命名实体
Tab 十进制代码
行末尾 十进制代码
回车 十进制代码
&quot; "(双引号) 命名实体
&amp; & 命名实体

前面显示的代码实际应解读为:

<x:ExcelWorkbook>
  <x:ExcelWorksheets>
   <x:ExcelWorksheet>

>注意:可以在 Dynamic HTML Reference and Software Development Kit(《动态 HTML 参考和软件开发包》)(Microsoft Press, 1999) 一书的 1331 页找到完整的 ISO Latin-1 字符集表。

修改 FrontPage 中的代码

在您理解了组件中的下一级 HTML 代码后,修改一个包含 Office Web 组件的网页就变得比较容易了。在“普通”视图中选中的组件,其对应的 HTML 代码在 HTML 视图中也同时选中,因此您能够查看一个指定组件的代码。然后,您可以不通过组件的用户界面来更改指定的属性或内容。如前所述,某些 HTML 代码是编码的,所以很难编辑。请注意,一旦编码的 HTML 代码被修改,Microsoft 就不再支持它了。Microsoft 建议您只通过 Web 组件自身的用户界面修改它们,而不要修改它们后面的代码;您若更改代码,应自行承担风险。

FrontPage 中的脚本

在 FrontPage 中向组件添加脚本也很容易。组件脚本可以使用 VBScript 或 Microsoft® Jscript® 来编写,但由于本文的需要,我们只使用了 VBScript 示例。要熟悉这些组件并了解使用脚本能怎样处理组件,最好是查看它们的对象模型并熟悉每一种对象、方法和属性。

在对象浏览器中查看一个组件

  1. 打开 OWCExamples.xls 示例文件。

  2. 按下 ALT+F11 来打开 Visual Basic 编辑器。

  3. 单击工具栏上的“对象浏览器”按钮。

  4. 在对象浏览器左上角的下拉列表中,单击 OWC

左下角的“类”窗格中显示了所有的属性和常数。右下角的“成员”窗格显示出和左边窗格选定对象相关联的方法、属性和事件,或者是显示左边窗格中选定常数的数字值。

要查看 Office Web 组件对象模型的图形化表示,请参阅 Msowcvba.chm 帮助文件或“Microsoft Office Web 组件对象模型”(英文)。

在前面“通过 Visual Basic 使用组件”中显示的示例同样适用于 VBScript,此处不再全部重复,而仅为每个组件显示一个示例,说明应使用的语法。

当您在将 Visual Basic 或 VBA 代码改为 VBScript 代码时,必须注意如下事项:

  • 任何添加到 Web 页的脚本都必须位于 <script> 开始标记和结束标记之间,更外层是 <html> 的开始标记和结束标记。

  • 脚本内容前后还应有 HTML 的注释标记(<!-- 和 -->),这样较早版本的浏览器将忽略这些脚本。

  • 所有变量都是变体。

  • 您不能创建对类型库的引用:因此,所有对象都必须通过使用 CreateObject 函数来创建,例如:
Set cnn = CreateObject("ADODB.Connection")
  • 您可以使用 Option Explicit 语句,但是必须自行添加。

  • VBScript 不支持命名常数。如果 Internet Explorer 脚本引擎遇到它们,该常数将作为未初始化的变量处理(值为 0)。要使用 Office Web 组件的命名常数,您必须通过使用 Constants 属性来创建对该常数的引用(如下所示),然后用该对象命名常数。如果使用其他库(如 ADO)中的常数,请确保您使用了该常数对应的数字值。
Set c = ChartSpace1.Constants
Set cht = ChartSpace1.Charts.Add()
cht.Type = c.chChartTypeBubble

因为没有通过窗体载入组件,所以不需要在 VBScript 示例中使用“Sub UserForm_Initialize()”。在这些示例中,我们将从 Window 对象的 Load 事件中开始运行代码。要使用 VBA 示例中的代码,请使用 <script> 标记括住代码,然后将其放入包含相应组件的 Web 页 <html> 标记中。

电子表格示例

<script language="VBScript">
<!--
Sub Window_Onload()
    strPath = "file://c:\windows\win.ini"
    Spreadsheet1.CSVURL = strPath
End Sub
-->
</script>

图表示例

<script language="VBScript">
<!--
Sub Window_Onload()
    strPath = "c:\program files\microsoft office\office\samples\northwind.mdb"
    ' 创建记录集。
    Set cnn = CreateObject("ADODB.Connection")
    cnn.Open "provider=microsoft.jet.oledb.4.0;" & _
        "data source=" & strPath
    Set rst = CreateObject("ADODB.Recordset")
    ' 注意使用数字值而非常数。
    rst.CursorLocation = 3
    rst.CursorType = 1
    rst.Open "SELECT DISTINCTROW TOP 10 [Products].[ProductName] AS " & _
        "TenMostExpensiveProducts, Products.UnitPrice FROM Products ORDER BY " & _
        "[Products].[UnitPrice] DESC;", cnn
    ' 将图表与记录集连接并创建标题。
    With ChartSpace1
        .DataSource = rst
        .HasChartSpaceTitle = True
        .ChartSpaceTitle.Caption = "Ten Most Expensive Products"
    End With
    Set c = ChartSpace1.Constants
    ' 向 ChartSpace 对象添加图表。
    Set chtTopTen = ChartSpace1.Charts.Add
    ' 指定记录集中的哪个字段是数值和标签。
    chtTopTen.HasLegend = True
    chtTopTen.SetData c.chDimCategories, 0, rst.Fields(0).Name
    chtTopTen.SetData c.chDimValues, 0, rst.Fields(1).Name
End Sub
-->
</script>

数据透视表示例

<script language="VBScript">
<!--
Sub Window_Onload()
    strPath = "c:\program files\microsoft office\office\samples\northwind.mdb"
    ' 创建罗斯文与 Customers 表的连接。
    PivotTable1.ConnectionString = "provider=microsoft.jet.oledb.4.0;" & _
        "data source=" & strPath    
    
    PivotTable1.DataMember = "Customers"
    ' 自动导入数据透视表。
    PivotTable1.ActiveView.AutoLayout
End Sub
-->
</script>

在数据访问页中使用 Microsoft Office Web 组件

本节讨论在 Access 环境中使用 Office Web 组件。这些组件最适合用于数据访问页。虽然 Office Web 组件能够放置在 Access 窗体中,但是在设计时根本无法修改;如果组件放置在 Access 窗体上,您必须通过代码来修改它们或向它们传递数据。

要在数据访问页中放置组件,只需单击工具栏上的相应按钮,然后在页上将光标移到想要显示它的位置并单击即可。

使用 Spreadsheet 组件

当 Spreadsheet 组件放置在数据访问页上以后,如果在单元格中输入如下公式(controlname 为数据访问页上控件的名称),它就能够从数据访问页上的其他控件获得数据:

=document.controlname.value

例如,如果数据访问页包含名为 Text1 的控件,以下公式将返回该控件中的值:

=document.Text1.value

使用 Chart 组件

如果将 Chart 组件添加到一个现有数据库中的数据访问页上,将出现图表向导来引导您完成创建图表的操作。如果数据访问页包含一个数据透视表或 Spreadsheet 组件,您可以选择不使用数据库,而是使用组件作为数据源,如图 17 所示。

 

图 17:Microsoft Office 图表向导的步骤 2

使用 PivotTable 组件

有两种向数据访问页添加 PivotTable 组件的方法:

  • 单击数据访问页工具箱上的“Office 数据透视表”工具,然后在您要放置 PivotTable List 控件左上角的数据访问页的位置上单击。与 Microsoft Excel 类似,Access 使用 Data Source 控件将数据透视表连接到数据源。如果您将 PivotTable List 控件放置在数据访问页上然后来到属性工具箱的“数据源”部分,将发现“数据源控件”选项已经被选中,并且数据库中的表已经显示在“数据成员”列表中,如图 18 所示。正在使用的 Data Source 控件被隐藏并且不能修改。

    图 18:PivotTable 属性工具箱的“数据源”部分

  • 您还可以通过显示字段列表然后将表或查询拖动到数据访问页上来添加 PivotTable 组件。随后出现的布局向导将提示您作出选择:该表或查询作为独立控件还是作为数据透视表列表插入页中,如图 19 所示。

    图 19:数据访问页布局向导

    如果单击“数据透视表列表”,Access 将创建不包含可见控件的数据透视表列表,并且数据区域也不显示所有字段。要将字段移动到不同区域或查看 PivotTable 组件工具栏,右键单击数据透视表然后单击快捷菜单上的“属性工具箱”命令。您能够使用属性工具箱上的“显示/隐藏”栏来显示拖放区域、工具栏和其他数据透视表列表的元素。

总结

本文讨论了从 Microsoft Excel 中发布 Microsoft Office Web 组件以及在几种环境(Internet Explorer、Visual Basic 编辑器、Microsoft FrontPage 和 Microsoft Access)中使用它们的方法。这些组件能够有效地向您的 Web 解决方案添加数据访问特性。本文应该能够在向工程添加这些组件方面给您一个良好开端。如果您要更深入地了解这些组件的使用方法和功能,此处还提供了很多可用的其他资源。其中列在参考资料中第一位的是有关 Office Web 组件方面的最佳资源。

posted @ 2008-08-15 16:15  acme  阅读(1327)  评论(0编辑  收藏  举报