在VB中操纵OLE服务器应用程序

2016-02-19 12:57 36 1 收藏

在这个颜值当道,屌丝闪边的时代,拼不过颜值拼内涵,只有知识丰富才能提升一个人的内在气质和修养,所谓人丑就要多学习,今天图老师给大家分享在VB中操纵OLE服务器应用程序,希望可以对大家能有小小的帮助。

【 tulaoshi.com - 编程语言 】

OLE自动化是不同应用程序之间进行通讯的一个标准。OLE自动化的工作方式是:通讯被动方(OLE服务器)应用程序向通讯主动方(OLE客户机)应用程序提供一个以上可供其调用的OLE自动化对象类型,OLE客户机通过引用这些对象实现对OLE服务器的调用,然后通过设置对象的属性和使用对象的方法操纵OLE服务器应用程序,完成两者之间的通讯。
  
  VisualBasic是一个完全支持OLE自动化的应用程序开发工具。使用VB,既可以编制做为OLE服务器的应用程序,也可以编制作为OLE客户机的应用程序。MSWord6.0是一个不完全支持OLE自动化的应用软件,它只能作为OLE服务器供其它应用程序调用。本文将以一个VB应用程序通过OLE自动化操纵MSWord6.0的实例,具体描述在VB中操纵OLE服务器应用程序的方法。
  
  在VB代码中调用OLE服务器的方法如下:控件类型属性属性值DataControlDataBaseNameNameC:VBBIBLIO.MDBData1RecordSourceAuthorsDBGridControlCommandButtonControlDataSourceData1NamecmdReportCaption生成报表CommandButtonControlNamecmdExitCaption退出
  
  ⑴声明一个对象变量。如:DimMS—WORDAsObject
  
  ⑵根据OLE服务器提供的对象类型,使用CreateObject函数创建一个对象,并由Set语句将该对象赋予对象变量。
  
  CreateObject函数的语法如下:
  
  CreateObject(class)
  
  函数参数class的格式为:appname.objecttype
  
  appname是提供对象的应用程序的名称,如:Word
  
  objecttype是欲创建的对象的类,如:Basic
  
  MSWord6.0为OLE客户机应用程序提供了一个类型为“basic”的对象,VB可以使用该对象类型,实现对Word的调用。具体语句如下:
  
  SetMS—WORD=CreateObject(″Word.Basic″)
  
  ⑶通过设置对象的属性和使用对象的方法,实现对OLE服务器的操纵。
  
  对象类型“basic”采用Word宏语言WordBasic的大多数语句和函数作为它的方法。也就是说,一旦在VB中创建了一个“basic”对象,就可以通过该对象使用大多数WordBasic语句或函数,从而可以近乎完美地操纵Word或Word文档。例如,下列语句在VB代码中使用WordBasic的FileNewDefault语句创建一个Word新文档:
  
  MS—WORD.FileNewDefault
  
  ⑷调用结束后,使用关键字Nothing,释放该变量占用的资源。如:SetMS—WORD=Nothing
  
  实例
  
  本例将使用VB编写一个简单的数据库应用程序。该程序从数据库中取出数据,然后通过OLE自动化将这些数据输入至Word,并按照Word的排版格式编排成一个表格。例中使用的数据库是VB自含的BILIO.MDB数据库,数据检索结果取自Authors数据表。本例稍加改动,即可作为数据库应用程序的报表生成功能模块使用。
  
  首先,创建一个名为Form1的窗体,设置其Caption属性为“OLE自动化演示”。然后在该窗体中加入四个控件并设置有关属性,具体如下:
  
  完成上述工作后,按F5运行的屏幕布局应如下图示。
  
  接着需要编写VB代码来实现与Word的连接。本实例的代码清单如下(注:代码中的斜体部分是WordBasic宏语言的语句,这些语句的使用方法请参阅WordBasic宏语言有关资料):
  
  ⑴在Form1的GeneralDeclarations部分声明窗体级全局变量和常量。
  
  DimMS—WORDAsObject'声明一个对象变量
  
  ConstMaxCols=5'声明一个用于标明当前数据记录集中字段个数的常量。在本例中字段个数为5
  
  ⑵创建一个子例程InsertTableIntoMS—Word(),该子例程使用WordBasic宏语言在Word6.0中制作一个表格,并将当前数据记录集中的数据依次插入表格单元。
  
  SubInsertTableIntoMS—Word()
  
  DimIAsInteger,jAsInteger,ColAsInteger,RowAsInteger
  
  DimCellContentAsString
  
  Me.Hide
  
  Col=MaxCols
  
  Row=Data1.Recordset.RecordCount
  
  MS—WORD.FileNewDefault
  
  MS—WORD.MsgBox″正在建立报表,请稍候…″,″″,-1
  
  MS—WORD.LeftPara
  
  MS—WORD.ScreenUpdating0
  
  MS—WORD.TableInsertTable,Col,Row,,,16,167
  
  MS—WORD.StartOfDocument
  
  Data1.Recordset.MoveFirst
  
  ForI=1ToMaxCols
  
  CellContent$=Data1.Recordset.Fields(I-1).Name
  
  MS—WORD.InsertCellContent$
  
  MS—WORD.NextCell
  
  NextI
  
  Do
  
  ForI=1ToMaxCols
  
  IfIsNull(Data1.Recordset.Fields(I-1).Value)Then
  
  CellContent$=″″
  
  Else
  
  CellContent$=Data1.Recordset.Fields(I-1).Value
  
  EndIf
  
  MS—WORD.InsertCellContent$
  
  MS—WORD.NextCell
  
  NextI
  
  Data1.Recordset.MoveNext
  
  LoopUntilData1.Recordset.EOF=True
  
  MS—WORD.TableDeleteRow
  
  MS—WORD.StartOfDocument
  
  MS—WORD.TableSelectRow
  
  MS—WORD.TableHeadings1
  
  MS—WORD.CenterPara
  
  MS—WORD.StartOfDocument
  
  MS—WORD.ScreenRefresh
  
  MS—WORD.ScreenUpdating1
  
  MS—WORD.MsgBox″结束″,″″,-1
  
  Me.Show
  
  EndSub
  
  ⑶命令按钮控件cmdReport的鼠标单击事件代码
  
  PrivateSubcmdReport—Click()
  
  DimResponse
  
  Screen.MousePointer=11
  
  SetMS—WORD=CreateObject(″Word.Basic″)
  
  MS—WORD.AppActivate″MicrosoftWord″,1
  
  CallInsertTableIntoMS—Word
  
  Screen.MousePointer=0
  
  EndSub
  
  ⑷命令按钮控件cmdExit的鼠标单击事件代码
  
  PrivateSubcmdExit—Click()
  
  SetMS—WORD=Nothing
  
  UnloadMe
  
  EndSub
  
  几点说明
  
  ①在本程序运行之前,Word6.0必须已经成功安装,否则系统将产生一个VB可捕获的错误。Word6.0的表格列不能超过31列,否则系统将产生一个VB可捕获的错误。读者可以在代码中加入错误处理代码以处理这些错误。
  
  ②若本程序运行时Word尚未运行,OLE自动化将试图启动它。因此程序代码中不必包括一条分开的指令来启动Word。若Word是由VB应用程序启动的,那么程序结束时Word将自动关闭;否则,Word将继续运行。
  
  ③本实例使用的大部分WordBasic语句都与Word文档的插入点有关,如果在本程序运行过程中人为地移动了插入点,则有可能导致表格的混乱和错误。为了避免这种情况发生,本程序在执行插入操作之前使用ScreenUpdating语句将Word屏幕更新关闭,使用户在执行插入操作时不能移动插入点。
  
  从上述实例可以看到,通过OLE自动化,使我们在开发新的应用程序时可以“借用”现成的应用程序的部分或全部功能,从而大大地减轻开发的工作量,缩短开发周期,使开发工作事半功倍。这就是OLE自动化带给开发人员的好处。->

来源:http://www.tulaoshi.com/n/20160219/1602561.html

延伸阅读
标签: PHP
  大多数网站托管(Web hosting)公司都支持客户对Web站点统计数据的访问,但是你往往会觉得服务器所产生的状态信息不够全面。例如,配置不正确的Web服务器不能识别某些文件类型,这些类型的文件就不会出现在状态信息之中。幸好,你可以用PHP来定制状态信息收集程序,这样你就可以获取你所需要的信息了。 公共日志文件格式(Common Log...
Java 平台一直都以其平台无关性自豪。虽然这种无关性有许多好处,但是它也使得编写与硬件交互的 Java 应用程序的过程变得相当复杂。在本文中,研究科学家蒋清野讨论了两个项目,它们通过提供使Java 应用程序可以使用 USB 设备的 API 而使这个过程变得更轻易。 虽然这两个项目仍然处于萌芽状态,但是它们都显示了良好的前景,并已经成为一些...
  有些时候,我们需要在一个应用程序中打开另外的应用程序,我这几天就做了这样的事,总结了一些东西,希望可以跟大家一起分享和交流一下。其中有可能有一些东西是错误的或者走了弯路,恳请大家能够给我提意见!另外我这些天一直在学习多线程与多进程,期待找到一些共同进步的人!     闲话少说了,还是回答主题上面来。要在应...
标签: vb
1.部件可在需要时加载,不需要时卸载。 2.在Win95或WinNT下,即使应用程序的其他部分为16位部件,跨进程的部件也可以是32位的执行程序。 3.远程部件可使用网络上其他机器的资源。 另外,部件可被单独调试并可在其他应用程序里重用。在确定如何使用分段技术来优化应用程序之前,必须估计到能创建的部件类型和怎样适合应用...
---- 一、提出问题 ---- 自从1996年微软推出Intellimouse鼠标后,带滚轮的鼠标开始大行其道,支持鼠标滚轮的应用软件也越来越多。但我感到奇怪,为什么VB到6.0本身仍然不支持鼠标滚轮,VF可是从5.0就提供MouseWheel事件了。 ---- 如何让VB应用程序支持鼠标滚轮?MSDN上有一篇解决VB下应用Intellimouse鼠标的文章,它解决这一问题的方法是通过...

经验教程

596

收藏

66
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部