Database 版 (精华区)

发信人: starstar (星语心愿), 信区: Database
标  题: 将Visual FoxPro的数据转给Excel 
发信站: 哈工大紫丁香 (2001年05月19日20:37:45 星期六), 站内信件

---- 用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.239.32]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:1.977毫秒