正文

VFP与Excel交互编程2006-04-13 20:39:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/wojiele/12371.html

分享到:

====VFP与Excel交互编程====    VFP(Visual Foxpro)是一种关系型数据库管理系统,由于其强大的数据处理能力及良好的兼容性,使其成为数据库应用程序开发人员强有力的工具而广为使用; 而Excel则是一个优秀的电子表格处理软件,在兼容性、操作界面、公式运算、图表等方面有着独到的优势,成为广大办公应用人员必备的首选软件。上述两种软件在各自的应用领域均得到了广泛的应用,同时上述两种软件还具有良好的交互编程能力,为两者相辅相成、取长补短奠定了良好的基础。    本文将结合实例介绍VFP与Excel交互编程的方法,在VFP中除了使用OLE技术外,还可使用DDE技术与外部服务器进行数据交换,本文主要讲解VFP中使用OLE技术与Excel交换数据,Excel中借助内置的VBA使用VFP提供的Application对象来调用VFP中的一些功能。其功能可简述如下:VFP数据表"学生成绩.DBF"中含"学号、姓名、语文、数学"等字段,示例程序将从Excel工作簿"VFP交互.XLS"的工作表"查询"中用"条件"区域(一般为一个矩形区中的数据,该区域名称指定为"条件",数据形如"语文>60"、"数学<90"等)中的数据作为查询的条件,用"连接条件"区域(一般为一个单元格,其值为"or"或者"and")来获取组合"条件"的逻辑连接,并将该连接信息的内容以工作表的形式显示出来,然后调用VFP中针对给定表的SQL查询来找出给定条件的记录并显示到Excel中。下列程序均在VFP 6.0与Excel 2000中调试通过。*****Excel驱动VFP*****    Excel内置的VBA语言(Visual Basic For Application)为Excel功能的扩展提供了便利的手段,用户可使用该语言直接驱动VFP完成数据检索等功能。程序首先生成一个VFP对象,然后用VFP的DoCmd方法执行VFP搜索命令串,其搜索结果再借助于VFP的DataToClip方法拷贝至剪切板,最后VBA将其粘贴至工作表的正确位置,为了每次运行时能将结果插入到工作表中,依次对操作的工作表以"搜索结果"、"搜索结果1"等进行编号。Sub exceluseFox ()Dim oFox As Object '声明oFox为一个对象Dim SCommand As String 'SQL对应的命令串变量Dim cell As VariantDim choice As StringDim join As StringDim first As BooleanDim found As Boolean '搜索结果标志,若表单中有搜索结果,则为真Set oFox = CreateObject("VisualFoxPro.Application") '启动VFP,生成VFP对象Sheets("查询").Select '选择对应的工作表"查询"join = Range("连接条件") '在单一表格中的一个元素,其值为and或者orchoice = "" '置连接串初值为空first = True '一般情况下连接串后需要加上逻辑连接符and 或 or,首次例外For Each cell In Range("条件") '产生连接条件,形成where语句的连接逻辑串If first Then   choice = choice + cell '形成第一次出现的where子句后的字符串   first = False '修改首次进入标志,以后的连接均需要加上逻辑连接符Else   choice = choice + " " + join + " " + cell 'join的值是and或者是orEnd IfNext cellSheets.Add '产生新的工作表单'找一个不重复的工作表名found = False '工作表名中前四个汉字有没有"搜索结果"的标志变量n = 1For Each cell In WorksheetsIf InStr(1, cell.Name, "搜索结果") <> 0 Then   found = True '找到对应的工作表   If n < Val(Mid(cell.Name + Space(2), 5, 2)) Then      n = Val(Mid(cell.Name + Space(2), 5, 2)) '形成形如搜索结果1、搜索结果2等的表单名    End IfEnd IfNext cellIf Not found Then   ActiveSheet.Name = "搜索结果"Else   n = n + 1 '值增1   ActiveSheet.Name = "搜索结果"& n '形成工作表名End IfSCommand ="SELECT * FROM d:\vfp\学生成绩表 WHERE"+ choice +" INTO CURSOR TEMP" '形成VFP查询命令串oFox.DoCmd Scommand '执行VFP命令串oFox.DataToClip "temp", , 3 '将搜索结果以文本方式拷贝至剪切板Range("a1: a1").Select '指向拷贝目标区域左上角单元ActiveSheet.Paste '粘贴搜索结果End Sub    上述Excel中的区域名称(如"条件"和"连接条件"名称)的设定方法是,在Excel中选择菜单"插入->名称->定义"来完成对给定区域名称的设定,这个名称可以在VBA中访问,如前述中的"条件"和"连接条件"。****VFP使用Excel****    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工作表中。local condition,where1,first,scommand,cell,newsheet,found1,nOleApp=CreateObject("Excel.Application") && 打开Excel,产生OLE对象OleApp.Application.Caption="VFP交互编程" && 指定标题栏名称OleApp.Application.Visible=.T. && 置Excel可见OleApp.Application.WorkBooks.Open("d:\vfp\VFP交互.xls") && 打开Excel工作簿,用户也可以修改连接条件或者查询条件where1="" &&保存SQL中where子句的变量first=.t. &&置首次进入"查询"工作表中"条件"区域标志found1=.f.n=1DO WHILE .T.WITH OleApp.ApplicationnAnswer = MessageBox("开始搜索?",32+4,"搜索指定数据") &&显示搜索信息IF (.NOT. (nAnswer=6)) && 如按下"Yes"按钮,则开始搜索,反之退出EXITENDIF.Sheets("查询").Select && 选取示例中的对应工作表condition=.range("连接条件").value &&得到"连接条件"区域中的逻辑连接符for each cell in .range("条件").value &&将表单区域内所有单元的数据拼接以形成where的连接逻辑串If first ThenWhere1 = Where1 + cell &&首次进入时where子句中串前不需要逻辑连接符first = .f. &&置非首次进入标志ElseWhere1=Where1 +""+condition +""+ cell &&这里condition的值取and或者orEndIfnext for.Sheets.Add && 新建一工作表单 &&下面的for …each子句是用于找寻有否对应的工作表,若有则在搜索结果1、搜索结果2……搜索结果n中得到最大的n值以便产生下一个比n大1的新工作表"搜索结果&(n+1)"for each newsheet in .worksheetsif "搜索结果"$ newsheet.namen=max(val(subset(newsheet.name+space(2),9,2)),n) &&得到最大的n值found1=.t. &&置找到工作表中前四个汉字是"搜索结果"的工作表endifnext forif not found1.ActiveSheet.Name ="搜索结果1" && 指定工作表单的名称else.activesheet.name="搜索结果"+str(n+1,2) &&得到唯一的工作表endifSCommand = "SELECT * FROM d:\vfp\学生成绩表 WHERE "+ALLTrim(where1) +"INTO CURSOR TEMP" && 形成VFP查询命令串&Scommand && 执行VFP命令串_VFP.DataToClip("TEMP", , 3) && 将搜索结果以文本方式拷贝至剪切板.Range("a1: a1").Select && 指向拷贝目标区域左上角单元.ActiveSheet.Paste && 粘贴搜索结果ENDWITHENDDOOleApp.Quit && 关闭Excel,保存更新后的工作簿文件******结束语*****    VFP与Excel的交互能力是很强的,用户可以使用VFP处理数据库的一些运算,如插入、排序、合并、选择等,将结果交由Excel中进行一些后期的处理,甚至可以将一些抽取数据的条件直接加入到Excel的条件区域中,由VFP来读取条件区域进行数据的筛选。总之,只要能充分利用好各自的优点,理解交互的接口方法,就一定能够编写出较适用的程序,满足实际工作的需要

阅读(13710) | 评论(2)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

loading...
您需要登录后才能评论,请 登录 或者 注册