VFP中已经建好四张DBF表,A01,A02,A03,A04。
需要将A01、A02、A03、A04四张表的数据,分别导出到EXCEL表格AA的工作表sheet1、sheet2、sheet3、sheet4中。
学了一天,看VFP控制EXCEL,还是没有解决。
请各位帮忙
万分感谢!
11 个解决方案
#1
打开dbf表 导出
#2
就是要选择工作簿和工作表嘛,没什么复杂的
可以参考这里的代码
http://www.mzvfp.com/read.php?tid=96149
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工作表中呢?
不过,我是想用命令实现这个结果
第一个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 中。
依次 copy to excel名称.xls type xl5
然后于调用 Excel 分别打开4个导出的 Excel,然后分别复制其中3个 Sheet 到某1个里。
方法2
直接调用 Excel,依次把 DBF 中的记录分别写入不同的 Sheet 中。
#5
十豆老师啊
我确实是,呵呵,确实是刚刚开始学这东东哪,虽然给我了思路,但我真的还是搞不定
不过,在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
上面朋友帮我的那段代码,估计就是你说的第一种吧
那第一种,倒是很直观的,我试下。嘻嘻,得一边看你的博客抄代码一边试啦
#7
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
_vfp.DataToClip(cAlias, 0xffff, 3)
oo.Workbooks(1).Sheets(ii).Paste
#11
用ADO连接DBF,JETSQL来导出
#1
打开dbf表 导出
#2
就是要选择工作簿和工作表嘛,没什么复杂的
可以参考这里的代码
http://www.mzvfp.com/read.php?tid=96149
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工作表中呢?
不过,我是想用命令实现这个结果
第一个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 中。
依次 copy to excel名称.xls type xl5
然后于调用 Excel 分别打开4个导出的 Excel,然后分别复制其中3个 Sheet 到某1个里。
方法2
直接调用 Excel,依次把 DBF 中的记录分别写入不同的 Sheet 中。
#5
十豆老师啊
我确实是,呵呵,确实是刚刚开始学这东东哪,虽然给我了思路,但我真的还是搞不定
不过,在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
上面朋友帮我的那段代码,估计就是你说的第一种吧
那第一种,倒是很直观的,我试下。嘻嘻,得一边看你的博客抄代码一边试啦
#7
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
_vfp.DataToClip(cAlias, 0xffff, 3)
oo.Workbooks(1).Sheets(ii).Paste
#11
用ADO连接DBF,JETSQL来导出