| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4530 人关注过本帖, 3 人收藏
标题:VFP导入EXCEL探讨
只看楼主 加入收藏
取消关键字高亮
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
结帖率:88.24%
收藏(3)
 问题点数:0 回复次数:28 
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
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11857
专家分:43421
注 册:2006-5-13
收藏
得分:0 
楼主觉得哪些地方需要进一步完善呢?

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2012-05-19 13: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
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
呵呵,抄人代码免不了就是这种结果。你吃透了处理的逻辑自然知道怎么解决问题,关键是知道正在输出的那一行是页中的哪一行。这难不倒你的,只是看来你没看懂抄来的代码到底是怎么干的而已。

授人以渔,不授人以鱼。
2012-05-19 21:27
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
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
Excel的参数在Excel宏编程环境中用VBA代码看,顺便看里面的帮助即可。想知道什么功能的代码参数怎么写,就宏记录那个操作,然后看它的VBA代码,搬到VFP中。

[ 本帖最后由 TonyDeng 于 2012-5-19 22:33 编辑 ]

授人以渔,不授人以鱼。
2012-05-19 22:32
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
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
这个是可以做到的。用Excel排版,比用VFP的报表做得更好,我就不用那东东,都是用Excel做报表的。你要的这个,其实只要把一个单元格方框的border属性值都找出来,就可以随意设置,须知Excel的单元格四个边是可以独立设置线型、颜色等等的,与网页的border属性一样。我有时间查一下完整的属性值给你吧,其实office的vba帮助也是中文的,你不妨看看。

授人以渔,不授人以鱼。
2012-05-20 04:03
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
回复 8楼 TonyDeng
再次谢谢TONG版主

坚守VFP最后的阵地
2012-05-20 06:49
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
因最近比较忙,非常详细的测试我就不做了,参考一下如下我曾经用过的代码,应该知道大概了:

程序代码:
*----------------------
* Excel 常量
*----------------------
#DEFINE xlCenter            3
#DEFINE xlRight                2
#DEFINE xlLeft                1
#DEFINE xlDiagonalDown        5
#DEFINE xlDiagonalUp        6
#DEFINE xlEdgeLeft            7
#DEFINE xlEdgeTop            8
#DEFINE xlEdgeBottom        9
#DEFINE xlEdgeRight            10
#DEFINE xlInsideVertical    11
#DEFINE xlInsideHorizontal    12
#DEFINE xlContinuous        1
#DEFINE xlThin                2
#DEFINE xlAutomatic            -4105
#DEFINE xlMedium            -4138
#DEFINE xlNone                -4142
#DEFINE xlSolid                1
#DEFINE xlPaperLetter        1
#DEFINE xlPaperA4            9
#DEFINE xlPortrait            1
#DEFINE xlLandscape            2
#DEFINE xlMaximized            -4137
#DEFINE xlNormal            -4143
#DEFINE xlMinimized            -4140
#DEFINE xlExcel8            56

*---------------------
* 画 Excel 表的框格
* 参数:
*   o_Excel       -- Excel 表对象
*   c_LeftTop     -- 左上角单元
*   c_RightBottom -- 右下角单元
*---------------------
PROCEDURE DrawTableBorder(oExcel AS Object, cLeftTop AS Character, cRightBottom AS Character)

    WITH oExcel.ActiveSheet.Range(cLeftTop + ":" + cRightBottom)
        .BorderS(xlDiagonalDown).LineStyle = xlNone
        .BorderS(xlDiagonalUp).LineStyle = xlNone
        WITH .BorderS(xlEdgeLeft)
            .LineStyle = xlContinuous
            .Weight = xlThin
            .ColorIndex = xlAutomatic
        ENDWITH
        WITH .BorderS(xlEdgeTop)
            .LineStyle = xlContinuous
            .Weight = xlThin
            .ColorIndex = xlAutomatic
        ENDWITH
        WITH .BorderS(xlEdgeBottom)
            .LineStyle = xlContinuous
            .Weight = xlThin
            .ColorIndex = xlAutomatic
        ENDWITH
        WITH .BorderS(xlEdgeRight)
            .LineStyle = xlContinuous
            .Weight = xlThin
            .ColorIndex = xlAutomatic
        ENDWITH
        WITH .BorderS(xlInsideVertical)
            .LineStyle = xlContinuous
            .Weight = xlThin
            .ColorIndex = xlAutomatic
        ENDWITH
        WITH .BorderS(xlInsideHorizontal)
            .LineStyle = xlContinuous
            .Weight = xlThin
            .ColorIndex = xlAutomatic
        ENDWITH
        .BorderS(xlDiagonalDown).LineStyle = xlNone
        .BorderS(xlDiagonalUp).LineStyle = xlNone
        WITH .BorderS(xlEdgeLeft)
            .LineStyle = xlContinuous
            .Weight = xlMedium
            .ColorIndex = xlAutomatic
        ENDWITH
        WITH .BorderS(xlEdgeTop)
            .LineStyle = xlContinuous
            .Weight = xlMedium
            .ColorIndex = xlAutomatic
        ENDWITH
        WITH .BorderS(xlEdgeBottom)
            .LineStyle = xlContinuous
            .Weight = xlMedium
            .ColorIndex = xlAutomatic
        ENDWITH
        WITH .BorderS(xlEdgeRight)
            .LineStyle = xlContinuous
            .Weight = xlMedium
            .ColorIndex = xlAutomatic
        ENDWITH
        WITH .BorderS(xlInsideVertical)
            .LineStyle = xlContinuous
            .Weight = xlThin
            .ColorIndex = xlAutomatic
        ENDWITH
        WITH .BorderS(xlInsideHorizontal)
            .LineStyle = xlContinuous
            .Weight = xlThin
            .ColorIndex = xlAutomatic
        ENDWITH
    ENDWITH 

ENDPROC

授人以渔,不授人以鱼。
2012-05-20 08:09
快速回复:VFP导入EXCEL探讨
数据加载中...
 
   



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

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