Database 版 (精华区)
发信人: Powerpc_Pm@bbs.ustc.edu.cn (四大烂人之零零烂), 信区: cndatabase
标 题: [转贴]VFP中的OLE自动化与MS OFFICE的集成
发信站: 中国科大BBS站 (Sat Apr 25 02:17:34 1998)
转信站: Lilac!ustcnews!ustcbbs
Subject: VFP中的OLE自动化与MS OFFICE的集成
Date: 18 Apr 1998 15:11:09 GMT
From: pipishi.bbs@bbs.nju.edu.cn (奔跑的小狮)
Organization: nju_bbs
Newsgroups: cn.bbs.comp.program
微软公司曾宣布,它的所有基于Windows的产品连同Windows本身及
未来的版本都将基于OLE这种技术,进而使Windows成为一种集成性很
强的平台。本文将讨论OLE的自动化,并举例说明在VFP3.0(Visual Fo
xpro)中如何通过OLE自动化实现对微软Office应用的控制。
OLE自动化最简单的说法是:一个应用程序控制另外一个应用程序
的过程,这可以通过创建一个OLE对象来实现。对象具有属性和方法,
属性允许设置对象的状态或其它数据条目的值,方法可以对某一对象
执行一个作用,诸如打印文件、计算等等。
在微软新近推出的VFP3.0当中,增加了支持OLE自动化的功能,使V
FP开发的应用能够使用其他的应用程序去做更适合于该应用程序的工
作,其中最为突出的就是与微软的Office一起进行协同工作。
使用OLE自动化一般需要经过几个步骤:首先基于某个服务器应用
程序在VFP中创建对象或者使用已经存在的对象;然后可以利用该应用
程序的方法对这个对象进行各种操作,这些方法经常是宏命令或者是
应用程序中的命令(如在EXCEL中的各种命令);最后还要释放OLE对象
的宿主应用程序,释放OLE对象。
为了获取其他应用的对象,在VFP当中提供了两个函数用于创建
对象,一旦获得了某个对象就可以通过对象的属性和方法来操纵这个
对象。
1.CREATEOBJECT()函数
从一个支持OLE对象的应用程序中创建一个新对象,这个命令同样
也可以用于从Foxpro内部的或用户自定义的类中生成对象,在这里只
介绍OLE对象的生成。
语法: <memvar>=CREATEOBJECT(cCLassName)。
参数: cCLassName指定用来创建新对象的类或OLE对象,新对象将
从它那里生成。
VFP将按照下面的顺序搜索类或者指定的OLE对象:
· Visual Foxpro的基类;
· 在内存中按加载顺序排列用户自定义的类;
· 当前程序中的类;
· 使用SET CLASSIB命令打开的在.VCX类库中的类;
· 使用SET PROCEDURE命令打开的过程文件中的类;
· 在Visual Foxpro程序执行链中的类;
· Windows注册表(对于OLE对象而言)。
对应于cCLassName的OLE对象用下列语法生成:
ApplicationName.Class
例如,要用OLE自动化生成一个MICROSOFT Word对象,可以用下列
语句:
A1=CREATEOBJECT("WORD.BASIC")
当这一行代码执行以后,Word就会被启动(这个例子是在Word还没
有运行的情况下), 同时创建了所指定的对象类型,但还未使Word可见
,(有一点需注意:如果Word已经在运行当中, 当执行这条命令时,它不
会创建一个新的分离的实例而是引用当前已经存在的实例;而EXCEL
则不同:如果对EXCEL使用三次CREATEOBJECT EXCEL就会启动运行三次
,即创建了三个不同的实例)。一旦对象被建立以后,就可以通过使用
定义的对象变量在代码中引用它。在上面的例子中,可以通过定义的A
1变量来访问这个新对象的属性和方法。例如:
A1.Insert ("HELLO WORD。")
A1.FILEPRINTDEFAULT
2.GETOBJECT()函数
激活一个已经存在的OLE自动化对象(并建立对这个对象的引用)
。
语法:GETOBJECT([cFILENAME[,cCLASSNAME])。
参数:cFILENAME指定了要激活文件的完整路径和文件名。
cCLASSNAME是要检索对象的类名(在这里要说明一点,cCLASSNAM
E并不需要被设定,因为OLE的动态链接库会根据所提供的文件名决定
需要启动的应用)。
例如,下面的代码启动了EXCEL,打开了一个叫MYSHEET.CLS的文件
,生成了一个引用,并把它存储到一个对象内存变量MYCLS中:
Mycls=GETOBJECT("C:\EXCEL\WORK\MYSHEET.CLS")
3.举例
下面举例说明利用VFP的OLE自动化与MS Office的结合应用。这
个例子说明利用OLE自动化将从VFP中选择出来的数据插入EXCEL电子
表格当中,并显示统计的数据图表,同时在Word中显示本篇文章(A:\OL
E.DOC),同时打印出这篇文章。
进入VFP建立新的表单,在上面加入COMMANDBUTTON控件,将其CAPT
ION的属性改为"OLE自动化",然后用鼠标双击按钮并在代码窗口中键
入:
*****程序代码
#DEFINE WAITMSG0_LOC "请按任意键继续进行"
#DEFINE WAITMSG1_LOC "正在执行查询…"
#DEFINE WAITMSG2_LOC "创建 Excel 表单…"
#DEFINE WAITMSG3_LOC "将查询信息输入到EXCEL电子表格中…"
#DEFINE WAITMSG4_LOC "正在创建 Graph 对象..."
#DEFINE WAITMSG5_LOC "创建Graph..."
#DEFINE WAITMSG6_LOC "创建 Word 文本..."
#DEFINE WAITMSG7_LOC "完成!"
PUBLIC objwddoc
str= "利用VFP中的OLE自动化来控制微软Office的应用"
wait wind WAITMSG1_LOC nowait
SELECT name,age FROM al INTO array cust_distrib
wait wind WAITMSG0_LOC
wait wind WAITMSG2_LOC nowait
objsheet=crea("Excel.Sheet") ****创建对象OBJSHEET
objsheet.application.visible=.T. ****使工作表可见
Wait wind WAITMSG3_LOC nowait
*** 拷贝数据到EXCEL中
for i = 1 to _TALLY
objsheet.Cells(i,1).Value = cust_distrib(i,1)
objsheet.Cells(i,2).Value = cust_distrib(i,2)
endfor
Wait wind WAITMSG4_LOC nowait
*** 增加一个图形对象到工作表中去
objChart1 = objsheet.ChartObjects.Add(100, 100, 200, 200
)
***建立图型.
Wait wind WAITMSG5_LOC nowait
objsheet.chartobjects(1).chart.;
chartwizard(objsheet.range(objsheet.cells(1,1),objsheet.
cells(10,2)),-4100, 4,1,0,1,1,"","","","")
objXLsheet.application.quit **关闭EXCEL
release objsheet **释放OBJSHEET对象
Wait wind WAITMSG6_LOC nowait
objWDdoc=crea("word.basic")
objwddoc.fileopen("a:\ole.doc") **打开A盘上的OLE.DOC文件
objwddoc.editgoto("biaoti") **编辑名为"BIAOTI"的书签,在
本例中的OLE.DOC中的第一行定义书签BIAOTIobjwddoc.insert (str)
**用STR代替书签当前的内容
objwddoc.fileprintdefault**打印这个文件
Wait Wind WAITMSG7_LOC nowait
release objwddoc
以上只是一个简单的例子,用以说明Visual Foxpro中OLE自动化
。关于OLE自动化最困难的事情是学习命令所需的语法,以便在VFP中
可以使用这些命令。大多数的情况下,所描述的语法和参数都包含在
服务器的文档中,用户可以在其中进行查阅并在程序中使用它。
还要注意的问题是OLE自动化的资源密集性。在写OLE自动化的程
序时,内存是很重要的因素,内存越大同时运行的程序越多。一般要求
机器具备16MB内存和高性能的486以上处理器或更高。
--
※ 来源: 中国科大BBS站 [bbs.ustc.edu.cn]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:3.924毫秒