| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3824 人关注过本帖
标题:关于VFP中比较大的DBF文件导成EXCEL表的问题?????
取消只看楼主 加入收藏
lishuo9913
Rank: 1
等 级:新手上路
帖 子:15
专家分:8
注 册:2013-3-2
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:3 
关于VFP中比较大的DBF文件导成EXCEL表的问题?????
我手中有一个比较大的DBF文件,大概有10万条左右,想把它们导成EXCEL表,但是用copy to aaa.xls type xls
只能导出16000+,崩溃中。。。。。有谁帮帮我么
搜索更多相关主题的帖子: EXCEL 
2013-03-02 14:44
lishuo9913
Rank: 1
等 级:新手上路
帖 子:15
专家分:8
注 册:2013-3-2
收藏
得分:0 
用xls打开DBF的话,是乱码,不知道为么??
用导出为:111.xls 的话 还是只能导出16000+条啊。。
我是想把它全部导出来,10万条数据!其实这只是一部分,全部的话有100万数据,要是1万1万的导的话,我只能疯了
2013-03-02 15:03
lishuo9913
Rank: 1
等 级:新手上路
帖 子:15
专家分:8
注 册:2013-3-2
收藏
得分:0 
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版主写的一个程序,可以导出成功1次,后来再导其他的数据时,就报错了
图片附件: 游客没有浏览图片的权限,请 登录注册

各位神人,为啥子啊????
2013-03-02 15:48
lishuo9913
Rank: 1
等 级:新手上路
帖 子:15
专家分:8
注 册:2013-3-2
收藏
得分:0 
肯定没有打开,不知道怎么回事,执行第一个数据时候可以,是个7万多的,第二个3万多的就报错了!
另外,我这么转换肯定有我的用处,不是我想这么转着玩,而是有我自己的理由,现在是探讨为什么转不了的问题,其他的就不多说了
2013-03-03 18:20
快速回复:关于VFP中比较大的DBF文件导成EXCEL表的问题?????
数据加载中...
 
   



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

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