|
TOP
|
| 文章内容 |
类和组件的存在使得代码的重用变得非常方便。在服务器上引用一个应用程序类就可以让客户端应用程序重用整个服务应用程序,这是提高类或者组件的重用效率经常使用的重要方法。
微软有一整套适用于此的应用程序。整体上是指Microsoft Office XP。通常来说包括Word,Excel和PowerPoint,以及开发版的Access和Frontpage。所有的这些Office应用程序都可以用于VB的设计,而且他们都包含通过OLE自动操作或者仅仅自动化来实现代码重用的扩展目标模块。
这篇文章中用Microsoft Office XP的Excel作为例子。
我会提供一个自动化控制器的例子来证明在Office XP 中自动操作是怎样工作的,同时可以让你明白怎样控制Microsoft Excel。在这个场景中,Excel就是我们重用的代码。在上下文中Excel是作为一个自动化服务器来引用的。我们正在写的代码,也就是作为样本的客户端应用程序,扮演自动化控制器的角色。
在任何一个Office XP应用程序中要成功的实现自动化操作的关键因素是要给你想要完成的东西命名,然后在OLE自动化界面给这个Office应用程序找到和这个界面对应的实体。每个Office 应用程序都有自己的目标模块。比如说,你可以在Vb中给应用程序编辑器的帮助查找对应的MS-Excel目标模块。

点击此处获得放大的图像
图1: Excel的目标模块
我们可以创建一个自动化控制器来开始一个Excel的实例,然后导入一些随机的数据到工作表中。很明显,这是一个简单的介绍。但是,一旦你懂得这些初步知识,其他的一切仅仅就是你需要搞清楚目标模块中哪些部分包含数据,还有就是你的能力是否胜任此工作。
给Excel添加一个引用
我们的这个例子会在VB6中为MS-Excel建立一个自动化控制器。确定我们的目标并且创建了一个项目后,我们要做的第一件事是添加一个Excel目标库的引用。在VB6菜单中选择Project|reference,如图2,然后选中Microsoft Excel 10.0 Object Library这一项。

点击此处获得放大的图像
图2:添加Microsoft Excel 10.0 Object Library的引用
值得注意的是自动操作在MS-Office中已经存在相当长的一段时间了。因此如果你使用早期的Office版本,Object Library的版本也有相应的变化。如果你没有安装Excel,那么你也可以使用与此篇文章提供的代码相似的代码来测试Microsoft Office其他应用程序的自动化功能,比如说Word。
创建一个Excel实例
添加Excel Object Library引用后,你可以很轻松的从客户程序端控制Excel。方法是声明一个Excel Application 类型的变量,并且创建一个此类型的实例。你可以在客户端程序载入后(如清单一所示)执行此步骤,也可以在以后的某个时间响应要求执行。
注意:如果你是一个有经验的程序员,你应该知道创建一个自动化控制器的时候,不一定非要添加Excel目标库的引用。你可以声明目标对象的一个变量,然后用CreatObject("Excel.Application)方法调用。这就是末期绑定,这样比调入类库使用特定类型的方法写代码要简单。
清单一:Form_load 事件处理柄创建一个Excel Application对象实例
Private Excel As Excel.Application
Private Sub Form_Load()
Set Excel = New Excel.Application
Set Workbook = Excel.Workbooks.Add
End Sub |
从程序清单你可以看见Excel实例的引用是在Form范围(或者是作为替代的类范围)中的方法外声明的。它创建了对象的一个新实例然后指定给Excel变量。同时我也在Load事件中创建了一个新的WorkBook对象。你可以在任何时间创建这些对象。载入后,我们可以通过查看Windows任务管理器来确认Excel在运行之中。 参阅图3,并且在任务管理器中查找Excel.exe执行文件。

点击此处获得放大的图像
图3:XP任务管理器中显示Microsoft Excel作为应用服务程序运行
缺省情况下如果你把Excel作为自动服务运行,它是不可见的。我在清单2中加入了一些代码,用来说明怎样显示或者隐藏正在运行的自动服务。
清单2:用来说明怎样显示和隐藏清单一中创建的Excel实例的运行情况的例子
Private Sub MenuShow_Click()
If (MenuShow.Caption = "&Show") Then
MenuShow.Caption = "&Hide"
Workbook.Activate
Excel.Visible = True
Else
MenuShow.Caption = "&Show"
Excel.Visible = False
End If
End Sub |
在我们的例子中,我们创建的Excel实例的可见状态是和一个菜单标题的值有紧密联系的。如果标题是"&Show"那么我们就会让可见状态赋予真值,激活工作簿,并且赋予菜单标题一个适当的值,表明下次我们点击菜单的时候,Excel实例将会被隐藏。任意与此相似的能够显示和隐藏服务运行实例的方法都是可以的。要达到此目的,关键是要记住检查或者修改应用程序的可见状态。
使用活动工作簿并且创建一个工作表
你可以使用目标模块中显示的多种方式实现与Excel的互动操作。MS-Excel是以工作簿和工作表为基础的。一个文件被称作一个工作簿,一个单独的电子数据表被称作一个工作表。 我们的实例需要一个工作簿和一个工作表。清单一说明怎样添加一个新的Workbook,下面的清单3说明了怎样把数据添加到活动的工作表中。
在Excel中给活动的WorkSheet添加数据
Private Row As Integer
Private Sub MenuAdd_Click()
Dim Worksheet As Worksheet
Set Worksheet = Workbook.ActiveSheet
Row = Row + 1
Worksheet.Rows.Cells(Row, 1) = Text1.Text
End Sub |
通过声明一个临时变量我减少了了给WorkSheet添加数据的代码。(在实际代码中我不会声明临时变量,因为它增添了不必要的代码行。) 私有字段行用来储存内部计数,Text1中的文字被添加到每一行的第一列。
自动操作是一个非常简单的应用程序,它只是简单的把数据导入到工作表的第一列。但是,在这一点上,你已经获得把数据导入到单元格的所有基本技能。最后一步就是说明我们怎样清除工作区。
清除工作区
在此例中工作表代表一个临时工作区。输入到工作表中的数据是永久存在的,那就是说,它的存在时间不会超过自动控制程序。清单4说明了我们怎样关闭活动的工作簿,清除临时数据,最后关闭Excel实例的方法。
不保存活动工作簿的改变并且关闭自动服务
Private Sub Form_Unload(Cancel As Integer)
Call Workbook.Close(False)
Excel.Quit
Set Excel = Nothing
End Sub |
小结
实现自动化操作的最大挑战是要知道自动化服务的目标模块提供什么东西。在你知道怎样开始和停止服务实例后,你要知道你感兴趣的数据所在对象的名字。每个服务器目标模块中的对象是不一样的。幸运的是,Office XP中的应用程序提供了很好理解的方案,因而直觉上也很易于理解。
当使用Excel作为应用服务的时候,在目标模块中有与你使用的对象相对应的对象,这是很有意义的。例如,在服务中很自然的有与Workbook(工作簿),Worksheet(工作表),Columns(列),rows(行),cells(单元格)相对应的表示方法。还有更多的好处:如果你能够确认你正在寻找的位于Excel客户端的实体的身份,你就能够很容易在Excel自动目标模块中发现它。相类似的上下文关系同样是被支持的。比如说,工作簿应该和工作表的集合有类似的地方,工作表和列、行和单元格的集合有类似的地方。
Office XP和OLE自动化是你把电子表格,字处理,数据融入到你的应用程序的一个强大的粘合工具。许多其他的微软程序,如Frontpage,Visual SourceSafe都有自动模块,其他供应商的软件也有类似的应用程序。
【 |
|
| 相关信息 |
![]() |
VB6中OLE的自动操作
发布者:mmcbbs
浏览量:139
发布日期:2005-04-10 10:27:22
所属专题: |
|
|
|
|