求助:如何将DBF文件数据导出到EXCEL的指定工作表中?

时间:2021-03-06 14:31:53
兄弟是新新手,工作需要,学习VFP。
VFP中已经建好四张DBF表,A01,A02,A03,A04。
需要将A01、A02、A03、A04四张表的数据,分别导出到EXCEL表格AA的工作表sheet1、sheet2、sheet3、sheet4中。

学了一天,看VFP控制EXCEL,还是没有解决。
请各位帮忙
万分感谢!

11 个解决方案

#1


打开dbf表 导出
求助:如何将DBF文件数据导出到EXCEL的指定工作表中?

#2


就是要选择工作簿和工作表嘛,没什么复杂的

可以参考这里的代码

http://www.mzvfp.com/read.php?tid=96149

2楼

#3


谢谢楼上!

不过,我是想用命令实现这个结果
第一个DBF导入,好说,用命令就行:
Use A01
Copy To d:\统计表\导出XLS\AA.Xls Type Xl5 
Use

之上的命令,就是新建一个名为AA的EXCEL工作簿,将A01表中的数据导出到第一个工作表中。
之后,如何用命令将A02、A03、A04依次导出到AA工作簿的sheet2、sheet3、sheet4工作表中呢?




#4


方法1:
依次 copy to excel名称.xls type xl5
然后于调用 Excel 分别打开4个导出的 Excel,然后分别复制其中3个 Sheet 到某1个里。

方法2
直接调用 Excel,依次把 DBF 中的记录分别写入不同的 Sheet 中。

#5


引用 4 楼 apple_8180 的回复:
方法1:
依次 copy to excel名称.xls type xl5
然后于调用 Excel 分别打开4个导出的 Excel,然后分别复制其中3个 Sheet 到某1个里。

方法2
直接调用 Excel,依次把 DBF 中的记录分别写入不同的 Sheet 中。


十豆老师啊
我确实是,呵呵,确实是刚刚开始学这东东哪,虽然给我了思路,但我真的还是搞不定
不过,在QQ群里,一个朋友帮了我,成功了
把代码抄过来,请老师评判一下:

eole=createobject("excel.application")  &&创建EXCEL对象
eole.sheets.add   &&创建XLS工作簿
eole.worksheets("sheet1").activate  &&当sheet1作为当前工作表
use a01   &&打开DBF表a01
scan
eole.cells[recno(),1].value=单位代码  &&逐字段写到XLS中,感觉用RECNO()实在是太好啦!
eole.cells[recno(),2].value=单位名称
eole.cells[recno(),3].value=单位类别
eole.cells[recno(),4].value=单位性质
eole.cells[recno(),5].value=备注
endscan
use
**********通过已上方法,逐字段将a01表的数据写到EXCEL簿的sheet1工作表中
**********利用上面的方法,分别处理其他表
......
eole.activeworkbook.saveas("aa.xls")  &&改名存盘
eole.workbooks.close   &&关闭工作簿

以上方法,确实实现了我的目的。这代码,我还能看懂。再复杂些,我就不行了。
作为新新手,如果只给我思路,我确实做不了。

另外,十豆老师,俺这几天正学习你博客里的《VFP全面控制EXCEL》,你写得太好啦!天天看天天练呢!谢谢你啊


#6


引用 4 楼 apple_8180 的回复:
方法1:
依次 copy to excel名称.xls type xl5
然后于调用 Excel 分别打开4个导出的 Excel,然后分别复制其中3个 Sheet 到某1个里。

方法2
直接调用 Excel,依次把 DBF 中的记录分别写入不同的 Sheet 中。


上面朋友帮我的那段代码,估计就是你说的第一种吧

那第一种,倒是很直观的,我试下。嘻嘻,得一边看你的博客抄代码一边试啦

#7


本帖最后由 dkfdtf 于 2013-12-04 08:42:17 编辑
如果不需要精确控制每个单元格格式的话,逐个填写单元格不是个好办法。当表字段和记录数很大时,这种方法需要消耗的时间是无法忍受的。
vfp 提供了 DataToClip 方法,可以快速将数据复制到系统剪贴板,下面是使用示例:
Set Talk Off
* -- 创建 4 个测试用临时表
Create Cursor A01 (f1 C(20))
Create Cursor A02 (f1 C(20))
Create Cursor A03 (f1 C(20))
Create Cursor A04 (f1 C(20))
For ii = 0 To 3
    cAlias = Textmerge('A0<<ii+1>>')
    For jj = 1 To 10000      && 每个测试表插入 1w 条测试用记录
        Insert Into (cAlias) (f1) Values (cAlias + Sys(2015))
    Endfor
    Goto Top In (cAlias)
Endfor
* -- End of 创建测试用表

* 开始将记录导入到 Excel 中
Local oo As Excel.Application

oo = Newobject('Excel.Application')
Do While oo.Workbooks.Count < 1     && 确保至少有 1 个工作簿
    oo.Workbooks.Add()
Enddo
Do While oo.Workbooks(1).Sheets.Count < 4        && 确保有 4 个工作表
    oo.Sheets.Add(Null, oo.Workbooks(1).Sheets(oo.Sheets.Count))
Enddo

_使用复制粘贴法 = .T.
s1 = Seconds()
For ii = 1 To 4     && 循环将 4 个表的数据复制,粘贴到 4 个工作表
    cAlias = 'A' + Padl(ii, 2, '0')
    s0 = Seconds()
    If _使用复制粘贴法
        _vfp.DataToClip(cAlias, 0xffff, 3)       && 将 A0? 表的记录复制到剪贴板
        oo.Workbooks(1).Sheets(ii).Paste         && 再从剪贴板粘贴到工作表
        _cliptext = ''
    Else
        oo.Workbooks(1).Sheets(ii).Select
        Select (cAlias)
        Scan
            oo.cells[recno(),1].value = f1
        EndScan
    EndIf
    ? '填充 Sheet' +Padl(ii,1) + ' 耗时:' + Ltrim(Str(Seconds()-s0,10,4))
Endfor
? '*** 填充 40000 行数据共耗时:' + Transform(Seconds()-s1)

oo.Visible = .T.    && 看看结果
* ...
* 保存并退出(参见你5楼后面的代码)


改变 _使用复制粘贴法 变量为 .F.,你可以看到速度上的差别

#8


猫老师这个方法实在是高,佩服!学习了,做为VFP表导入EXCEL的典型示例收藏。

#9


猫老师的方法,我看得晕乎乎的
但是感觉,十分高效啊
收藏了先,慢慢学习。。。

#10


不用晕,其实有用的就两句:
_vfp.DataToClip(cAlias, 0xffff, 3)
oo.Workbooks(1).Sheets(ii).Paste

#11


用ADO连接DBF,JETSQL来导出

#1


打开dbf表 导出
求助:如何将DBF文件数据导出到EXCEL的指定工作表中?

#2


就是要选择工作簿和工作表嘛,没什么复杂的

可以参考这里的代码

http://www.mzvfp.com/read.php?tid=96149

2楼

#3


谢谢楼上!

不过,我是想用命令实现这个结果
第一个DBF导入,好说,用命令就行:
Use A01
Copy To d:\统计表\导出XLS\AA.Xls Type Xl5 
Use

之上的命令,就是新建一个名为AA的EXCEL工作簿,将A01表中的数据导出到第一个工作表中。
之后,如何用命令将A02、A03、A04依次导出到AA工作簿的sheet2、sheet3、sheet4工作表中呢?




#4


方法1:
依次 copy to excel名称.xls type xl5
然后于调用 Excel 分别打开4个导出的 Excel,然后分别复制其中3个 Sheet 到某1个里。

方法2
直接调用 Excel,依次把 DBF 中的记录分别写入不同的 Sheet 中。

#5


引用 4 楼 apple_8180 的回复:
方法1:
依次 copy to excel名称.xls type xl5
然后于调用 Excel 分别打开4个导出的 Excel,然后分别复制其中3个 Sheet 到某1个里。

方法2
直接调用 Excel,依次把 DBF 中的记录分别写入不同的 Sheet 中。


十豆老师啊
我确实是,呵呵,确实是刚刚开始学这东东哪,虽然给我了思路,但我真的还是搞不定
不过,在QQ群里,一个朋友帮了我,成功了
把代码抄过来,请老师评判一下:

eole=createobject("excel.application")  &&创建EXCEL对象
eole.sheets.add   &&创建XLS工作簿
eole.worksheets("sheet1").activate  &&当sheet1作为当前工作表
use a01   &&打开DBF表a01
scan
eole.cells[recno(),1].value=单位代码  &&逐字段写到XLS中,感觉用RECNO()实在是太好啦!
eole.cells[recno(),2].value=单位名称
eole.cells[recno(),3].value=单位类别
eole.cells[recno(),4].value=单位性质
eole.cells[recno(),5].value=备注
endscan
use
**********通过已上方法,逐字段将a01表的数据写到EXCEL簿的sheet1工作表中
**********利用上面的方法,分别处理其他表
......
eole.activeworkbook.saveas("aa.xls")  &&改名存盘
eole.workbooks.close   &&关闭工作簿

以上方法,确实实现了我的目的。这代码,我还能看懂。再复杂些,我就不行了。
作为新新手,如果只给我思路,我确实做不了。

另外,十豆老师,俺这几天正学习你博客里的《VFP全面控制EXCEL》,你写得太好啦!天天看天天练呢!谢谢你啊


#6


引用 4 楼 apple_8180 的回复:
方法1:
依次 copy to excel名称.xls type xl5
然后于调用 Excel 分别打开4个导出的 Excel,然后分别复制其中3个 Sheet 到某1个里。

方法2
直接调用 Excel,依次把 DBF 中的记录分别写入不同的 Sheet 中。


上面朋友帮我的那段代码,估计就是你说的第一种吧

那第一种,倒是很直观的,我试下。嘻嘻,得一边看你的博客抄代码一边试啦

#7


本帖最后由 dkfdtf 于 2013-12-04 08:42:17 编辑
如果不需要精确控制每个单元格格式的话,逐个填写单元格不是个好办法。当表字段和记录数很大时,这种方法需要消耗的时间是无法忍受的。
vfp 提供了 DataToClip 方法,可以快速将数据复制到系统剪贴板,下面是使用示例:
Set Talk Off
* -- 创建 4 个测试用临时表
Create Cursor A01 (f1 C(20))
Create Cursor A02 (f1 C(20))
Create Cursor A03 (f1 C(20))
Create Cursor A04 (f1 C(20))
For ii = 0 To 3
    cAlias = Textmerge('A0<<ii+1>>')
    For jj = 1 To 10000      && 每个测试表插入 1w 条测试用记录
        Insert Into (cAlias) (f1) Values (cAlias + Sys(2015))
    Endfor
    Goto Top In (cAlias)
Endfor
* -- End of 创建测试用表

* 开始将记录导入到 Excel 中
Local oo As Excel.Application

oo = Newobject('Excel.Application')
Do While oo.Workbooks.Count < 1     && 确保至少有 1 个工作簿
    oo.Workbooks.Add()
Enddo
Do While oo.Workbooks(1).Sheets.Count < 4        && 确保有 4 个工作表
    oo.Sheets.Add(Null, oo.Workbooks(1).Sheets(oo.Sheets.Count))
Enddo

_使用复制粘贴法 = .T.
s1 = Seconds()
For ii = 1 To 4     && 循环将 4 个表的数据复制,粘贴到 4 个工作表
    cAlias = 'A' + Padl(ii, 2, '0')
    s0 = Seconds()
    If _使用复制粘贴法
        _vfp.DataToClip(cAlias, 0xffff, 3)       && 将 A0? 表的记录复制到剪贴板
        oo.Workbooks(1).Sheets(ii).Paste         && 再从剪贴板粘贴到工作表
        _cliptext = ''
    Else
        oo.Workbooks(1).Sheets(ii).Select
        Select (cAlias)
        Scan
            oo.cells[recno(),1].value = f1
        EndScan
    EndIf
    ? '填充 Sheet' +Padl(ii,1) + ' 耗时:' + Ltrim(Str(Seconds()-s0,10,4))
Endfor
? '*** 填充 40000 行数据共耗时:' + Transform(Seconds()-s1)

oo.Visible = .T.    && 看看结果
* ...
* 保存并退出(参见你5楼后面的代码)


改变 _使用复制粘贴法 变量为 .F.,你可以看到速度上的差别

#8


猫老师这个方法实在是高,佩服!学习了,做为VFP表导入EXCEL的典型示例收藏。

#9


猫老师的方法,我看得晕乎乎的
但是感觉,十分高效啊
收藏了先,慢慢学习。。。

#10


不用晕,其实有用的就两句:
_vfp.DataToClip(cAlias, 0xffff, 3)
oo.Workbooks(1).Sheets(ii).Paste

#11


用ADO连接DBF,JETSQL来导出