设为首页   |  加入收藏夹 快速导航:  热门文章  |  最新文章  |  梦想博客  
当前位置:编程之家 -> 文章频道 ->vf 
站内搜索:  

VFP与Excel交互编程(2)

作者:何咏明 来源:anqn.com 整理日期:2006-08-12


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