- 相关推荐
Excel Web组件的应用(一)
一、选题目的和意义
微软的Excel是目前最经常用到的办公软件之一,其功能是十分强大的。现在几乎所有的电脑上都会安装该软件。然而当今是一个信息共享的网络时代,单机版的Excel在实现信息共享方面就会显的麻烦,不好维护。因此微软推出了Office Web Components(简称OWC)这一组件。它能够将Excel的功能在互联网上采用浏览器的方式使用。即用Office Web Components设计系统,省掉了对客户端的安装和维护工作。
通过对Office Web Components的学习和设计,对其原理有一个深入的了解。并且希望通过这次的实践运用所学知识,来培养我的动手能力,故选择Excel Web 组件作为我的毕业课题。
二、本选题在国内外的研究现状和发展趋势
本课题在国内外的研究还是比较广泛的,也涌现出了大量的应用软件,但是很难有比较通用的。这主要是因为每个企业、单位现状都是不同的。Excel 2000提供各种不同全新功能,主要是设计来帮助使用者进行协同作业与信息分享,并通过Web来执行更加深入细致的数据分析。为迎合这一要求,Office 推出了Office Web Components(OWC)这一组件。Excel与Web整合所产生的最重要的效益之一,便是所有的使用者只需要使用游览器便可以游览丰富的Excel文件內容。因此OWC当前不仅大量应用于Internet,在Intranet中也得到了广泛的使用。因此本课题在国际上得到大力发展的趋势是必然的。
三、课题设计方案 [主要说明:研究(设计)的基本内容、观点及拟采取的研究途径。]
研究设计的基本内容是:
Office Web Components的三个组件的研究和掌握:
Spreadsheet 组件: Spreadsheet 组件能够在 Internet Explorer 中提供类似 Excel 的功能。Spreadsheet 组件使您可以获得一个完整的电子表格、某一单元格区域或某一命名区域(如打印区域、自动筛选区域或用户定义名称区域)并将其发布到 Web 页。
PivotTable 组件: PivotTable 组件允许用户通过向 Web 页添加排序、分组、筛选、分级和其他数据处理功能来分析数据。本组件将 Excel 的列表功能(排序、自动筛选和分级)和数据透视表报表的自动汇总功能结合运行于 Internet Explorer 中的单一 ActiveX 组件中。
Chart 组件: Chart 是 Microsoft Office 使用的数据绑定 ActiveX 组件,用于向 Web 页添加图表功能当该组件从 Excel 中发布以后,根据图表数据在电子表格中的位置不同(在某区域中或在数据透视表报表中),得到的 Web 页将不仅包含 Chart 组件,还包含 Spreadsheet 组件或 PivotTable 组件。
四、计划进度安排 [主要说明:起止时间及分阶段的进度要求。]
毕业论文(设计)的进度计划:
第一阶段: 起止时间:2005.11.1-2005.11.22
进度要求:尽快了解论文大体构架,搜集相关资料, 撰写开题报告书。
第二阶段: 起止时间:2005.11.23-2005.12.24
进度要求:确定论文具体要论述的内容,撰写论文。
第三阶段: 起止时间:2005.12.25-2006.1.15
进度要求: 论文基本完成,提交指导老师修改,准备答辩。
五、主要参考文献
[1] David stearns.Programming Microsoft Office 2000 Web Components.Microsoft Corporation.
2004,5.
[2] 北京宏远电脑培训中心.Office 2000综合应用短期培训教程.北京工业大学出版社.
[3] China Microsoft.Microsoft Office 2000 Web 组件基础.
library/archives/library/techart/msowcBasics.asp.
[4] 李祥平、刘书秀等.图解精通 Office 2003.中国水利水电出版社. 2004,1.
指导教师意见及建议
摘要:本文介绍了什么是Microsoft Office Web Components(简称OWC),以及可以在什么地方使用它们。Microsoft Office Web Components主要包括三种组件: Spreadsheet 组件、Chart 组件和 PivotTable 组件。它们是用于向 Web 页添加电子表格、图表和数据处理功能的 ActiveX 组件的集合。由于 Office Web 组件是完全可编程的,因此在很多设计环境中都可以使用这些组件来建立复杂的、交互的和基于 Web 的解决方案。这些设计环境包括 Microsoft FrontPage、Microsoft Access 数据访问页以及 Microsoft Visual Basic。当然也可以直接在 Microsoft Excel 中发布这些 Office Web 组件。以下我将主要介绍从 Excel 中发布 Microsoft Office Web 组件的方法。然后我们将重点针对Spreadsheet 组件(电子表格组件)进行深入研究。在Microsoft FrontPage中通过VBScript采用面向对象的方法展示使用电子表格组件编程模式的关键所在,实现Web页与Excel的交互功能。
关键词:OWC,ActiveX, Spreadsheet Component, Chart Component, PivotTable Component, VBScript, Excel.
1 Office Web Components 介绍
Microsoft的Office Web 组件首次包含在 Microsoft Office 2000 中。它们是用于向 Web 页添加电子表格、图表和数据处理功能的 ActiveX 组件的集合。在使用 Microsoft Internet Explorer 浏览包含 Office Web 组件的 Web 页时,您可以直接在 Internet Explorer 中处理显示的数据,如对数据进行排序和筛选,输入新的数值,展开和折叠明细数据,进行行列旋转以查看源数据的不同汇总信息等。Office Web 组件能够提供所有这些功能。
该组组件可以在Web页中实现Excel的许多常见功能,并可以通过编写脚本代码来添加一些组件中所缺少的功能。OWC是一组COM组件(COM也被称作ActiveX)。利用这些组件,可以在Web游览器以及其他传统的编程环境下创建许多有用的数据处理与报表生成的解决方案。
OWC的最大特点是它可以在Web页面、FrontPage、Visual Basic等组件容器中使用,也可在内存中做为不可见的使用 。OWC中的所有组件都支持丰富的编程接口集合,使得开发者可以通过Microsoft VBScript、Microsoft Jscript、Microsoft VBA、Java、C++等多种语言来调用这些组件。
OWC共有四种 Office Web 组件:Spreadsheet 组件(电子表格组件)、Chart 组件(图表组件)、 PivotTable 组件(透视表组件)和Data Source组件(数据源组件)。其中Data Source 组件,用于将其他组件绑定到一个数据源;这个组件在 Access 的数据访问页中广泛使用,本文不做重点讨论。在下面的章节,我们将首先介绍前三种组件的主要功能。
2 组件介绍
2.1 电子表格组件
Spreadsheet 组件像一个Excel电子表格的精简版,能够在 Internet Explorer 中提供类似 Excel 的功能。使用这个组件,可以对数值进行过滤、排序和滚动数据,也可以改变和重新计算数据;还可以保护单元不被修改;甚至可以将数据重新装载到Excel2000中。该组件如图 1 所示。
图 1:显示在 Internet Explorer 中的 Spreadsheet 组件
当数据从 Excel 中发布时,Spreadsheet 组件将自动使用这些数据对电子表格进行填充。另外也可以通过编程来填充 Spreadsheet 组件。
Spreadsheet 组件在 IE 中可提供如下功能:<1>支持 Excel 2000 中的大部分功能;2>重新计算引擎;<3>基本的电子表格格式;<4> 简单的电子表格用户界面;<5>自动筛选;<6>数据排序;<7>多重撤消。
2.2 数据透视表组件
PivotTable 组件是为了提供交互的数据报表和分析功能而设计的。允许用户在 Web 页中使用排序、筛选、分级等功能来分析数据。本组件将 Excel 的数据透视表报表的自动汇总功能和列表功能(排序、自动筛选和分级)相结合,运行于 Internet Explorer 中。
数据透视表列表中的源数据可以来自 Excel 电子表格、任何列表形式的 OLE DB 或 ODBC 数据源,或者用于 OLAP 服务的 Microsoft OLE DB 提供程序所支持的任何 OLAP 数据源。
要理解数据透视表报表和列表的工作方式,应熟悉如下区域,如图 2 所示:
图 2:未填充的 PivotTable List 组件,显示筛选区域、列区域、行区域和汇总/明细区域
拖放区域 用于数据透视表列表中,能够将字段拖放到该区域。
筛选区域 数据透视表列表的顶端拖放区域。用于整个数据透视表列表的筛选。在筛选区提供了所有条目的下拉选择列表。选中特定的条目将只允许该条目显示在数据区域/明细数据区域。
行区域 左边的拖放区域。用于行的分组。
列区域 筛选区域下面的区域。用于列的分组。
数据区域 数据透视表列表的主要部分。用于所有的总计(求和、计数、最小值、最大值)和
列表。
明细数据区域 也是数据透视表列表的主要部分。用于支持明细数据的字段(即没有应用总计功能)。您可以通过单击 PivotTable 组件工具栏上的“展开/折叠”按钮来显示此区域。
PivotTable 组件提供如下功能:<1>交叉列表(能够旋转行列以查看源数据的不同汇总信息);<2>浏览报表数据;<3>动态筛选(自动筛选、按选定内容筛选、筛选字段)和排序;<4>按行或按分组;<5>创建总计。
2.3 图表组件
Chart用于向 Web 页添加图表功能。该组件从 Excel 中发布以后,根据图表数据在电子表格中的位置不同(在某区域中或在数据透视表报表中),得到的 Web 页将不仅包含 Chart 组件,还包含 Spreadsheet 组件或 PivotTable 组件。在 Internet Explorer 中查看 Chart 组件时,对 Spreadsheet 或 PivotTable 组件中数据的更改将自动显示在 Chart 组件中。如图 3 所示:
图 3:从 Excel 中发布的 Chart 组件
如果从 Microsoft Excel 中发布 Chart 组件,它将自动绑定到包含其数据的 Spreadsheet 或 PivotTable 组件。但是也可以通过编程将 Chart 组件绑定到一个数据源,或者可以提供数据以便使用代码制图。
3 创建 Office Web 组件
3.1 从 Microsoft Excel 中发布组件
在 Microsoft Excel 中创建 Office Web 组件有两种方式:
<1>在“文件”菜单上单击“另存为 Web 页”命令,在“另存为”对话框中单击“发布”按钮,在“发布为 Web 页”对话框中选择“添加交互对象”复选框并选择所需功能,然后单击“发布”按钮。
<2>在“文件”菜单上单击“另存为 Web 页”命令,在“另存为”对话框中选择“添加交互”复选框,然后单击“保存”按钮。
以上两种方法都可以将 Excel 数据发布为 Web 页,这样用户便可以在IE 中直接修订或更改数据。
在 Excel 中选定的条目将决定在发布数据时使用的组件,如表1所示。
表1 Excel 中发布的条目与相应的组建对照表
当试图将某些电子表格导入HTML中时,可能会遇到错误信息。如果源电子表格是受口令保护的(通过使用工具|保护|保护工作表命令),Excel就不会允许将电子表格或任何区域发布到Web页面中。因为Web页面是纯文本的文件,任何人都可以在任何文本编辑器中打开,浏览和修改它,所以如果允许这样作的话,就会破坏安全性。当电子表格的作者需要防止用户修改某部分时,电子表格就会常常被密码保护。例如,Excel中的公司开支报告就常常被密码保护,以防止员工不能修改有效性验证规则的公式。
请注意,还可以通过使用“保护”功能来锁定大多数的单元,以使用户只能修改那些指定可以更新的单元。只要不使用口令来保护电子表格,就可以将电子表格发布或者拷贝到电子表格组件中,而且所有的保护设置都会被保留。
3.2 在 Microsoft Internet Explorer 中使用组件
在Internet Explorer显示时只有 Spreadsheet 和 PivotTable 组件为用户提供了与组件交互的方法。二者均使用了工具栏来实现用户的交互和操作。以下将简要讨论组件运行时的用户界面。
3.2.1 Spreadsheet 组件的用户界面
Spreadsheet 组件工具栏(如图 4 所示)。可以说是 Excel 标准工具栏的精减版本。
图 4:Spreadsheet 组件工具栏
Spreadsheet 组件工具栏中的很多按钮与 Excel 中对应按钮具有相同的基本功能。除了帮助外,在 Excel 中右键单击表格所打开的快捷菜单上的命令同样适用于电子表格的网格。
表2 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 电子表格帮助。
3.2.2 PivotTable 组件的用户界面
PivotTable 组件工具栏(如图5 所示)具有与 Excel 中的数据透视表工具栏相同的基本功能,但它还有其他一些组件。
图 5:PivotTable 组件工具栏
下表简述了 PivotTable 组件工具栏上组件的功能。
表3 PivotTable 组件功能
组件 组件类型 操作
关于 按钮 显示“关于 Microsoft Office Web 组件”对话框。
复制 按钮 将选定数据复制到剪贴板。
升序排序、降序排序 切换 打开时,按升序或降序对列或行字段进行排序。关闭时,数据恢复到保存时的方式。与 Excel 中的数据透视表报表不同的是,空格被排在顶端。
自动筛选 切换 打开时,根据行字段或列字段下拉列表中复选框的状态(选中或未选中)来显示或隐藏条目。关闭时,所有条目都将显示。
自动计算 菜单 允许选择使用求和、计数、最小值、最大值功能来汇总字段。可以被数据透视表列表的创建者禁用。
分类汇总 切换 显示或隐藏选定字段的分类汇总。
移动到行区域 按钮 将选定的列字段移动到行区域(选定内容变为行字段)。
移动到列区域 按钮 将选定的行字段移动到列区域(选定内容变为列字段)。
移动到筛选区域 按钮 将选定字段移动到筛选字段区域(选定内容变为筛选)。能够被数据透视表列表的创建者限制。
转到明细数据 按钮 将选定字段移动到明细(数据)区域。如果下面两个选项中有一个为真,则不能移动字段:数据透视表列表的创建者已限制对数据区的访问;数据透视表列表是基于来自 OLAP 数据库的源数据。
升级 按钮 将选定字段向外移动一级(通常从数据区域移动)。
降级 按钮 将选定字段向内移动一级(通常从数据区域移动)。
展开/折叠 切换 展开或折叠选定字段、数据条目或数据区域中单元格的数据明细。与在 Excel 中不同的是,这里只有一个按钮在“展开”和“折叠”之间切换。而在 Excel 中,它们是两个按钮。
刷新 按钮 从源列表或数据库更新数据。
导出到 Excel 按钮 启动或切换到 Excel,同时将数据以数据透视表报表格式复制到新的工作簿中。只有在需要进一步分析数据时才使用此功能。请使用“复制”向 Excel 电子表格传递数据。
属性工具箱 按钮 显示 PivotTable 组件的属性工具箱。
字段列表 按钮 显示数据透视表列表的源数据中可用字段的层次列表。
帮助 按钮 显示 Microsoft 数据透视表列表的帮助。
3.3 在 Microsoft FrontPage 中使用组件
3.3.1 创建新网页
FrontPage 的“插入”菜单上的“组件”处,单击要插入的组件。该组件将插入到当前插入点。
注意向文档中插入 Chart组件时,如果该 Web 页中有可用的数据源,FrontPage 将自动使用 Microsoft Office 图表向导提示创建该组件。如果没有可用的数据源,将收到说明信息。通过图表向导将 Chart 组件添加到 Web 页后,FrontPage 也向网页添加了 Data Source 组件,该组件用来将 Chart 组件绑定到所用的数据源。
用于 Spreadsheet 组件时发布的 <object> 标记:
<object id="SpreadSheet1" classid="CLSID:0002E510-0000-0000-C000-000000000046">
用于 Chart 组件时发布的 <object> 标记:
<object id="Chart1" classid="CLSID:0002E500-0000-0000-C000-000000000046" >
用于 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">
FrontPage 中的脚本
在 FrontPage 中向组件添加脚本很容易。组件脚本可以使用 VBScript 或 Microsoft Jscript 来编写,在此我们只使用了 VBScript 示例。
如果 Web 页包含一个以上的组件,那么只显示一个属性工具栏。属性工具栏设置的变动将影响所有活动的组件。
电子表格示例
<script language="vbscript">
<!--
Sub Window_Onload()
strPath = "d:\liukai\shili\book1.htm"
Spreadsheet1.HTMLURL = strPath
End Sub
--!>
4 电子表格组件
本章主要研究的是spreadsheet组件的功能和编程。
4.1 电子表格组件基本功能
电子表格组件支持Excel中排序和过滤功能,并且通过编程模型和用户界面来提供这些功能。
排序
用户在对电子表格区域排序时可以在电子表格用户界面中,首先选择需要排序的区域(或者在区域中选择任意的一些单元),然后点击降序工具条按钮。同时我们也可以通过Range对象的Sort方法,使用排序功能。其功能是在用户单击或者双击一个列标头时就可以对列表进行排序。
在此我们需要说明的是电子表格组件一次只能根据一列来对列表进行排序,它不能像excel那样可以同时根据最多三个关键列进行排序(例如,先根据年龄排序,然后根据身高排序,最后根据体重排序)。但是可以通过在其脚本中编程实现多列排序的功能.可以使用下列函数模仿多列的排序。
MultiColumnSort
目的: 同时根据多列对电子表格进行排序
传入: 电子表格中需要排序的区域的引用,
被排序的列的列编号的数组,
排序方向标志的数组(和上面的数组相同大小)
输出: 无 (完成排序动作)
Sub MultiColumnSort(Spreadsheet, Range, Columns, Directions)
‘ 启动一个撤消单位,以便可以以一个完整单位的任务进行撤消
Spreadsheet.BeginUndo()
‘ 关闭ScreenUpdating属性,使得当我们设置过滤,排序
‘ 和再过滤时电子表格不会重画
Spreadsheet.ScreenUpdating = False
‘ 现在递减遍历Columns数组和Directions数组,
‘ 实现我们需要的效果
For ct = ubound(Columns) To lbound(Columns) Step -1
0 is a guess for column headings
Range.Sort Columns(ct), Directions(ct), 0
Next 'ct
‘ 打开ScreenUpdating属性开关,使电子表格重画
Spreadsheet.ScreenUpdating = True
‘ 关闭一个撤消单位
Spreadsheet.EndUndo()
End Sub 'MultiColumnSort()
注释:BeginUndo和EndUndo方法用来将所有的排序操作组合在一个撤消动作块中,当用户选择撤消命令时,这些排序动作就会被一起撤消。
多列排序实际上是按照被排序列所定义次序的相反次序执行排序动作。例如,需要先根据年龄进行排序,然后再根据身高进行排序,函数则会首先根据身高排序列表,然后再根据年龄进行排序。以上函数接收三个参数:一个需要排序的区域,一个列编号的数组,一个方向值的数组(降序或升序)。本例中函数降序遍历这两个数组,从而实现了多列排序的效果。
过滤
在Excel中,过滤时选择单个项很方便,然而选择多项需要使用高级自动筛选对话框。而在Spreadsheet组件中,自动过滤下拉列表为每一项都提供了一个简化复选框,可以快速切换所有项的状态,较之Excel更为方便。但是电子表格组件中的自动过滤下拉列表没有包括Excel中很有用的1个设置选项。例如,找不到”前N位”的选项,这个选项使能够快速过滤,得到前N位的项。不过,我们可以通过调用电子表格组件的编程模型来实现此功能。
TopNFilter
目的: 根据给定的列编号过滤出列表的前N项
输入: 电子表格和区域的引用、列编号,
要过滤出的行的行数,以及标识过滤出前N行还是后N行的方向值
Out: 无 (完成所需的过滤)
Sub TopNFilter(Spreadsheet, Range, ColumnNum, N, Direction)
Set c = Spreadsheet.Constants
Set rngData = Range
Set af = Spreadsheet.ActiveSheet.AutoFilter
‘ 启动一个撤消单元,以便将来能以完整的单元进行撤消
Spreadsheet.BeginUndo()
‘ 关闭ScreenUpdating属性开关,使得当我们在设置过滤,排序和再次应用
‘ 过滤时,电子表格不会重画
Spreadsheet.ScreenUpdating = False
‘ 清除任何现存的过滤定义
ClearFilters Spreadsheet
‘ 在给定的数据区域中根据传入的列号的列排序列表
If LCase(Direction) = "bottom" Then
rngData.Sort ColumnNum, c.ssAscending, c.ssNo
Else
rngData.Sort ColumnNum, c.ssDescending, c.ssNo
End If
‘ 如果N+1,N+2等等的行和第N行的值相同,
‘ 则”前N位”过滤的结果可以会包含多过N的行。
‘ 因此循环查看N+1等行是否和第N行的值相同,
‘ 直到查找到一个不相同的值为止。
vNValue = rngData.Cells(N,ColumnNum).Value
While rngData.Cells(N+1,ColumnNum).Value = vNValue
N = N + 1
Wend
‘ N现在的值就是我们需要包括在过滤结果中的行的行数。
Set fltr = af.Filters(ColumnNum)
fltr.Criteria.FilterFunction = c.ssFilterFunctionInclude
For ct = 1 To N
fltr.Criteria.Add(rngData.Cells(ct,ColumnNum).Text)
Next
‘ 最后引用自动过滤
af.Apply
‘ 打开ScreenUpdating属性开关,使电子表格重画
Spreadsheet.ScreenUpdating = True
‘ 结束撤消单元
Spreadsheet.EndUndo()
End Sub 'TopNFilter()
“前N位”过滤功能似乎很简单,只要先排序,然后查看最开始的N行即可。但是真正的”前N位”过滤功能可能会返回超过N行的结果,因为它实际上的意思是”包括前N位的值的那些行”。如果在排序后,第10,11位的值相同,那么”前10位”过滤会将这些产品一起返回,因为它们都在前10位的值当中。还有,上述代码通过简单的改变排序方向(升序和降序)实现了过滤出前N位和后N位的功能。
装 载 数 据
Spreadsheet组件可以通过多种方式加载和保存数据,可以按实际情况灵活的运用这些方式。
可以通过4种方式将数据装载到电子表格组件中:
1 通过交互从Excel2000中发布一个电子表格或区域。
2 从Excel2000向电子表格组件中拷贝一个区域。
3 当电子表格组件位于设计器中时,可以直接在组件中输入数据或一组新的公式。
4指定一个URL来装载数据,这个URL会返回一个HTML文档,其中至少包含一个HTML表格。此外,也可以从一个URL处装载以逗号分隔的文本数据(CSV)。
前三种我们在以前章节已经有所交待,在此我们只正研究第4种从URL处装载。
在属性工具箱中,可以让电子表格组件打开一个特定的URL,并将该URL处查找到的第一个HTML表格进行加载(注意:电子表格组件不能直接从一个二进制XLS文件中装载数据)。CSV(以逗号间隔的文本)缺乏格式化或公式的信息,因此,只能从CSV流中加载原始数据。数据是保留在URL所指的文件中的,电子表格组件会在每次初始化时加载这些数据。当然,这个URL可以方便地指向一个Microsoft的动态服务器页面(ASP)或者是一个CGI程序,这个页面或程序从企业数据库或其它的存储系统中动态的生成HTML表格,这样就使得能够将动态,最新的数据加载到电子表格组件中。
4.2 编程模型要点
以下讲述的是spreadsheet组件编程模型的要点,让我们明白该组件应该如何应用。在这里会介绍几种常用的属性和方法。
在脚本中使用枚举
COM和OLE自动化允许组件定义枚举,每个枚举都是指定的一组常量,作用类似编程语言中的类型声明。可以将一个枚举用作属性或方法的参数,这使得如VB和VC这样的环境能够显示包含一个枚举中有效常量的语句完成下拉列表。OWC和其它许多ActiveX组件一样,包含了一系列预定义的枚举。
不过,在例如Web页面或asp页面这样的脚本环境中,不存在类型的概念。因此,在现有的这些脚本语言中不能使用枚举成员名称,因为这些语言无法知道一个特定的常量(例如ssHAlignLeft)对应的是什么。这意味着的VBScript脚本代码会因为不能自描述的神秘数字而混乱不堪。
为了尽量解决这个问题,所有的OWC组件都有一个名为Constants的顶级属性,在脚本语言中可以使用这个属性访问组件的各种枚举成员。例如,如果需要在VBScript代码中使用ssHAlignLeft常量使一个单元的内容居左显示,您可以这样书写代码:
MyRange.HAlignment = Spreadsheet1.Constants.ssHAlignLeft
为了使用一个枚举常量,您可以把它当作Constants对象的一个属性来引用它,而对象将返回枚举成员的正确的值。
constants属性返回一个对象,它允许 VBScript 程序员使用已命名的常量。本属性可应用于每个顶层容器对象(ChartSpace、DataSourceControl、PivotTable 和 Spreadsheet)。它返回一个含有所有已命名常量的对象,这些常量都可用于“Microsoft Office Web 组件”的类型库中(不论 Constants 属性应用于何种对象,它总返回已命名常量的完整集合)。
要在 VBScript 中使用已命名的常量,则可将某对象变量设置为由 Constants 属性所返回的对象,然后在代码中使用此对象来限定已命名的常量,如下例所示。
Set c = ChartSpace1.Constants
Set valueAxis = ChartSpace1.Charts(0).Axes(c.chAxisPositionLeft)
如果只使用一个常量,则可以直接在表达式中使用 Constants 属性。如下例所示。
Spreadsheet1.ActiveSheet.Export"sstest.xls", Spreadsheet1.Constants.ssExportActionNone
请注意,如果您计划在您的函数的多处使用常量对象,那么设置一个等于Constants对象的变量是很有用的,这样做既避免了不必要的打字,也能够提高性能。例如,您可以这样书写代码:
Set c = Spreadsheet1.Constants
MyRange.HAlignment = c.ssHAlignRight
MyRange.VAlignment = c.ssVAlignBottom
Constants对象只在没有枚举概念的脚本语言中有意义。如果您是在VB,VBA或C++中编写代码,请象平常那样直接使用枚举,不用理会Constants对象。
将数据输入组件
之前我已经讲述了多个将数据输入组件的技巧。我现在将更详细的描述编程模型中的这些技巧。表4列出了与装载数据相关的属性和方法,所有这些属性和方法都通过电子表格对象的接口公布。
表 4 装载数据相关的属性和方法
属性或方法 描述
Spreadsheet.DataType 字符串类型的属性,告诉电子表格组件在多个用于装载数据的属性被设置时,应该使用哪个属性来装载数据,赋给这个属性的值就是应该用来装载数据的那个属性的名称――例如,将这个属性设置为HTMLURL,会使组件装载从属性HTMLURL中的URL处 获得的数据。
Spreadsheet.HTMLURL 字符串类型的属性,包含了一个URL,可以从这个URL处装载电子表格的数据。这个URL必须返回一个包含了表格的HTML文档。使用Excel 2000中来保存为HTML格式的电子表格可以使用这个属性来装载,这个属性也可以是一个从数据库中实时生成表格的ASP页面或CGI程序。
Spreadsheet.CSVURL 字符串类型的属性,和属性HTMLURL类似,不过它希望从URL处获得的数据格式是CSV格式的。就象HTMLURL属性一样,这个URL可以是一个从数据库中实时生成表格的ASP页面或CGI程序。
Spreadsheet.LoadText 可以将一个被分隔的文本文件载入电子表格的方法。与CSV格式不同的是,这个文本文件可以使用任何字段分隔符。
使用区域
电子表格组件中最常使用的编程接口是Range对象。很多方法都返回Range对象,当需要对一个区域的各单元进行修改,格式化,排序和设置自动筛选时,都会用到Range对象。表5显示了在建立电子表格组件的解决方案时应该了解的Range对象的属性和方法。
表 5 Range对象主要的属性和方法
属性或方法 介绍
Spreadsheet.Range 该方法接受一个区域引用(例如A1:B2或A:B),返回一个Range对象。因为一个区域可以只有一个单元,因此您也可以传入单个单元的引用(例如A1)。该方法也可以接受两个不同的单元引用,而返回一个含盖这两个单元的区域。
Range.Address 该属性返回一个区域的地址(例如,A1:B2)。
Range.Cells 将该属性当作多个单元的一个集合,也就是说可以使用For Each循环访问其中的每一个单元。该属性也可以以二维数组的形式来访问。例如,MyRange.Cells(1,3).Value会返回区域中行1,列3的值。
Range.Column, Range.Row 这些属性指出区域中首行和首列的编号。当您在一个区域的行和列中进行迭代时,如果需要知道当前位于哪行哪列,这个属性非常有用。
Range.Columns, Range.Rows 虽然在名称上和前两个属性非常相似,但是这对属性返回的是Range对象包含的行或者列的集合。Range.Columns.Count和Range.Rows.Count可以告诉你当前区域中行和列的数目。
Range.Value 该属性获得或设置区域的值。虽然帮助文件说在区域由多个单元构成时Range.Value会返回一个二维变量数组,但实际上当前版本中这是没有实现的。不过,Range.Value可以接受一个二维数组的变量,来将数据输入区域中,当你需要使用文字值设置一个或多个单元值,或者是需要获得一个单元的无格式(即没有格式化的值)的值时,可以使用这个属性。
Range.Text Range.Text属性返回Range.Value属性的格式化版本。当您需要在消息框或另一个用户界面元素中显示格式化的值时这个属性很有用,该属性值就是您在添加AutoFilter对象的过滤条件时传入的值。
格式化
在将数据载入电子表格后,您可能需要通过编程来控制格式化。每个单元都有自己的字体,对齐方式,边框,颜色和数字格式属性,所有这些特征都可以使用表6中的属性来设置。
表 6 用于格式化的属性
属性 描述
Range.NumberFormat 字符串类型的属性,控制单元中数字的格式。可以引用现有的格式名称来使用众多的内置格式(例如Currency)。也可以创建自定义格式(例如,#,###,使1000显示为1,000)。
Range.Font 返回一个许多组件都能使用的常用的Font对象。Range.Font允许设置Font对象的的多个属性,例如Name,Size,Bold,Italic,Color和Underline。请注意,如果需要,可以在Font.Color属性中使用IE的颜色名。
Range.Halignment, Range.Valignment 这两个属性控制区域的各单元水平和垂直方向上的文本对齐方式。每个属性中定义了各自可以使用的对齐方式的枚举值。
Range.Borders 该属性返回一个Borders对象,可以通过它来设置每个单元边框的各个特性,如边框线的线粗,样式及颜色。
组件级的外观和行为
许多属性和方法会影响整个电子表格组件。表7列出了定制的解决方案中最有趣的属性和方法。
表7影响整个电子表格的主要属性
Property Description
Spreadsheet.DisplayColHeaders, Spreadsheet.DisplayRowHeaders 控制是否显示行头和列头。这两个属性的缺省值是True。通常,您可以在需要使用您自己的代码来对电子表格界面进行完全控制时将这两个属性设置为False。
Spreadsheet.DisplayGridlines 控制是否显示网格线。缺省是要显示的,如果在定制解决方案中,要在需要单元分隔线的地方使用边框,则常关闭这个属性。
Spreadsheet.DisplayPropertyToolbox 控制是否显示属性工具箱。将属性置为true则显示,置为false就会隐藏。
Spreadsheet.DisplayTitleBar 控制是否显示标题栏。缺省是显示标题栏的。可以使用下面介绍的TitleBar属性来修改标题栏上的内容和格式。
Spreadsheet.DisplayToolbar 控制是否显示工具条。缺省是显示。
Spreadsheet.EnableAutoCalculate 控制电子表格模型如何重算。如果这个属性被置为false,电子表格模型不会自动重算;必须调用工作表对象的Calculate方法,才能看到改变输入后的新结果。在计划修改一系列的输入,并且希望只有在完成所有的修改后,才重算模型时,这个属性非常有用。这个属性缺省为True――模型会在电子表格被修改时自动进行重算。
Spreadsheet.ScreenUpdating 缺省情况下,电子表格在屏幕上的显示总是反映最新的数据,不过如果计划执行大量的操作,而不希望电子表格在每一个操作之后都会因为更新而闪烁。可以将这个属性置为Fasle。将这个属性重新设回True会触发一个彻底的重绘动作。
Spreadsheet.Selection 返回当前选择的对象。可以使用VBA或VBScript中的TypeName函数来判断这个对象的类型。
Spreadsheet.TitleBar 使您可以访问电子表格的标题栏,可以改变标题栏的文本和格式。
排序和过滤
表8 列出了在电子表格组件中排序和过滤数据时可以使用的属性和方法。
表8 具有排序和过滤功能的属性和方法
属性或方法 介绍
Range.Sort 根据给定的列和排序方法对区域进行排序。
Worksheet.AutoFilter 该属性返回一个AutoFilter对象,该对象可用来设置当前过滤器的细节。
AutoFilter.Filters 该属性返回当前自动过滤区域的过滤器集合。一个过滤器对象应用于自动过滤区域中的一列,过滤器对象的下标和对应区域中列的下标相对应。
AutoFilter.Apply 该方法应用一个新的自动过滤。在设置完过滤条件后,必须调用这个方法来实应用过滤器。
Criteria.FilterFunction 该属性控制符合过滤条件的项是包括在过滤器中,还是被排除在过滤器之外。如果是包含,则过滤器仅包含符合过滤条件集合的项,而如果是排除,则过滤器包含除了哪些符合过滤条件集合的项之外的所有项。
Criteria.ShowAll 该属性决定是否显示所有的数据。当设为True时,该属性重置过滤器来显示所有的数据。当设为False时,假如没有任何过滤条件,将不显示任何数据。
Criteria.Add 该方法将一个新的过滤条件添加到过滤器中。
Range.AutoFilter 该方法针针对一个给定的区域打开AutoFilter开关。首先调用这个方法,然后使用Worksheet.AutoFilter属性(如上所述)访问过滤器并设置过滤条件。
保 护
如果需要保护电子表格的某部分,使您的用户不能修改单元内容或改变单元格式,您需要使用控制保护功能的各属性。表9列出了常用的具有保护功能的属性,并给出如何使用每一个属性的简短的描述。
请注意,保护设置即通过用户界面应用到用户交互中,也应用到代码中执行的操作中。因此如果您在一个保护选项被启用的情况下需要删除一行,您必须在执行删除操作前将Protection对象的Enabled属性设置为False,并在完成操作后,将Enabled属性设回True以便返回到受保护的状态。
表 9 常用的具有保护功能的各属性
属性 描述
Worksheet.Protection 返回一个Protection对象,可以使用它设置各种保护选项,从而启用各种全局操作(例如:插入和删除行)。
Protection.Enabled 控制一般情况下是否启用保护。在需要使用保护选项或锁定单元格时,首先设置选项或者锁定单元格,然后将这个属性设为True。当需要在代码中执行操作时,可以将该属性设为False来暂时禁止保护功能。
Protection.AllowInsertingColumns, Protection.AllowInsertingRows, Protection.AllowDeletingColumns, Protection.AllowDeletingRows 允许或禁止在电子表格中插入、删除列或行。例如,如果AllowInsertingRows被设为False,则电子表格会禁止所有用来插入一行的命令,包括哪些编程模型中的命令。
Protection.AllowSizingAllColumns, Protection.AllowSizingAllRows 允许或禁止调整列或行的大小。例如,如果AllowSizingAllRows被设为False,电子表格就不会允许用户调整行的大小,也不会允许您通过代码来这样做。
Protection.AllowSorting 允许或禁止在电子表格中排序数据。将AllowSorting设为False会禁止用户对任何区域中的内容进行排序。
Protection.AllowFiltering 允许或禁止使用自动筛选功能。将这个属性设为False会禁止用户启用自动过滤功能。
撤 消
表10 列出了当您控制电子表格组件的撤消机制时会用到的有关的属性和方法。
表 10 控制撤消机制相关的属性和方法
属性和方法 描述
Spreadsheet.BeginUndo 一个使您可以将一系列的操作看作一个撤消操作的方法。例如,如果您调用BeginUndo方法,然后执行了三个不同的排序动作,或改变了许多单元,您可以一下撤消所有这些操作。
Spreadsheet.EndUndo 一个标记您的逻辑撤消单元的结束的方法。在调用BeginUndo方法和调用EndUndo方法之间执行的所有操作会被当前一个单一的单元来撤消。
Spreadsheet.EnableUndo 该属性控制撤消功能是否可用。缺省是可用的。您可能需要暂时禁止这个功能,以便节约内存或在代码中执行大量的操作。
参 考 文 献:
[1] David stearns. 《Programming Microsoft Office 2000 Web Components》.Microsoft Corporation. 2004.5
[2] 北京宏远电脑培训中心. 《Office 2000综合应用短期培训教程》. 北京工业大学出版社
[3] China Microsoft.《Microsoft Office 2000 Web 组件基础》
【Excel Web组件的应用(一)】相关文章:
web论文参考文献参考04-25
饭店网Web网站推广策划方案05-12
基于web的异地并行设计与制造系统研究06-02
液氢的生产及应用09-12
机电技术一体化的应用论文(精选13篇)07-28
浅谈MOF材料的应用04-21
纳米材料在电池中的应用08-05
审计风险模型的演进及应用08-26
计算机应用论文02-15