oleobject 的具体用法和作用

来源:互联网 发布:java编程规范 编辑:程序博客网 时间:2024/05/22 14:18

OLE自动化是不同应用程序之间进行通讯的一个标准。OLE自动化的工作方式是:通讯被动方(OLE服务器)应用程序向通讯主动方(OLE客户机)应用程序提供一个以上可供其调用的OLE自动化对象类型,OLE客户机通过引用这些对象实现对OLE服务器的调用,然后通过设置对象的属性和使用对象的方法操纵OLE服务器应用程序,完成两者之间的通讯。      
  Powerbuilder7.0
是一个完全支持OLE自动化的应用程序开发工具。使用POWERBUILDER7.0,既可以编制做为OLE服务器的应用程序,也可以编制作为OLE客户机的应用程序。Word2000是一个不完全支持OLE自动化的应用软件,它只能作为OLE服务器供其它应用程序调用。本文将以一个POWERBUILDER7.0应用程序通过OLE自动化操纵Word2000的实例,具体描述在POWERBUILDER7.0中操纵OLE服务器应用程序的方法。      
 
POWERBUILDER7.0代码中调用OLE服务器的方法如下:      
 
1   声明一个对象变量:    
  OLEObject   wordapp      
 
2)使用Create语句创建该对象,其语法如下:      
  wordApp   =   Create   OLEObject    
 
3)根据自己使用OLE服务器的对象类型,利用ConnectToNewObjectstring   aparam)函数建立连接,根据返回参数判断OLE服务器连接是否成功,参数aparam表示所连接的服务器类型,对于office2000套件中的应用程序提供如下几种常用的服务器标识:    
  "Word.Application"    
  "Word.Document"    
  "Excel.Application"    
  "Excel.Worksheet"    
 
对于word分两种,一种是创建面向应用程序的服务器对象"Word.Application",另一个是创建单个文档的服务器对象"Word.Document",二者的区别在于使用的范围不同,本文我们创建面向应用程序的服务器对象,代码实现如下:    
  int   ret    
  //  
连接"   word.application   "服务器,同时判断连接是否成功    
  ret   =   wordApp.ConnectToNewObject(   "word.application"   )    
  if   ret   <   0   then    
  MessageBox("
信息提示","你的WORD无法正常运行,请重新安装!")    
  return    
  end   if    
     
 
4)通过设置对象的属性和使用对象的方法,实现对OLE服务器的操纵。      
 
对象类型采用Word宏语言WordBasic的大多数语句和函数作为它的方法。也就是说,一旦在POWERBUILDER7.0中创建了一个Word服务器对象,就可以通过该对象使用大多数WordBasic语句或函数,从而可以近乎完美地操纵WordWord文档。例   如,下列语句在POWERBUILDER7.0代码中使用WordBasicFileNewDefault语句创建一个Word新文档:      
  wordApp.Application.FileNewDefault
file_name      
 
5)调用结束后,使用关键字的destroy,释放该变量占用的资源。如:    
  destroy   wordapp      
 
实例      
 
本例将使用POWERBUILDER7.0编写一个简单的数据库应用程序。该程序从数据库中取出数据,然后通过OLE自动化将这些数据输入至Word,并按照Word的排版格式编排成一个表格。例中使用的数据库是POWERBUILDER7.0自含的EAS   Demo   DB   V3.db数据库,数据检索结果取自examples数据表。本例稍加改动,即可作为数据库应用程序的报表生成功能模块使用。      
 
首先,创建一个名为pbtoword的应用,在该应用中的open事件中添加数据库连接代码如下:    
  SQLCA.DBMS   =   "ODBC"    
  SQLCA.Database   =   "EAS   Demo   DB   V3"    
  SQLCA.AutoCommit   =   False    
  SQLCA.DBParm   =   "ConnectString='DSN=EAS   Demo   DB   V3;UID=dba;PWD=sql'"    
  connect;    
 
创建窗口w_main,设置其标题title   属性为“word_OLE自动化演示程序。然后在该窗体中加入三个控件:数据窗口dw_1开始数据填写按钮cb_start程序结束按钮cb_end并设置有关属性,完成上述工作后,点击窗口预览运行菜单,屏幕布局应如下图示。    
     
 
接着需要编写POWERBUILDER7.0代码来实现与Word的连接。本实例的代码清单如下(注:代码中wordapp使用得语句WordBasic宏语言的语句,这些语句的使用方法请参阅WordBasic宏语言有关资料,或直接再word中查看visual   basic编辑环境中的对象浏览器):      
 
1)在w_mainopen事件中加入数据窗口的数据连接代码:      
  dw_1.settransobject(sqlca)    
  dw_1.retrieve()      
 
2)命令按钮   cb_start   鼠标单击事件代码,该事件使用WordBasic宏语言在Word2000中制作一个表格,并将当前数据数据窗口中的数据依次插入表格单元。      
  constant   integer   ppLayoutBlank   =   12    
  OLEObject   wordapp    
  wordapp   =   CREATE   OLEObject    
     
  int   ret    
  //  
连接"   word.application   "服务器,同时判断连接是否成功    
  ret   =   wordApp.ConnectToNewObject(   "word.application"   )    
  if   ret   <   0   then    
  MessageBox("
信息提示","你的WORD无法正常运行,请重新安装!")    
  return    
  end   if    
  word.application.ScreenUpdating()    
  wordapp.Visible   =   True   //
使得word2000的使用过程可见    
     
  long   ll_colnum,ll_rownum    
  constant   long   wdWord9TableBehavior   =   1    
  constant   long   wdAutoFitFixed   =   0    
  constant   long   wdCell   =   12    
  string   ls_value    
     
  //
得到数据窗口数据的列数与行数(行数应该是数据行数   +   1    
  ll_colnum   =   Long(dw_1.object.datawindow.column.count)    
  ll_rownum   =   dw_1.rowcount()   +   1    
     
  wordapp.Documents.Add("C:/WINDOWS/Application   Data/Microsoft/Templates/Normal.dot",False,0)    
  wordapp.ActiveDocument.Tables.Add(wordapp.Selection.Range,   ll_rownum,   ll_colnum,wdWord9TableBehavior,wdAutoFitFixed)    
     
  string   ls_colname    
  integer   i,j    
  for   i   =   1   to   ll_colnum    
  //
得到标题头的名字    
  ls_colname   =   dw_1.describe('#'   +   string(i)   +   ".name")   +   "_t"    
  ls_value   =   dw_1.describe(ls_colname   +   ".text")    
  wordapp.Selection.TypeText(trim(ls_value))    
  wordapp.Selection.MoveRight(wdCell)    
  next    
     
  dw_1.setredraw(false)    
  wordapp.Selection.MoveLeft(wdCell)    
  for   i   =   2   to   ll_rownum    
  for   j   =   1   to   ll_colnum    
  dw_1.scrolltorow(i   -   1)    
  dw_1.setcolumn(j)    
  ls_value   =   dw_1.gettext()    
  wordapp.Selection.MoveRight(wdCell)    
  wordapp.Selection.TypeText(ls_value)    
  next    
  next    
  dw_1.setredraw(true)    
     
  constant   long   wdFormatDocument   =   0    
  //
保存新建的文档    
  wordapp.ActiveDocument.SaveAs("sample.doc",   0,False,"",True,"",False,False,False,   False,False)    
     
  //
打印该word文档    
  wordApp.Application.printout()    
     
  //
断开OLE连接,释放wordapp对象    
  destroy   wordapp    
 
3)命令按钮   cb_end   鼠标单击事件代码      
  close(parent)    
 
几点说明      
 
在本程序运行之前,Word2000必须已经成功安装,否则系统将产生一个POWERBUILDER7.0可捕获的错误。读者可以在代码中加入错误处理代码以处理这些错误。      
 
若本程序运行时Word尚未运行,OLE自动化将试图启动它。因此程序代码中不必包括一条分开的指令来启动Word。若Word是由POWERBUILDER7.0应用程序启动的,那么程序结束时Word2000将自动关闭;否则,Word将继续运行。      
 
本实例使用的大部分WordBasic语句都与Word2000文档的插入点有关,如果在本程序运行过程中人为地移动了插入点,则有可能导致表格的混乱和错误。为了避免这种情况发生,本程序在执行插入操作之前使用ScreenUpdating语句将Word屏幕更新关闭,使用户在执行插入操作时不能移动插入点。      
 
从上述实例可以看到,通过OLE自动化,使我们在开发新的应用程序时可以借用现成的应用程序的部分或全部功能,从而大大地减轻开发的工作量,缩短开发周期,使开发工作事半功倍。这就是OLE自动化带给开发人员的好处。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 28天宝宝吵瞌睡怎么办 2个月宝宝闹瞌睡怎么办 被刺猬的刺扎了怎么办 买电脑被坑了怎么办 买电脑被坑了怎么办啊 在电脑城被坑了怎么办 小狗20天不睁眼怎么办 金星秀停播沈南怎么办 干了活拿不到钱怎么办 干完活要不到钱怎么办 让蚊子咬了很痒怎么办 秋天被蚊子咬了怎么办 练芭蕾脚背太硬怎么办 杨梅酒里的杨梅怎么办 月经期喝了啤酒怎么办 泡过酒的樱桃怎么办 泡了酒的桑葚怎么办 不知怀孕喝了酒怎么办 香氛蜡烛记忆环怎么办 我吃了马兜铃怎么办呀 肝肾衰弱有毒素怎么办 肾阴虚阳虚都有怎么办 吃辣刺激胃疼怎么办 舌头没有舌苔有裂纹疼痛怎么办 舌苔厚黄是怎么回事且口臭怎么办 舌苔厚白是怎么回事且口臭怎么办 长期有舌苔白厚怎么办 小孩的舌苔厚白怎么办 口苦口臭舌苔黄怎么办 婴儿的舌苔厚白怎么办 舌苔黄厚口臭痒怎么办 想让月经提前来怎么办 宝宝拉肚子怎么办吃什么好 投资p2p跑路了怎么办 借钱不还怎么办最有效 朋友借小钱不还怎么办 网络上贷款不还怎么办 网贷实在还不了怎么办 娱乐平台跑路了怎么办 360借条被拒了怎么办 网贷注册太多了怎么办