
VFP与Excel交互编程(2) |
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来读取条件区域进行数据的筛选。总之,只要能充分利用好各自的优点,理解交互的接口方法,就一定能够编写出较适用的程序,满足实际工作的需要。 |