• 注册
  • 关于作者
    企业认证:趣记站长
    关注 6 粉丝 4 喜欢 9 内容 992
    江西省·南昌市
    聊天 送礼
    • 查看作者
    • VFP与Excel交互编程

      ◆ 何咏明 (djkhym@netease.com)

      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 Variant

      Dim choice As String

      Dim join As String

      Dim first As Boolean

      Dim found As Boolean ’搜索结果标志,若表单中有搜索结果,则为真

      Set oFox = CreateObject(“VisualFoxPro

      .Application”)

      ’启动VFP,生成VFP对象

      Sheets(“查询”).Select

      ’选择对应的工作表“查询”

      join = Range(“连接条件”)

      ’在单一表格中的一个元素,其值为and或者or

      choice = “” ’置连接串初值为空

      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或者是or

      End If

      Next cell

      Sheets.Add ’ 产生新的工作表单

      ’找一个不重复的工作表名

      found = False

      ’工作表名中前四个汉字有没有“搜索结果”的标志变量

      n = 1

      For Each cell In Worksheets

      If 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 If

      End If

      Next cell

      If Not found Then

      ActiveSheet.Name = “搜索结果”

      Else

      n = n + 1 ’值增1

      ActiveSheet.Name = “搜索结果”& n

      ’形成工作表名

      End If

      SCommand =“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)对象链接与嵌入,

      在VFP中怎样做出象IE4中的那样的浮动按钮
      VFP编辑框中实现自动更正的方法,Visual FoxPro 9.0更强大了,如何用VFP的dbf进行SQL Server 7.0 的分布式查询,VFP智能感应的二次开发,谈两种数据库内容HTML格式的输出方法,用FoxWeb在网上快速发布你的FOXPRO数据库,在VFP5.0中实现中英文自动切换,在VFP中实现跟变式组合框及椭圆图形菜单,通过编程运行拨号网络连接,VFP中实现在浏览器中运行应用程序方法,为Visual FoxPro应用程序增加文件压缩功能,在VFP中模拟动画,用Visual FoxPro 5.0 设计数据文件结构浏览器,VFP表跟踪实现方法,让VFP程序在浏览器中运行,怎样在Visual FoxPro 中增加与去除网络联接,谈谈VFP和SQL SERVER搭配做C/S系统,卡拉OK字幕着色动态显示,利用Foxpro在网络环境下开发数据库管理软件经验点滴,用Foxpro制作Windows输入法码表
      Visual Foxpro

      是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,n

      OleApp=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=1

      DO WHILE .T.

      WITH OleApp.Application

      nAnswer = MessageBox(“开始搜索?”, 32+4, “搜索指定数据”)

      &&显示搜索信息

      IF (.NOT. (nAnswer=6))

      && 如按下“Yes”按钮,则开始搜索,反之退出

      EXIT

      ENDIF

      .Sheets(“查询”).Select

      && 选取示例中的对应工作表

      condition=.range(“连接条件”).value

      &&得到“连接条件”区域中的逻辑连接符

      for each cell in .range(“条件”).value

      &&将表单区域内所有单元的数据拼接以形成where的连接逻辑串

      If first Then

      Where1 = Where1 + cell

      &&首次进入时where子句中串前不需要逻辑连接符

      first = .f. &&置非首次进入标志

      Else

      Where1=Where1 +“ ”+condition +“ ”+ cell

      &&这里condition的值取and或者or

      EndIf

      next for

      .Sheets.Add && 新建一工作表单

      &&下面的for …each子句是用于找寻有否对应的工作表,若有则在搜索结果1、搜索结果2……搜索结果n中得到最大的n值以便产生下一个比n大1的新工作表“搜索结果&(n+1)”

      for each newsheet in .worksheets

      if “搜索结果”$ newsheet.name

      n=max(val(subset(newsheet.name+space(2),9,2)),n) &&得到最大的n值

      found1=.t. &&置找到工作表中前四个汉字是“搜索结果”的工作表

      endif

      next for

      if not found1

      .ActiveSheet.Name =“搜索结果1”

      && 指定工作表单的名称

      else

      .activesheet.name=“搜索结果”+str(n+1,2)

      &&得到唯一的工作表

      endif

      SCommand = “SELECT * FROM d:\vfp\学生成绩表 WHERE ”+ALLTrim(where1) +

      “INTO CURSOR TEMP”

      && 形成VFP查询命令串

      &Scommand && 执行VFP命令串

      _VFP.DataToClip(“TEMP”, , 3)

      && 将搜索结果以文本方式拷贝至剪切板

      .Range(“a1: a1”).Select

      && 指向拷贝目标区域左上角单元

      .ActiveSheet.Paste

      && 粘贴搜索结果

      ENDWITH

      ENDDO

      OleApp.Quit

      && 关闭Excel,保存更新后的工作簿文件

      结束语

      VFP与Excel的交互能力是很强的,用户可以使用VFP处理数据库的一些运算,如插入、排序、合并、选择等,将结果交由Excel中进行一些后期的处理,甚至可以将一些抽取数据的条件直接加入到Excel的条件区域中,由VFP来读取条件区域进行数据的筛选。总之,只要能充分利用好各自的优点,理解交互的接口方法,就一定能够编写出较适用的程序,满足实际工作的需要。

      VFP中常用WIN32API函数调用事例
      VFP编辑框中实现自动更正的方法,Visual FoxPro 9.0更强大了,如何用VFP的dbf进行SQL Server 7.0 的分布式查询,VFP智能感应的二次开发,谈两种数据库内容HTML格式的输出方法,用FoxWeb在网上快速发布你的FOXPRO数据库,在VFP5.0中实现中英文自动切换,在VFP中实现跟变式组合框及椭圆图形菜单,通过编程运行拨号网络连接,VFP中实现在浏览器中运行应用程序方法,为Visual FoxPro应用程序增加文件压缩功能,在VFP中模拟动画,用Visual FoxPro 5.0 设计数据文件结构浏览器,VFP表跟踪实现方法,让VFP程序在浏览器中运行,怎样在Visual FoxPro 中增加与去除网络联接,谈谈VFP和SQL SERVER搭配做C/S系统,卡拉OK字幕着色动态显示,利用Foxpro在网络环境下开发数据库管理软件经验点滴,用Foxpro制作Windows输入法码表
      Visual Foxpro

    • 0
    • 0
    • 0
    • 84
    • 单栏布局 侧栏位置: