在VB中操纵OLE服务器应用程序
来源:互联网 发布:雷克萨斯 gs300h知乎 编辑:程序博客网 时间:2024/06/11 01:58
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
Visual Basic是一个完全支持OLE自动化的应用程序开发工具。使用VB,既可以编制做为OLE服务器的应用程序,也可以编制作为OLE客户机的应用程序。MS Word 6.0是一个不完全支持OLE自动化的应用软件,它只能作为OLE服务器供其它应用程序调用。本文将以一个VB应用程序通过OLE自动化操纵MS Word 6.0的实例,具体描述在VB中操纵OLE服务器应用程序的方法。
在VB代码中调用OLE服务器的方法如下:控件类型 属性 属性值 Data Control DataBaseNameName C:VBBIBLIO.MDBData1 RecordSource Authors DBGrid ControlCommandButton Control DataSource Data1 Name cmdReport Caption 生成报表 CommandButton Control Name cmdExit Caption 退出
⑴声明一个对象变量。如:Dim MS—WORD As Object
⑵根据OLE服务器提供的对象类型,使用CreateObject函数创建一个对象,并由Set语句将该对象赋予对象变量。
CreateObject函数的语法如下:
CreateObject(class)
函数参数class的格式为:appname.objecttype
appname是提供对象的应用程序的名称,如:Word
objecttype是欲创建的对象的类,如:Basic
MS Word 6.0为OLE客户机应用程序提供了一个类型为“basic”的对象,VB可以使用该对象类型,实现对Word的调用。具体语句如下:
Set MS—WORD = CreateObject(″Word.Basic″)
⑶通过设置对象的属性和使用对象的方法,实现对OLE服务器的操纵。
对象类型“basic”采用Word宏语言WordBasic的大多数语句和函数作为它的方法。也就是说,一旦在VB中创建了一个“basic”对象,就可以通过该对象使用大多数WordBasic语句或函数,从而可以近乎完美地操纵Word或Word文档。例如,下列语句在VB代码中使用WordBasic的FileNewDefault语句创建一个Word新文档:
MS—WORD.FileNewDefault
⑷调用结束后,使用关键字Nothing,释放该变量占用的资源。如:Set MS—WORD = Nothing
实例
本例将使用VB编写一个简单的数据库应用程序。该程序从数据库中取出数据,然后通过OLE自动化将这些数据输入至Word,并按照Word的排版格式编排成一个表格。例中使用的数据库是VB自含的BILIO.MDB数据库,数据检索结果取自Authors数据表。本例稍加改动,即可作为数据库应用程序的报表生成功能模块使用。
首先,创建一个名为Form1的窗体,设置其Caption 属性为“OLE自动化演示”。然后在该窗体中加入四个控件并设置有关属性,具体如下:
完成上述工作后,按F5运行的屏幕布局应如下图示。
接着需要编写VB代码来实现与Word的连接。本实例的代码清单如下(注:代码中的斜体部分是WordBasic宏语言的语句,这些语句的使用方法请参阅WordBasic宏语言有关资料):
⑴在Form1的General Declarations部分声明窗体级全局变量和常量。
Dim MS—WORD As Object '声明一个对象变量
Const MaxCols = 5 '声明一个用于标明当前数据记录集中字段个数的常量。在本例中字段个数为5
⑵创建一个子例程InsertTableIntoMS—Word(),该子例程使用WordBasic宏语言在Word 6.0中制作一个表格,并将当前数据记录集中的数据依次插入表格单元。
Sub InsertTableIntoMS—Word()
Dim i As Integer, j As Integer, Col As Integer, Row As Integer
Dim CellContent As String
Me.Hide
Col = MaxCols
Row = Data1.Recordset.RecordCount
MS—WORD.FileNewDefault
MS—WORD.MsgBox ″正在建立报表,请稍候…″, ″″, -1
MS—WORD.LeftPara
MS—WORD.ScreenUpdating 0
MS—WORD.TableInsertTable , Col, Row, , , 16, 167
MS—WORD.StartOfDocument
Data1.Recordset.MoveFirst
For i = 1 To MaxCols
CellContent$ = Data1.Recordset.Fields(i - 1).Name
MS—WORD.Insert CellContent$
MS—WORD.NextCell
Next i
Do
For i = 1 To MaxCols
If IsNull(Data1.Recordset.Fields(i - 1).Value) Then
CellContent$ = ″″
Else
CellContent$ = Data1.Recordset.Fields(i - 1).Value
End If
MS—WORD.Insert CellContent$
MS—WORD.NextCell
Next i
Data1.Recordset.MoveNext
Loop Until Data1.Recordset.EOF = True
MS—WORD.TableDeleteRow
MS—WORD.StartOfDocument
MS—WORD.TableSelectRow
MS—WORD.TableHeadings 1
MS—WORD.CenterPara
MS—WORD.StartOfDocument
MS—WORD.ScreenRefresh
MS—WORD.ScreenUpdating 1
MS—WORD.MsgBox ″结束″, ″″, -1
Me.Show
End Sub
⑶命令按钮控件cmdReport的鼠标单击事件代码
Private Sub cmdReport—Click()
Dim Response
Screen.MousePointer = 11
Set MS—WORD = CreateObject(″Word.Basic″)
MS—WORD.AppActivate ″Microsoft Word″, 1
Call InsertTableIntoMS—Word
Screen.MousePointer = 0
End Sub
⑷命令按钮控件cmdExit的鼠标单击事件代码
Private Sub cmdExit—Click()
Set MS—WORD = Nothing
Unload Me
End Sub
几点说明
①在本程序运行之前,Word 6.0必须已经成功安装,否则系统将产生一个VB可捕获的错误。Word 6.0的表格列不能超过31列,否则系统将产生一个VB可捕获的错误。读者可以在代码中加入错误处理代码以处理这些错误。
②若本程序运行时Word尚未运行,OLE自动化将试图启动它。因此程序代码中不必包括一条分开的指令来启动Word。若Word是由VB应用程序启动的,那么程序结束时Word将自动关闭;否则,Word将继续运行。
③本实例使用的大部分WordBasic语句都与Word文档的插入点有关,如果在本程序运行过程中人为地移动了插入点,则有可能导致表格的混乱和错误。为了避免这种情况发生,本程序在执行插入操作之前使用ScreenUpdating语句将Word屏幕更新关闭,使用户在执行插入操作时不能移动插入点。
从上述实例可以看到,通过OLE自动化,使我们在开发新的应用程序时可以“借用”现成的应用程序的部分或全部功能,从而大大地减轻开发的工作量,缩短开发周期,使开发工作事半功倍。这就是OLE自动化带给开发人员的好处。
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
OLE自动化是不同应用程序之间进行通讯的一个标准。OLE自动化的工作方式是:通讯被动方(OLE服务器)应用程序向通讯主动方(OLE客户机)应用程序提供一个以上可供其调用的OLE自动化对象类型,OLE客户机通过引用这些对象实现对OLE服务器的调用,然后通过设置对象的属性和使用对象的方法操纵OLE服务器应用程序,完成两者之间的通讯。Visual Basic是一个完全支持OLE自动化的应用程序开发工具。使用VB,既可以编制做为OLE服务器的应用程序,也可以编制作为OLE客户机的应用程序。MS Word 6.0是一个不完全支持OLE自动化的应用软件,它只能作为OLE服务器供其它应用程序调用。本文将以一个VB应用程序通过OLE自动化操纵MS Word 6.0的实例,具体描述在VB中操纵OLE服务器应用程序的方法。
在VB代码中调用OLE服务器的方法如下:控件类型 属性 属性值 Data Control DataBaseNameName C:VBBIBLIO.MDBData1 RecordSource Authors DBGrid ControlCommandButton Control DataSource Data1 Name cmdReport Caption 生成报表 CommandButton Control Name cmdExit Caption 退出
⑴声明一个对象变量。如:Dim MS—WORD As Object
⑵根据OLE服务器提供的对象类型,使用CreateObject函数创建一个对象,并由Set语句将该对象赋予对象变量。
CreateObject函数的语法如下:
CreateObject(class)
函数参数class的格式为:appname.objecttype
appname是提供对象的应用程序的名称,如:Word
objecttype是欲创建的对象的类,如:Basic
MS Word 6.0为OLE客户机应用程序提供了一个类型为“basic”的对象,VB可以使用该对象类型,实现对Word的调用。具体语句如下:
Set MS—WORD = CreateObject(″Word.Basic″)
⑶通过设置对象的属性和使用对象的方法,实现对OLE服务器的操纵。
对象类型“basic”采用Word宏语言WordBasic的大多数语句和函数作为它的方法。也就是说,一旦在VB中创建了一个“basic”对象,就可以通过该对象使用大多数WordBasic语句或函数,从而可以近乎完美地操纵Word或Word文档。例如,下列语句在VB代码中使用WordBasic的FileNewDefault语句创建一个Word新文档:
MS—WORD.FileNewDefault
⑷调用结束后,使用关键字Nothing,释放该变量占用的资源。如:Set MS—WORD = Nothing
实例
本例将使用VB编写一个简单的数据库应用程序。该程序从数据库中取出数据,然后通过OLE自动化将这些数据输入至Word,并按照Word的排版格式编排成一个表格。例中使用的数据库是VB自含的BILIO.MDB数据库,数据检索结果取自Authors数据表。本例稍加改动,即可作为数据库应用程序的报表生成功能模块使用。
首先,创建一个名为Form1的窗体,设置其Caption 属性为“OLE自动化演示”。然后在该窗体中加入四个控件并设置有关属性,具体如下:
完成上述工作后,按F5运行的屏幕布局应如下图示。
接着需要编写VB代码来实现与Word的连接。本实例的代码清单如下(注:代码中的斜体部分是WordBasic宏语言的语句,这些语句的使用方法请参阅WordBasic宏语言有关资料):
⑴在Form1的General Declarations部分声明窗体级全局变量和常量。
Dim MS—WORD As Object '声明一个对象变量
Const MaxCols = 5 '声明一个用于标明当前数据记录集中字段个数的常量。在本例中字段个数为5
⑵创建一个子例程InsertTableIntoMS—Word(),该子例程使用WordBasic宏语言在Word 6.0中制作一个表格,并将当前数据记录集中的数据依次插入表格单元。
Sub InsertTableIntoMS—Word()
Dim i As Integer, j As Integer, Col As Integer, Row As Integer
Dim CellContent As String
Me.Hide
Col = MaxCols
Row = Data1.Recordset.RecordCount
MS—WORD.FileNewDefault
MS—WORD.MsgBox ″正在建立报表,请稍候…″, ″″, -1
MS—WORD.LeftPara
MS—WORD.ScreenUpdating 0
MS—WORD.TableInsertTable , Col, Row, , , 16, 167
MS—WORD.StartOfDocument
Data1.Recordset.MoveFirst
For i = 1 To MaxCols
CellContent$ = Data1.Recordset.Fields(i - 1).Name
MS—WORD.Insert CellContent$
MS—WORD.NextCell
Next i
Do
For i = 1 To MaxCols
If IsNull(Data1.Recordset.Fields(i - 1).Value) Then
CellContent$ = ″″
Else
CellContent$ = Data1.Recordset.Fields(i - 1).Value
End If
MS—WORD.Insert CellContent$
MS—WORD.NextCell
Next i
Data1.Recordset.MoveNext
Loop Until Data1.Recordset.EOF = True
MS—WORD.TableDeleteRow
MS—WORD.StartOfDocument
MS—WORD.TableSelectRow
MS—WORD.TableHeadings 1
MS—WORD.CenterPara
MS—WORD.StartOfDocument
MS—WORD.ScreenRefresh
MS—WORD.ScreenUpdating 1
MS—WORD.MsgBox ″结束″, ″″, -1
Me.Show
End Sub
⑶命令按钮控件cmdReport的鼠标单击事件代码
Private Sub cmdReport—Click()
Dim Response
Screen.MousePointer = 11
Set MS—WORD = CreateObject(″Word.Basic″)
MS—WORD.AppActivate ″Microsoft Word″, 1
Call InsertTableIntoMS—Word
Screen.MousePointer = 0
End Sub
⑷命令按钮控件cmdExit的鼠标单击事件代码
Private Sub cmdExit—Click()
Set MS—WORD = Nothing
Unload Me
End Sub
几点说明
①在本程序运行之前,Word 6.0必须已经成功安装,否则系统将产生一个VB可捕获的错误。Word 6.0的表格列不能超过31列,否则系统将产生一个VB可捕获的错误。读者可以在代码中加入错误处理代码以处理这些错误。
②若本程序运行时Word尚未运行,OLE自动化将试图启动它。因此程序代码中不必包括一条分开的指令来启动Word。若Word是由VB应用程序启动的,那么程序结束时Word将自动关闭;否则,Word将继续运行。
③本实例使用的大部分WordBasic语句都与Word文档的插入点有关,如果在本程序运行过程中人为地移动了插入点,则有可能导致表格的混乱和错误。为了避免这种情况发生,本程序在执行插入操作之前使用ScreenUpdating语句将Word屏幕更新关闭,使用户在执行插入操作时不能移动插入点。
从上述实例可以看到,通过OLE自动化,使我们在开发新的应用程序时可以“借用”现成的应用程序的部分或全部功能,从而大大地减轻开发的工作量,缩短开发周期,使开发工作事半功倍。这就是OLE自动化带给开发人员的好处。
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
- 在VB中操纵OLE服务器应用程序
- 使用VB在应用程序中注册热键
- 在VB应用程序中调用Excel2000
- 在VB应用程序中使用INI文件
- 使用VB在应用程序中注册热键
- vb.net在wince中打开应用程序
- 使用VB在应用程序中注册热键
- 在VB应用程序中调用Excel2000方案
- 在VB程序中嵌套其它应用程序
- 在SQL中操纵EXCEL
- 用OLE技术操纵Excel
- [NET]在你的VB.NET应用程序中使用多线程
- vb中如何在任务管理器里面隐藏应用程序进程
- vb中如何在任务管理器里面隐藏应用程序进程
- 如何防止在长时间的 COM 操作期间显示 OLE 服务器忙对话框中
- Oracle Objects for OLE 及在VB中的应用
- VB开发——在VB应用程序中调用Excel2000对象之基本操作篇
- VB开发——在VB应用程序中调用Excel2000对象之基本操作篇001
- 解析Ajax如何处理响应信息
- 在VB、VFP应用系统中收发邮件
- Ajax基石脚本异步并发调用参数传递
- Visual Basic调用Windows API函数的应用举例
- 采用AJAX提高网站程序的带宽性能
- 在VB中操纵OLE服务器应用程序
- 采用AJAX提高网站程序的带宽性能
- VB与Windows资源管理器互拷文件
- Eric Pascarello解析Ajax安全性
- 在vb中轻松制作支持断点续传的FTP、HTTP下载软件
- 在AJAX开发中集成数据库技术
- ^^^^^^^^WIN95帮助文件制作^^^^^^^^^^
- 用VB编写键盘拦截程序
- 一个用VB编写的监控别人上网的软件例子