论坛登陆 用户名:  密 码:
设为首页  加入收藏
08年北京名校秋季招生
名牌院校免试入学宽进严出,突破考分限制,名校与你零距离,以下院校按报名先后顺序录取,24小时网上报名覆盖全国
  您现在的位置: 中国教育招生在线 >> IT >> 应试技巧 >> IT正文
VFP与EXCEL的几种交互编程方法
 作者:佚名     2007-3-14 15:59:32        来源:不详  浏览次数:

  一、EXECL驱动VFP
  EXECL内置的VBA语言(Visual Basic For Application)为EXECL功能的扩展提供了便利的手段,用户可使用该语言直接驱动VFP完成数据检索等功能。
  程序首先生成一个VFP对象,然后用VFP的DoCmd方法执行VFP摸索命令串,其摸索结果再借助于VFP的DateToClip方法拷贝至剪切板,最后VBA将其粘贴至工作表的正确位置。
  Sub FoxTest()
  
  Dim oFox As Object
  Dim SLesson As String
  Dim SCommand As String
  
  Set oFox = CreateObject("VisualFoxPro.Application") '启动VFP,生成VFP对象
  Sheets("查询").Select
  SLesson = Range("课程名") '在名为“课程名”的单元格中得到欲查询的课程名称
  Sheets.Add '产生新的工作表单
  ActiveSheet.Name = Slesson '指定工作表单的名称与课程名称相同
  
  SCommand = "SELECT 学号,语文,数学 FROM d:\vfp\学生成绩表 WHERE "+ SLesson + "<60 INTO CURSOR TEMP" '形成VFP查询命令串
  oFox.DoCmd Scommand '执行VFP命令串
  oFox.DataToClip "temp", , 3 '将搜索结果以文本方式拷贝至剪切板
  Range("a1:a1").Select '指向拷贝目标区域左上角单元
  ActiveSheet.Paste '粘贴搜索结果
  
  End Sub
  
  为便于使用,作者在EXECL中自制了一名为“搜索”的工具栏及一名为“开始搜索”的按钮,并将上述宏程序段与自制按钮相关联,按下此按钮即可运行程序并在EXCEL中得到要求的数据。
  制作工具栏及按钮的方法如下:
  1. 选“工具”/“自定义”菜单,出现自定义对话框;
  2. 选择“工具栏”页框,然后按下“新建”按钮;
  3. 在工具栏对话框中输入“搜索”作为新建工具栏的名称;
  4. 选择“命令”页框,在“类别”列表中选“宏”,在“命令”列表中选“自定义按钮”并将其拖放至新建的“搜索”工具栏;
  5. 按下“更新所选内容”按钮,首先在“命名”栏中填入按钮名称“开始搜索”,然后选择“指定宏”,在随后出现的“指定宏”列表中选择上述宏程序FoxTest()即可实现为该宏指定一个工具栏按钮。
  
  二、VFP使用OLE功能驱动EXECL
  OLE(Object Linking and Embedding)对象链接与嵌入,是WINDOWS应用程序间相互传递和共享数据的一种有效方法。VFP借助于OLE不仅可共享其它应用程序的数据,而且还能以对象方式直接控制其它应用程序的运行,从而进一步扩展VFP的功能。VFP支持直接在程序中创建、使用和控制OLE对象,实现OLE自动化。作为OLE客户VFP与作为OLE服务器的EXCEL具有良好的编程接口,下述程序段用OLE方式实现所要求的功能。
  程序首先生成一个EXCEL的OLE对象OleApp以便对其进行操作,然后利用OLE功能从EXCEL表单中获取欲查询的课程名,并控制EXCEL生成新的工作表,VFP的查询结果仍然使用剪切板的方式传递至EXCEL工作表。
  
  OleApp=CREATEOBJECT("Excel.Application") && 打开EXCEL,产生OLE对象
  OleApp.Application.Caption="VFP交互编程" && 指定标题栏名称
  OleApp.Application.Visible=.T. && 置EXCEL可见
  OleApp.Application.WorkBooks.Open("d:\vfp\VFP交互.xls") && 打开EXCEL工作簿
  
  DO WHILE .T.
  WITH OleApp.Application
  nAnswer = MESSAGEBOX("开始搜索?", 32+4, "搜索指定数据") &&产生信息框
  IF (.NOT.(nAnswer=6)) && 如按下“Yes"按钮,则开始搜索,反之退出
  EXIT
  ENDIF
  
  .Sheets("查询").Select && 选择“查询”工作表单
  SLesson = OleApp.Application.Range("课程名").value && 得到欲查询的课程名称
  .Sheets.Add && 新建一工作表单
  .ActiveSheet.Name = Slesson && 指定工作表单的名称
  SCommand = "SELECT 学号,语文,数学 FROM d:\vfp\学生成绩表 WHERE " +ALLTrim(SLesson) + "<60 INTO CURSOR TEMP" && 形成VFP查询命令串
  &Scommand && 执行VFP命令串
  _VFP.DataToClip("TEMP",,3) && 将搜索结果以文本方式拷贝至剪切板
  .Range("a1:a1").Select && 指向拷贝目标区域左上角单元
  .ActiveSheet.Paste && 粘贴搜索结果
  ENDWITH
  ENDDO
  
  OleApp.Quit && 关闭EXCEL,保存更新后的工作簿文件
  三、VFP使用DDE功能驱动EXECL
  DDE(Dynamic Data Exchange)动态数据交换,是WINDOWS应用程序间相互传递和共享数据的另一种有效方法,DDE用共享存储器在应用程序间交换数据。DDE会话发生在DDE客户与DDE服务器应用程序之间,客户应用程序向服务器应用程序请求数据和服务,而服务器响应客户应用程序对数据与服务的请求。DDE的数据交换可分三种方式:
  * 冷链接:客户应用程序请求数据时,服务器应用程序才发送数据给客户应用程序;
  * 暖链接:服务器应用程序在每次数据项的值变化时都向客户应用程序发送通告,但它并不直接发送值给客户应用程序,而由客户应用程序决定是否取得该数据;
  * 热链接:服务器应用程序在每次值变化时都发送数据项的新值给客户应用程序。
  VFP与EXCEL均支持DDE客户与服务器。下述程序段由作为DDE客户的VFP应用程序与作为DDE服务器的EXCEL用DDE方式实现所要求的功能。
  程序首先启动EXCEL,然后在VFP应用程序与“查询”工作表单的“课程名”单元格之间形成“热链接”,当“课程名”单元格内容改变时,将自动执行
  “GetData”过程。在该过程中首先直接获取DDE数据,如果该数据为“空”,则关闭EXCEL,程序结束;反之,利用DDEPOKE功能向EXCEL发送键盘命令串,以形成新的工作表,最后VFP将查询结果通过剪切板送EXCEL形成要求的工作表。
  
  PUBLIC ExcelChan
  PUBLIC SheetChan
  
  RUN /N3 C:\Program Files\Microsoft Office\Office\EXCEL.EXE && 以“活动”与“最大化方式启动EXCEL
  ExcelChan = DDEInitiate("Excel",'SYSTEM') && 初始化DDE通道ExcelChan
  = DDEExecute(ExcelChan,'[Open("d:\vfp\VFP交互.xls")]') && 打开“VFP交互.xls”
  
  SheetChan = DDEInitiate('Excel', '查询') && 初始化DDE通道SheetChan
  = DDEAdvise(SheetChan, '课程名', 'GetData', 2) && 在VFP应用程序与“查询”工作表单的“课程名”单元格之间形成“热链接”!如果该单元数值改变,则执行“GetData”过程。
  
  PROCEDURE GetData
  PARAMETERS Channel, Action, Item, Data, Format, Advise
  IF Action = 'ADVISE' .AND. Item = '课程名' && 服务器提供的链接名为“课程名”
  SLesson = Data && 直接获取DDE服务器提供的数据
  SLesson = LEFT(SLesson,LEN(SLesson)-2) && 去掉原始数据尾部的格式字符
  IF (LEN(SLesson)=0) && 如果指定单元格内容为“空”,则退出
  = DDETerminate(SheetChan) && 终止DDE通道SheetChan
  = DDEExecute(ExcelChan,'[Quit]') && 退出EXCEL
  = DDETerminate(ExcelChan) && 终止DDE通道ExcelChan
  ELSE
  = DDEExecute(ExcelChan,'[Formula.Goto("课程名")]') && 指定名为“课程名”
  的单元格为活动单元格
  = DDEExecute(ExcelChan,'[Copy]') && 将指定单元格内容拷贝至剪切板
  SKey="'%IW%OHR^V{enter}'" && 键盘命令字符串,表示“插入(I)|工作表(W);格式(O)|工作表(H)|重命名(R);粘贴”
  = DDEExecute(ExcelChan,&SKey) && 通过DDE通道将命令串送EXCEL
  WAIT WINDOW TIMEOUT 2 && 等待2秒钟以实现上述命令串
  SCommand = "SELECT 学号,语文,数学 FROM d:\vfp\学生成绩表 WHERE " +ALLTRIM(SLesson) + "<60 INTO CURSOR TEMP" && 形成VFP查询命令串
  &Scommand && 执行VFP命令串
  _VFP.DataToClip("TEMP",,3) && 将搜索结果以文本方式拷贝至剪切板
  
  SheetChan1 = DDEInitiate("Excel",'&SLesson') && 初始化DDE通道SheetChan1
  指向新生成的工作
  = DDEExecute(SheetChan1,'[Paste]') && 粘贴搜索结果
  = DDETerminate(SheetChan1) && 终止DDE通道SheetChan1
  ENDIF
责任编辑:lss
  相关新闻
06年9月23日计算机等级考试二级VF官方标准试卷
06年9月计算机等级考试二级VF笔试试卷(Word版)
一段VFP错误处理代码
在VFP报表中实现每页打印指定记录数
VFP表转换成SQL Server表的方法
用Word更好地输出VFP报表
2006年9月计算机等级考试二级VF标准答案及解析
从笔试看二级VFP复习,基础教程网
专家谈如何准备二级VFP上机考试
VFP的数据库加密算法
从笔试看二级VFP复习,基础教程网
专家谈如何准备二级VFP上机考试
06年9月23日计算机等级考试二级VF官方标准试卷
06年9月计算机等级考试二级VF笔试试卷(Word版)
2006年9月计算机等级考试二级VF标准答案及解析
JSP与MySQL交互的中文乱码解决方案
什么是AOP系列之二:AOP与权限控制实现
大话——面向切面(AOP)与面向对象(OOP)
我的乱码之路——JSP与MySQL交互的中文乱码解决方案及
安裝amfphp
  评论
现在有100人对本文发表评论
查看所有评论
 
推  荐
 
100本成功必读热销书
热门招生
  北京文理研修学院   前进大学
  北京明园大学   北京建设大学
  北京邮电大学世纪学院   北方工商管理学院
  联想软件定向委培班   香港数码动画学院
  青年企业管理研修学院   北京华夏管理学院
热门培训
网络化办公专家培训认证 电子科技大学软件学院
软件测试工程师培训认证 北大青鸟十大授权培训
IT硬件工程师培训认证班 北京环球雅思荷兰预科
JAVA开发工程师培训 潜能时代IT服务管理培训
网络信息化工程师培训 清华大学继续教育学院
论坛精选
 
有些细节是男人也该注意的风度!最容易读错的字
某强人手机里保存的30条短信 中国十大高薪职业
最感人的十大韩剧经典台词 嫁给工程师的N个理由
爆强!只有一句话的鬼故事 转贴教你如何做妖精
 女人一定要記住的話 女人最好别嫁给最爱的男人
城市联盟
 大连 上海 天津 广州 西安 深圳  天津  青岛  大连  福州  沈阳  青海  连云港  南京  吉林  厦门  威海  辽宁  呼和浩特
Copyright © 2006   www.edu999.com   All rights reserved. 中国教育招生在线  版权所有
北京市通信管理局[2004]字第552号函    京ICP证040442号