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