**这是一个模块,在运行时可根据情况设定表头和文件存放位置,fname为文件位置,baotu为表头名称,此模块可将任意当前工作区的文件导出到电子表格,表头设定为三行
**fname要包含文件名称,如"C:\我的文件.xls",q_usename为制表的名称
**在程序中将它定义成过程,用的时候调用一下,传递三个变量
LPARAMETERS fname,baotu,q_usename
        IF !FILE(fname)
            gnsysfile=FCREATE(fname,0)
            =FCLOSE(gnsysfile)
        ENDIF 
        eole=CreateObject("Excel.application")
        eole.Workbooks.Open(fname)
        eole.ActiveWindow.DisplayZeros=.F. &&不显示零
        **绘制表头
        RELEASE arrayname,arrayname1 &&此处用来清空可能事先存在的数组,
        afields(arrayname)
        bls=ALEN(arrayname,1) &&表有多少列
        jsl=IIF(bls>26, CHR(97+INT(bls/25))+chr(97+MOD(bls,25)-1) , chr(97+bls-1)) &&利用a-z的asc码巧攻成功,,,,:)...,很好玩,可处理ZZ行以内的,够用了

&&写入表头
        eole.ActiveSheet.Range("A1:"+jsl+"1").Merge
        eole.Cells(1,1).Value=baotu
        eole.Cells(1,1).font.name="黑体"
        eole.Cells(1,1).font.size=16
        eole.Cells(1,1).HorizontalAlignment=3
        eole.ActiveSheet.Range("A2:b2").Merge
        eole.Cells(2,1).Value='制表人:'+ALLTRIM(q_usename)
        eole.ActiveSheet.Range("c2:d2").Merge
        eole.Cells(2,3).Value='制表日期:'+DTOC(DATE())
        &&写表头第三行,利用得到的表结构写表头字段名
        FOR i=1 TO bls
            eole.Cells(3,i).Value=arrayname(i,1)
            eole.Cells(3,i).font.name="黑体"
            eole.Cells(3,i).font.size=12
            eole.Cells(3,i).HorizontalAlignment=3
        ENDFOR 
    
        COPY TO ARRAY arrayname1 &&将当前数据表导入数组
        jls=ALEN(arrayname1,1) && 有多少行
        FOR i=1 TO jls
            FOR j=1 TO bls
                eole.Cells(i+3,j).font.size=9
                ****货币Y,双精度B,整形I,数值N,浮动F          **日期D,日期时间T      **逻辑    L    字符    C    **备注    M    **通用    G    **字符二进制    C    **备注二进制    M
    &&根据每列的不同数据类型确定写入方式
                DO CASE 
                    CASE arrayname(j,2)='N' OR arrayname(j,2)='Y' OR arrayname(j,2)='B' OR arrayname(j,2)='F' OR arrayname(j,2)='I' 
                        IF INT(arrayname1(i,j))=arrayname1(i,j)
                            eole.Cells(i+3,j).NumberFormatLocal = "#,##0_ "
                        ELSE
                            eole.Cells(i+3,j).NumberFormatLocal = "#,##0.00_ "
                        ENDIF 
                        IF arrayname1(i,j)<0
                            eole.Cells(i+3,j).font.ColorIndex=3
                        ENDIF 
                        eole.Cells(i+3,j).Value=arrayname1(i,j)
                    CASE arrayname(j,2)='D' OR arrayname(j,2)='T' 
                        eole.Cells(i+3,j).NumberFormatLocal = "yyyy-m-d"
                        eole.Cells(i+3,j).Value=arrayname1(i,j)
                    CASE arrayname(j,2)='T' 
                        eole.Cells(i+3,j).NumberFormatLocal = "yyyy-m-d h:mm;@"
                        eole.Cells(i+3,j).Value=arrayname1(i,j)
                    CASE arrayname(j,2)='L' 
                        eole.Cells(i+3,j).Value=IIF(arrayname1(i,j),'是','否')
                    CASE arrayname(j,2)='C' OR arrayname(j,2)='M' OR arrayname(j,2)='G'
                        eole.Cells(i+3,j).Value=ALLTRIM(arrayname1(i,j))
                ENDCASE 
            ENDFOR 
        ENDFOR 
        RELEASE arrayname,arrayname1
        eole.Visible=.T.