Database 版 (精华区)
发信人: mengy (LEAR DLLS 命令时,将从内存中清除), 信区: Database
标 题: 将Visual FoxPro的数据转给Excel
发信站: 哈工大紫丁香 (2000年12月13日09:18:02 星期三), 站内信件
将Visual FoxPro的数据转给Excel
中国科学院广州能源研究所
张伟铭
---- 用Visual FoxPro编程,很多时候需要将用户需要的数据有条件地转出给其他
软件处理。Excel是大家熟悉的软件,这里,本人总结了一种转换方法,供大家参
考。
---- 1、 转化的基本条件
---- 对需要转出数据的主数据表,需要提供另外一个辅助表,此表需要与主表同
时打开,表的结构如下:(在此命名为d_gwt.dbf)
字段名 类型 宽度 备注
E_NAME 字符型 20 记录主表的字段名
D_FORT 逻辑型 1 备份选择项目(可以不要)
S_FORT 逻辑型 1 选择项目
---- 2、 建立一个如下表单以供主表单调用,以便选择输出不同的字段的内容:
表单的Init event:
replace all d_gwt.d_fort with d_gwt.s_fort
goto top
Grid1的Init event:
this.column2.check1.caption=""
&&取消选择符号后面的文字
“取消”的click event:
release thisform
“全部不选”的click event:
nrecno=recno()
replace all d_fort with .F.
goto nrecno
thisform.refresh
“全部选中”的click event:
nrecno=recno()
replace all d_fort with .T.
goto nrecno
thisform.refresh
“确认”的click event:
replace all s_fort with d_fort
release thisform
---- 3、 记录的筛选:
---- 请使用Visual FoxPro自带的过滤器选择记录,当然也可以自己另外设计程序
对主数据表进行筛选,这里只是使用filter()的返回值。
---- 4、 转化数据给Excel:
---- 打开建立一个命令控件,使其click event如下:
LOCAL i, j, xlsheet, XLApp, tmpsheet,
nrecno,gwtfilter, ntorf
SELE gwt &&在此使用gwt.dbf为主数据表
gwtfilter=filter()
count to nrecno
SELE D_GWT
COUNT TO NTORF FOR S_fort
IF NTORF=0
WAIT "没有选择任何项目的数据
给Excel处理..." windows
Sele gwt
Return
ENDIF
SELECT e_name from alias() where
s_fort INTO ARRAY arrTestData1
SET FILTER TO s_fort=.T.
selectfield=""
GOTO TOP
DO WHILE .NOT. EOF()
selectfield=selectfield+E_NAME+','
SKIP
ENDDO
selectfield=SUBSTR(selectfield,1,len(selectfield)-1)
SET FILTER TO
SELE GWT
DIMENSION arrtestdata(ntorf,nrecno)
IF Empty(GWTFILTER)
SELECT &selectfield from alias()
INTO ARRAY arrTestData
ELSE
SELECT &selectfield from alias()
WHERE &gwtfilter INTO ARRAY arrTestData
ENDIF
WAIT WINDOW "Starting Excel..." NOWAIT
tmpsheet = GetObject('','excel.sheet')
XLApp = tmpsheet.application
XLApp.Visible = .t.
XLApp.WorkBooks.Add()
XLSheet = XLApp.ActiveSheet
**转换第一行的数据,也即是数据表的字段
FOR I=1 TO NTORF
XLSheet.Cells(1,I).Value = arrTestdata1(1,I)
ENDFOR
**转换数据内容
FOR i = 1 to nrecno
FOR j = 1 to ntorf
XLSheet.Cells(i+1,j).Value = arrTestData(i,j)
ENDFOR
?? chr(7)
ENDFOR
WAIT WINDOW "数据转化成功..." TIMEOUT 2
------------------------------------------------------------------------
--------
中国计算机世界出版服务公司版权所有
--
大海无边天做岸
山登绝顶我为风
※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 202.118.227.121]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:2.473毫秒