| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4530 人关注过本帖, 3 人收藏
标题:VFP导入EXCEL探讨
取消只看楼主 加入收藏
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
结帖率:88.24%
收藏(3)
 问题点数:0 回复次数:10 
VFP导入EXCEL探讨
程序代码:
SET DATE YMD
SET CENTURY ON
CDBFFILE = GETFILE("dbf")
IF EMPTY(CDBFFILE)
   RETURN
ENDIF
SELECT * FROM JUSTSTEM(CDBFFILE) INTO CURSOR FOXTABLE
JLS=TRANSFORM(RECCOUNT()+1)
CEXCELFILE = PUTFILE("保存为(&N):",JUSTSTEM(CDBFFILE)+".xls","xls")
IF EMPTY(CEXCELFILE)
   RETURN
ENDIF
SELECT FOXTABLE
OEXCELSHEET = GETOBJECT("","Excel.Sheet")
IF NOT TYPE("oExcelSheet") = "O"
   =MESSAGEBOX("Excel对象创建失败,程序将中止!", 16, "Error")
   RETURN
ENDIF
OEXCEL = CREATEOBJECT("excel.application")
WITH OEXCEL
     .WORKBOOKS.ADD
     .SHEETS("Sheet1").SELECT
     .SHEETS("Sheet1").NAME = "sample"
     .VISIBLE=.F.
     .DISPLAYALERTS = .F.
     .CELLS.SELECT
     WITH .SELECTION.FONT
          .NAME = "宋体"
          .SIZE = 10
     ENDWITH
ENDWITH
OEXCEL.ACTIVESHEET.ROWS(1).ROWHEIGHT=24 && 设置第表头行行高
OEXCEL.ACTIVESHEET.ROWS('2:&JLS').ROWHEIGHT=20 && 设置第2行到最后高度行高
C_1="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
DLINE_S="A1:"+CHR(ASC("A")+FCOUNT())+"1"
OEXCEL.ActiveSheet.Range(DLINE_S).Borders(3).LineStyle=1 && 表格上边线
oexcel.ActiveSheet.Range(DLINE_S).Borders(3).Weight=3    && 指定边框线宽度
FOR I = 1 TO FCOUNT()
    OEXCEL.ACTIVESHEET.COLUMNS(I).COLUMNWIDTH=FSIZE(FIELD(I))
    OEXCEL.CELLS(1,I).VALUE = FIELD(I)
ENDFOR
OEXCEL.SELECTION.HORIZONTALALIGNMENT=2
SCAN
     IF MOD(RECNO(),32)=1
        DLINE_X="A"+TRANSFORM(RECNO())+":"+CHR(ASC("A")+FCOUNT())+TRANSFORM(RECNO())
        OEXCEL.RANGE(DLINE_X).SELECT
        OEXCEL.SELECTION.BORDERS(-4107).LINESTYLE = 1
     ENDIF
     FOR I=1 TO FCOUNT()
         MFIELD=FIELD(I)
         WAIT WINDOW TRANSFORM(RECNO()) + "/"+ TRANSFORM(RECCOUNT()) NOWAIT
         OEXCEL.CELLS(RECNO()+1,I).VALUE=&MFIELD
     ENDFOR

     IF MOD(RECNO(),32)=0
        DLINE_X="A"+TRANSFORM(RECNO()+1)+":"+CHR(ASC("A")+FCOUNT())+TRANSFORM(RECNO()+1)
        OEXCEL.ActiveSheet.Range(DLINE_X).Borders(4).LineStyle=1 && 表格下边线
        oexcel.ActiveSheet.Range(DLINE_X).Borders(4).Weight=3      && 指定边框线宽度
     ENDIF
     IF RECNO()=RECCOUNT()
        DLINE_X="A"+TRANSFORM(RECCOUNT()+1)+":"+CHR(ASC("A")+FCOUNT())+TRANSFORM(RECCOUNT()+1)
        OEXCEL.ActiveSheet.Range(DLINE_X).Borders(4).LineStyle=9 && 表格下边线
     ENDIF
ENDSCAN
OEXCEL.ActiveSheet.PageSetup.CenterHorizontally=.t.        && 设置页面水平居中
oEXCEL.ActiveSheet.PageSetup.PrintTitleRows = "$1:$1"      &&固定打印的顶端标题行(第1行)
OEXCEL.ActiveSheet.PageSetup.CenterFooter="第"+"&P"+"页共"+"&N"+"页"    &&页脚中间
OEXCEL.VISIBLE=.T.
OEXCEL.ACTIVESHEET.PRINTPREVIEW
OEXCEL.VISIBLE=.F.
OEXCEL.ACTIVEWORKBOOK.SAVEAS(CEXCELFILE)
OEXCEL.WORKBOOKS.CLOSE
OEXCEL.QUIT
RELEASE OEXCEL
WAIT CLEAR
=MESSAGEBOX("转换完毕!", 64, "OK")
这段代码正常运行没有问题。如何完善上述代码,请大家发表下自己的看法。
关于表头字段下边线的设置问题,不知那位有更完善方法。

[ 本帖最后由 sdta 于 2012-5-19 13:26 编辑 ]
搜索更多相关主题的帖子: EXCEL 
2012-05-19 12:52
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
表格上下表线设置问题,表头字段下边线设置问题。运行下这个代码就能看到结果了。谢谢了
表格每页设置32条记录,如果表格上下表线都设置为LINESTYLE=9,当设置了表头字段的下边线后,页底线(单粗线)与上表线(双线)就不一样了。如果不设置表头字段的下边线,页底线与上表线就一样了。
由于本人以前没接触过这方面的内容,上面的代码是参考别人的代码组装的。
图片附件: 游客没有浏览图片的权限,请 登录注册


图片附件: 游客没有浏览图片的权限,请 登录注册


[ 本帖最后由 sdta 于 2012-5-19 14:48 编辑 ]

坚守VFP最后的阵地
2012-05-19 14:02
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
TONGDENG,帮忙看看,下面的代码是改过后的代码,接触EXCEL时间不长,关键是对参数情况不太了解。上面图片的问题已解决。
程序代码:
SET DATE YMD
SET CENTURY ON
CDBFFILE = GETFILE("dbf")
IF EMPTY(CDBFFILE)
   RETURN
ENDIF
SELECT * FROM JUSTSTEM(CDBFFILE) INTO CURSOR FOXTABLE
JLS=TRANSFORM(RECCOUNT()+1)
CEXCELFILE = PUTFILE("保存为(&N):",JUSTSTEM(CDBFFILE)+".xls","xls")
IF EMPTY(CEXCELFILE)
   RETURN
ENDIF
SELECT FOXTABLE
OEXCELSHEET = GETOBJECT("","Excel.Sheet")
IF NOT TYPE("oExcelSheet") = "O"
   =MESSAGEBOX("Excel对象创建失败,程序将中止!", 16, "Error")
   RETURN
ENDIF
OEXCEL = CREATEOBJECT("excel.application")
WITH OEXCEL
     .WORKBOOKS.ADD
     .SHEETS("Sheet1").SELECT
     .SHEETS("Sheet1").NAME = "sample"
     .VISIBLE=.F.
     .DISPLAYALERTS = .F.
     .CELLS.SELECT
     WITH .SELECTION.FONT
          .NAME = "宋体"
          .SIZE = 10
     ENDWITH
ENDWITH
OEXCEL.ACTIVESHEET.ROWS(1).ROWHEIGHT=24 && 设置第表头行行高
OEXCEL.ACTIVESHEET.ROWS('2:&JLS').ROWHEIGHT=20 && 设置第2行到最后高度行高
DLINE_S="A1:"+CHR(ASC("A")+FCOUNT()-1)+"1"
OEXCEL.ActiveSheet.Range(DLINE_S).Borders(3).LineStyle=9 && 表格上边线
FOR I = 1 TO FCOUNT()
    OEXCEL.ActiveSheet.Columns(I).ColumnWidth=IIF(LEN(FIELD(I))>FSIZE(FIELD(I)),LEN(FIELD(I)),FSIZE(FIELD(I)))  && 设置指定列的宽度(单位:字符个数)
    OEXCEL.CELLS(1,I).VALUE = FIELD(I)
ENDFOR
OEXCEL.RANGE(DLINE_S).SELECT
OEXCEL.SELECTION.BORDERS(-4107).LINESTYLE = 1 &&表头字段下边线

OEXCEL.SELECTION.HORIZONTALALIGNMENT=2
SCAN
     IF MOD(RECNO(),32)=1
        DLINE_X="A"+TRANSFORM(RECNO())+":"+CHR(ASC("A")+FCOUNT()-1)+TRANSFORM(RECNO())
     ENDIF
     FOR I=1 TO FCOUNT()
         MFIELD=FIELD(I)
         WAIT WINDOW TRANSFORM(RECNO()) + "/"+ TRANSFORM(RECCOUNT()) NOWAIT
         OEXCEL.CELLS(RECNO()+1,I).VALUE=&MFIELD
     ENDFOR
     IF MOD(RECNO(),32)=0
        DLINE_X="A"+TRANSFORM(RECNO()+1)+":"+CHR(ASC("A")+FCOUNT()-1)+TRANSFORM(RECNO()+1)
        *OEXCEL.RANGE(DLINE_X).SELECT
        OEXCEL.ActiveSheet.Range(DLINE_X).Borders(4).LineStyle=9 && 表格下边线
     ENDIF
     IF RECNO()=RECCOUNT()
        DLINE_X="A"+TRANSFORM(RECCOUNT()+1)+":"+CHR(ASC("A")+FCOUNT()-1)+TRANSFORM(RECCOUNT()+1)
        OEXCEL.ActiveSheet.Range(DLINE_X).Borders(4).LineStyle=9 && 表格下边线
     ENDIF
ENDSCAN
OEXCEL.ActiveSheet.PageSetup.CenterHorizontally=.t.        && 设置页面水平居中
oEXCEL.ActiveSheet.PageSetup.PrintTitleRows = "$1:$1"      &&固定打印的顶端标题行(第1行)
OEXCEL.ActiveSheet.PageSetup.CenterFooter="第"+"&P"+"页共"+"&N"+"页"    &&页脚中间
OEXCEL.VISIBLE=.T.
OEXCEL.ACTIVESHEET.PRINTPREVIEW
OEXCEL.VISIBLE=.F.
OEXCEL.ACTIVEWORKBOOK.SAVEAS(CEXCELFILE)
OEXCEL.WORKBOOKS.CLOSE
OEXCEL.QUIT
RELEASE OEXCEL
WAIT CLEAR
=MESSAGEBOX("转换完毕!", 64, "OK")

 

[ 本帖最后由 sdta 于 2012-5-20 07:10 编辑 ]

坚守VFP最后的阵地
2012-05-19 22:29
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
多谢TONG版主。岁月不饶人,我也只是好奇,越好奇,越想把这个问题搞清楚。慢慢学吧,活到老学到老。上面的代码,还差标题、页脚部分代码。只是VFP与本人工作没有联系,也就没添加上去。主要问题还是英语基础太差,学习过程中有点力不从心。十几年前学的知识,也不想放下,说不定那天就能用上了。上面代码打出的表格形式如下:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 双线
出生年月  身份证号  .....................................
───────────────────────────── 单细线

中间无线,只有具体内容





━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 双线
每页第一行都有表头部分,我觉得这样比较简洁。这是一个月学习EXCEL的结晶。

[ 本帖最后由 sdta 于 2012-5-19 23:54 编辑 ]

坚守VFP最后的阵地
2012-05-19 23:49
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
回复 8楼 TonyDeng
再次谢谢TONG版主

坚守VFP最后的阵地
2012-05-20 06:49
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
回复 10楼 TonyDeng
再次表示十三亿分感谢

坚守VFP最后的阵地
2012-05-20 22:57
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
回复 10楼 TonyDeng
再次谢谢TONGDENG版主的无私奉献

坚守VFP最后的阵地
2012-05-24 21:46
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
回复 14楼 TonyDeng
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 双线
出生年月  身份证号  .....................................
───────────────────────────── 单细线
表头下面的这条“单细线”如何画,不是表中内容下的水平线

坚守VFP最后的阵地
2012-05-24 23:53
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
THANK YOU
xlEdgeBotton==xlEdgeBottom?
那个写法是正确的
xlEdgeBotton = 9
xlEdgeBottom = ?

[ 本帖最后由 sdta 于 2012-5-25 00:13 编辑 ]

坚守VFP最后的阵地
2012-05-25 00:03
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
xlEdgeBotton==xlEdgeBottom?
那个写法是正确的
xlEdgeBotton = 9
xlEdgeBottom = ?

坚守VFP最后的阵地
2012-05-25 01:29
快速回复:VFP导入EXCEL探讨
数据加载中...
 
   



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

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