标题:将当前工作区中打开的表自动转换为EXCEL文件
取消只看楼主
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:396
帖 子:11713
专家分:43267
注 册:2006-5-13
结帖率:99.55%
已结贴  问题点数:20 回复次数:14 
将当前工作区中打开的表自动转换为EXCEL文件
***这是自动对当前工作区中打开的表转换为EXCEL的程序
IF USED()
    NEWEXCEL=CREATEOBJECT("EXCEL.APPLICATION")    &&建立EXCEL文件
    WITH NEWEXCEL
        .WORKBOOKS.ADD                            &&添加新EXCEL表
        nFd=AFIELDS(aTitl)                        &&取总字段数及各字段名、属性等
        FOR I = 1 TO nFd
            .CELLS(1,I)=ALLTRIM(aTitl(I,1))       &&将数组中的标题写入第一行
        ENDFOR
    ENDWITH
    GOTO TOP
    nHbh=2
    ON ERROR .CELLS(nHbh,I)="---"
    DO WHILE !EOF()                               &&开始对记录的循环
        FOR I = 1 TO nFd                          &&对记录中的每个字段进行处理
            cFild=ALLTRIM(aTitl(I,1))             &&组成“表名.字段名”
            cFild=&cFild
            IF VARTYPE(cFild)="N"
                IF cFild#0
                    NEWEXCEL.CELLS(nHbh,I)=cFild  &&数值不为零则写入,
                ENDIF
            ELSE
                IF VARTYPE(cFild)="C"
                    cFild=RTRIM(cFild)            &&字符字段则截去尾部空格
                    NEWEXCEL.CELLS(nHbh,I).NumberFormatLocal="@"&&设置单元格属性为文本
                ENDIF
                NEWEXCEL.CELLS(nHbh,I)=cFild
            ENDIF
        ENDFOR
        nHbh=nHbh+1
        SKIP
    ENDDO
    MESSAGEBOX("数据导出已经完成,请注意保存文件!",64,"操作提示")
    NEWEXCEL.ACTIVESHEET.PAGESETUP.ORIENTATION=1
    NEWEXCEL.VISIBLE=.T.                          &&显示excel表以便继续编辑和保存
    ON ERROR
ENDIF
RETURN
搜索更多相关主题的帖子: 工作区 EXCEL 
2012-04-27 08:34
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:396
帖 子:11713
专家分:43267
注 册:2006-5-13
得分:0 
以下是引用wengjl在2012-4-27 11:53:10的发言:

红色的那句,我理解不了,请求楼主注一下中文的说明。谢谢
如果在转换过程中出现转换不了的内容(如图片文件等)就用“--”代替。

活到老,学到老! http://www. E-mail:hu-jj@
2012-04-27 16:10
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:396
帖 子:11713
专家分:43267
注 册:2006-5-13
得分:0 
以下是引用lygcw9603在2012-4-27 09:34:13的发言:

请问版主:对不同类型数据的转换如何操作啊,如日期型。
日期型可以直接转换的。

活到老,学到老! http://www. E-mail:hu-jj@
2012-04-27 16:11
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:396
帖 子:11713
专家分:43267
注 册:2006-5-13
得分:0 
当然可以将这些代码放在按钮中,但建议还是保存为程序,在其他表单中都可以调用。如将这些代码存为dbftoexcel.prg,那末在需要使用的表单中添加一个按钮,代码只要写:
select 需要转换的表别名
do dbftoexcel

活到老,学到老! http://www. E-mail:hu-jj@
2012-04-28 17:26
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:396
帖 子:11713
专家分:43267
注 册:2006-5-13
得分:0 
让用户在EXCEL中录入数据然后再存入VFP表中,这个有必要吗?为什么不直接提供表单让用户直接录入呢?
直接录入可以对数据进行必要的检验,不合理的数据可以直接提示用户立即修改,否则不予保存,这在EXCEL中是比较难以实现的。再说EXCEL对单元格的数据类型没有控制,需要录入数值的列可以轻易地录入字符,也样的数据导入到VFP中有用吗?
从EXCEL将数据导入到VFP中,最有用的地方是将其他软件中的数据导入。现在很多软件都提供将数据转存为EXCEL文件的功能,这样我们就可能通过EXCEL文件导入其他软件的数据。我现在正在做从金蝶EAS中导出的数据,通过EXCEL文件导入到我自己的程序中,然后进行再加工,得到自己需要的数据信息。

活到老,学到老! http://www. E-mail:hu-jj@
2012-04-29 16:58
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:396
帖 子:11713
专家分:43267
注 册:2006-5-13
得分:0 
用循环找到EXCEL工作表的标题行,然后将标题读入到数组中,再显示到列表中让用户选择是否导入,最后将选中的数据列逐行读入并保存到DBF表中。

活到老,学到老! http://www. E-mail:hu-jj@
2012-04-29 21:00
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:396
帖 子:11713
专家分:43267
注 册:2006-5-13
得分:0 
如果要考虑通用性,可以用VFP系统的功能将整个工作表转换成DBF表,然后再处理。

活到老,学到老! http://www. E-mail:hu-jj@
2012-04-29 21:02
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:396
帖 子:11713
专家分:43267
注 册:2006-5-13
得分:0 
以下是引用ptyy803在2012-5-11 20:52:59的发言:

本人觉得后面的ALLTRIM(STR(RECNO()))中的Recno()不应该这样使用,这是整个数据表的记录号,包括已删除的记录在内,应该在 DO WHILE !EOF() 前加一个变量 cRecno=0
DO WHILE !EOF()                               &&开始对记录的循环
      cRecno=cRecno+1
   WAIT WINDOW '共有'+ALLTRIM(STR(nrecc))+'条记录,正在转换第'+ALLTRIM(STR(cRecno))+'条记录...' NOWAIT   
........

这样是否可以更准确点转换的记录数,供参考,还请大侠们指点
这是很好的建议!
这段程序我主要是用select筛选出的临时表中。程序中根据用户的需要筛选出临时表在表格中显示,如果需要的话就点击“导出”按钮将临时表的内容导出到EXCEL中。临时表通常不会有删除的记录,所以就没有考虑这个因素。

活到老,学到老! http://www. E-mail:hu-jj@
2012-05-12 07:11
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:396
帖 子:11713
专家分:43267
注 册:2006-5-13
得分:0 
这个问题可以加一句判断语句:
IF !ISNULL(cFild)
    NEWEXCEL.CELLS(nHbh,I)=cFild
ENDIF

活到老,学到老! http://www. E-mail:hu-jj@
2012-05-12 18:52
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:396
帖 子:11713
专家分:43267
注 册:2006-5-13
得分:0 
以下是引用smart921在2012-5-13 16:25:19的发言:
CREATEOBJECT()函数名中间不能有空格,从楼上的图片上看CREATE和OBJECT之间好象有个空格。

活到老,学到老! http://www. E-mail:hu-jj@
2012-05-13 19:43



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-366600-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.035472 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved