| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2500 人关注过本帖, 3 人收藏
标题:将当前工作区中打开的表自动转换为EXCEL文件
只看楼主 加入收藏
smart921
Rank: 1
等 级:新手上路
帖 子:107
专家分:9
注 册:2010-8-8
收藏
得分:0 
回复 30楼 hu9jj
VFP6.0
2012-05-15 21:40
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11857
专家分:43421
注 册:2006-5-13
收藏
得分:0 
请直接将一楼的代码复制过去再试试看,VFP6.0应该可以运行的。如果是9.0可以直接从代码上看的出命令和函数名是否正确,因为这些关键字都是用蓝色显示的。

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2012-05-16 07:40
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9848
专家分:27241
注 册:2012-2-5
收藏
得分:0 
程序代码:
oExcel = CreateObject("excel.application") &&创建 EXCEL 实例对象
With oExcel
    .Workbooks.Add                           && 增加一个工作薄
    .Sheets("Sheet1").Select
    .Sheets("Sheet1").Name = "sample"       && 改变SHEET名称
    .Cells.Select                           && 全选工作簿
    With .Selection.Font
         .Name = "宋体"
         .Size = 10
    EndWith
ENDWITH
SELECT * FROM GZ INTO CURSOR TMP
JLS=TRANSFORM(RECCOUNT()+1)
oExcel.ActiveSheet.Rows(1).RowHeight=24   &&设置第1行至最后一行的高度
oExcel.ActiveSheet.Rows('2:&JLS').RowHeight=20
FOR I=1 TO FCOUNT()
    MFIELD=FIELD(I)
    OEXCEL.ActiveSheet.Columns(I).ColumnWidth=FSIZE(FIELD(I))  && 列的宽度(单位:字符个数)
    OEXCEL.Cells(1,I).Value=FIELD(I) && 设置单元格的值(可以是字符串变量,表字段名)
    OEXCEL.selection.HorizontalAlignment=3
    FOR J=1 TO RECCOUNT()
        GO J
        OEXCEL.Cells(J+1,I).Value=&MFIELD
    ENDFOR
ENDFOR
OEXCEL.visible = .T. && 可见
VFP导入EXCEL:这段代码虽然不怎么精练,也有一定的缺限,但不受打开的EXCEL影响,运行正常。

[ 本帖最后由 sdta 于 2012-5-17 21:38 编辑 ]

坚守VFP最后的阵地
2012-05-17 21:30
小主板
Rank: 2
等 级:论坛游民
帖 子:187
专家分:21
注 册:2009-6-28
收藏
得分:0 
谢谢
2012-05-23 09:03
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11857
专家分:43421
注 册:2006-5-13
收藏
得分:0 
回复 33楼 sdta
这段代码并无特别之处,同样也会受到打开EXCEL操作的影响。只不过通常读写操作仅在短时间就完成了,用户还来不及去打开其他的EXCEL文件,所以也就没有出现受影响的问题。

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2012-05-24 07:44
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11857
专家分:43421
注 册:2006-5-13
收藏
得分:0 
小结:
1、在VFP对EXCEL文件操作的时候,用户打开或关闭EXCEL文件,都有可能会对VFP的操作出现影响。
2、之所以说是可能,而不是说肯定,这与打开EXCEL使用的进程相关。比如说在VFP操作EXCEK之前,如果用户已经打开了EXCEL文件,然后在这个进程(窗口)中用打开菜单来打开其他的EXCEL文件,就不会对VFP的操作发生影响。此时如果再用点击EXCEL文件方式打开,有时也不会对VFP的操作产生影响。
3、在VFP对EXCEL操作时,如果用户关闭了所有已经打开的EXCEL进程时,也可能会对VFP的操作产生影响,导致出错中断。
4、打开EXCEL文件对VFP操作的影响不仅仅是读操作,也会影响到写操作。我有次在VFP对EXCEL文件添加一个表,然后向新增的表写入内容时,正好打开另一个EXCEL文件,新增的表竟然被添加到新打开的EXCEL文件中。
5、总之,这个影响可能与进程有关,如果当前活动的进程不是VFP操作时申请的进程,则不会受影响;反之则必定会受影响。

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2012-05-24 08:00
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11857
专家分:43421
注 册:2006-5-13
收藏
得分:0 
欢迎各位对以上的小结拍砖!

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2012-05-24 08:02
tlliqi
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:204
帖 子:15453
专家分:65956
注 册:2006-4-27
收藏
得分:0 
表中记录少还免强
2012-05-24 08:26
chychychy
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:325
专家分:105
注 册:2015-4-18
收藏
得分:0 
回复 5楼 wengjl
学习了
程序代码:
IF USED()
    nrecc=RECCOUNT()
    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()                               &&开始对记录的循环
        WAIT WINDOW '共有'+ALLTRIM(STR(nrecc))+'条记录,正在转换第'+ALLTRIM(STR(RECNO()))+'条记录...' NOWAIT
        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
ELSE
    MESSAGEBOX('当前工作区没有打开的表!',64,'系统提示:')
ENDIF
RETURN
4 天前 14:25
快速回复:将当前工作区中打开的表自动转换为EXCEL文件
数据加载中...
 
   



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

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