社区
VFP
帖子详情
把一个 dbf 表导出为 xls 有几种方式?
chinawcs
2009-10-22 02:33:22
为何 在 vfp6.0 里 导出 xls 只有16384行 应该是17510 行 丢了不少
在 vfp9.0 同样操作 结果正常 !!!
我用的 copy to xxx.xls type xls
...全文
429
21
打赏
收藏
把一个 dbf 表导出为 xls 有几种方式?
为何 在 vfp6.0 里 导出 xls 只有16384行 应该是17510 行 丢了不少 在 vfp9.0 同样操作 结果正常 !!! 我用的 copy to xxx.xls type xls
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
21 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Princefei
2009-11-09
打赏
举报
回复
同意5楼说法
chinawcs
2009-11-03
打赏
举报
回复
[Quote=引用 19 楼 lch3000 的回复:]
vfp6.0下用如下方法可以导出65536 行:
COPY TO test.xls TYPE FOXPLUS
[/Quote]
果然 好用.
lch3000
2009-10-30
打赏
举报
回复
vfp6.0下用如下方法可以导出65536 行:
COPY TO test.xls TYPE FOXPLUS
chinawcs
2009-10-23
打赏
举报
回复
[Quote=引用 16 楼 apple_8180 的回复:]
升级到VFP9.0后,需要将原人低版本的菜单重新生成(Generate)一下,相当于编译。
[/Quote]
用 vfp9.0打开后菜单 提示 升级到最新格式 点 “是” 生成菜单 编译
最后还是报错 看来 升级开发工具 不是这么简单 不知道哪里代码有问题
目前我采用的是 导出CSV格式
everyday1212
2009-10-23
打赏
举报
回复
高人多多啊 :)
学习
十豆三
2009-10-22
打赏
举报
回复
升级到VFP9.0后,需要将原人低版本的菜单重新生成(Generate)一下,相当于编译。
wwwwb
2009-10-22
打赏
举报
回复
提示转换菜单:在VFP9下运行一下,看看问题出在什么地方
chinawcs
2009-10-22
打赏
举报
回复
[Quote=引用 13 楼 wwwwa 的回复:]
直接的方法就是升级VFP->9
[/Quote]
大哥 我倒想升级到9 用vfp9 打开工程 编译 提示转换菜单 选了是 编译了exe 运行 报错。。
WWWWA
2009-10-22
打赏
举报
回复
直接的方法就是升级VFP->9
wwwwb
2009-10-22
打赏
举报
回复
升级VFP
OR
将表导出为有格式的TXT文件,用EXCEL打开
chinawcs
2009-10-22
打赏
举报
回复
[Quote=引用 10 楼 wwwwb 的回复:]
引用 6 楼 chinawcs 的回复:
引用 3 楼 wwwwa 的回复:
有多种方式:
1、直接COPY TO;
2、用EXCEL VBA的COPYFROMRECORDSET;
3、导出为TXT,再导入EXCEL中;
4、用_vfpclip、_CLIPTEXT导入。
如何在vfp6.0 下 导出 xls 支持65536 行
直接COPY TO 怎么用 ? 望明示
需要VFP、EXCEL版本配合
[/Quote]
目前我只有在 vfp6.0下编译 excel 版本倒是高xl8 如何配合
wwwwb
2009-10-22
打赏
举报
回复
[Quote=引用 6 楼 chinawcs 的回复:]
引用 3 楼 wwwwa 的回复:
有多种方式:
1、直接COPY TO;
2、用EXCEL VBA的COPYFROMRECORDSET;
3、导出为TXT,再导入EXCEL中;
4、用_vfpclip、_CLIPTEXT导入。
如何在vfp6.0 下 导出 xls 支持65536 行
直接COPY TO 怎么用 ? 望明示
[/Quote]
需要VFP、EXCEL版本配合
chinawcs
2009-10-22
打赏
举报
回复
十三豆 真乃神人也!!
cyxin2121921
2009-10-22
打赏
举报
回复
5楼已经说明的很详尽了
cyxin2121921
2009-10-22
打赏
举报
回复
mark
chinawcs
2009-10-22
打赏
举报
回复
[Quote=引用 3 楼 wwwwa 的回复:]
有多种方式:
1、直接COPY TO;
2、用EXCEL VBA的COPYFROMRECORDSET;
3、导出为TXT,再导入EXCEL中;
4、用_vfpclip、_CLIPTEXT导入。
[/Quote]
如何在vfp6.0 下 导出 xls 支持65536 行
直接COPY TO 怎么用 ? 望明示
十豆三
2009-10-22
打赏
举报
回复
为什么用VFP导成EXCEL每次只能导16384行?
*-----------------------------------------
Excel 2003 最大行列
256 列 65536 行
Excel 2007 最大行列
16384 列 1048576 行
------------------------------------------
VFP的数据库,记录数为4万多,用文件-导出-选择文件类型为EXCEL,为什么导出的只有16384行;
用换一个数据库,记录数为2万多,用文件-导出-选择文件类型为EXCEL,导出的还是只有16384行
(第一行保留给字段标题,实际导出记录为16383)
---------------------------------------------------------------
方法一:用VFP9.0执行如下语句:
Copy To TEST.Xls Type Xl5
注:可以输出最多 65,536 行(但其中有一行保留给字段标题),因为目前EXCEL最多支持 65,536 行
Excel 8.0 (Excel 97)之前的版本只能显示前 16,384 行,并且不能导入超过 32,767 行的文件。
---------------------------------------------------------------
方法二:
导成 Csv 文件,记录没有限制,用EXCEL一样打开,但EXCEL2003最多能查看65,536行,因为目前EXCEL2003最多支持 65,536行(Excel 2007 最大行列:16384 列 1048576 行)
Copy To test.Csv Type Csv
但导成CSV有如下限制:
- 逻辑字段转换为 F/T 而不是 FALSE/TRUE.
- 如果一个字符字段只包括数值且值中包括前导的零, Excel 转换它为数值型的值 (如 "00000100" => 100).
- 日期型字段导出时要将设为 mm/dd/yy 格式或 mm/dd/yyyy 格式,否则导回时将丢失日期字段内容.
特别是字段是一个专用关键字且你又要在稍后从Excel 文件转换回 VFP 时,这样会有问题。
---------------------------------------------------------------
方法三:
如果你的数据中都是普通的数值和字符串类型,直接用Excel打开表,然后“另存为”一个Excel就可以了。
这样最多可以保存65,536 行(但其中有一行保留给字段标题),因为目前EXCEL最多支持 65,536 行
---------------------------------------------------------------
方法四:用代码导
* Excel 5 和 Excel 95 有一个限制就是一张工作表只能有 16,383 行.
* 该限制在 Excel 97 和 Excel 2000 是 65,536 行.
* 由于没有 TYPE XL8 命令, VFP 只能复制最初的 16,383 条记录.
* 该程序处理该限制并允许复制用户机器上的 Excel 版本所支持的记录数.
&& DbfToExcel.PRG
&& 记得要安装Excel啊,否则不好用
&& BY Foxer(狐狸)
Close Databases All
Set Date YMD
Set Century On
cDbfFile = Getfile("dbf")
If Empty(cDbfFile)
Return
Endif
Use (cDbfFile) Alias FoxTable In 0
If Not Used("FoxTable")
=Messagebox("打开表失败,程序将中止!", 16, "Error")
Return
Endif
cExcelFile = Putfile("保存为(&N):",Juststem(cDbfFile)+".xls","xls")
If Empty(cExcelFile)
Close Databases All
Return
Endif
Select FoxTable
oExcelSheet = Getobject("","Excel.Sheet") && 产生Excel对象
If Not Type("oExcelSheet") = "O"
=Messagebox("Excel对象创建失败,程序将中止!", 16, "Error")
Return
Endif
oExcelApp = oExcelSheet.Application
oExcelApp.Workbooks.Add()
oExcelApp.ActiveWindow.WindowState=2
oSheet = oExcelApp.ActiveSheet
nFldCount = Afields(aFldList, "FoxTable")
For i = 1 To nFldCount
oSheet.Cells(1,i).Value = aFldList[i, 1]
Endfor
cRecc = Str(Reccount("FoxTable"))
Scan
Wait Window Alltrim(Str(Recno())) + "/" + cRecc Nowait
For i = 1 To nFldCount
vValue = .Null.
If At(aFldList[i, 2], "CDLMNFIBYT") = 0
Loop
Endif
cFldName = aFldList[i, 1]
vValue = Evaluate(cFldName)
Do Case
Case aFldList[i, 2] = "C" && 字符/字符串
vValue = Trim(vValue)
Case aFldList[i, 2] = "D" && 日期
vValue = Dtoc(vValue)
Case aFldList[i, 2] = "T" && 日期时间
vValue = Ttoc(vValue)
Case Inlist(aFldList[i, 2], "N", "F", "I", "B", "Y") && 数值
Case aFldList[i, 2] = "L" && 逻辑
Case aFldList[i, 2] = "M" && 备注型
Otherwise
vValue = .Null.
Endcase
If Vartype(vValue) = "C" And Empty(vValue)
Loop
Endif
If Not Isnull(vValue)
oSheet.Cells(Recno("FoxTable")+1, i).Value = vValue
Endif
Endfor
Endscan
cChrStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
For i = 1 To nFldCount
cColumn = Substr(cChrStr, Int((i-1)/26), 1) + Substr(cChrStr, Iif(Mod(i, 26)= 0, 26, Mod(i, 26)) , 1)
oSheet.Columns(cColumn + ":" + cColumn).ColumnWidth = 12
If aFldList[i, 2] = "M"
oSheet.Columns(cColumn + ":" + cColumn).WrapText = .F.
Endif
Endfor
oExcelApp.ActiveWorkbook.SaveAs(cExcelFile)
oExcelApp.ActiveWorkbook.Close(.F.)
oExcelApp.ActiveWorkbook.Close(.F.)
oExcelApp.Quit
oExcelSheet = .Null.
oExcelApp = .Null.
Wait Clear
=Messagebox("转换完毕!", 64, "OK")
Close Databases All
程序是用VFP8写的,在VFP6中也可以,没有问题。只要能够执行完成,就会是正确的,行数只受你安装的Excel最大行数限制,至少65,536行
这个程序支持所有字段类型(通用型除外),包括MEMO类型字段。
--------------------------------------------------------------
方法五:
xlQuery=exlapp.ActiveSheet.QueryTables.Add("OLEDB;Provider=VFPOLEDB;Data Source="+ipath+";Mode=Share Deny None;Password='';Collating Sequence=MACHINE", exlapp.Range("A2"), "select * from table")
此种方法不支持包含MEMO超长的数据
---------------------------------------------------------------
方法六:
如何复制多于 16,383 条记录到 Excel 中
qxf 于提供, CY 和 rmh 翻译
VFP 的 Copy To Type Xl5 命令只能复制 16,383 条记录. 该限制是由于 Xl5 格式的一张工作表只能有 16,383 行的限制造成的 (参见 MSKB Q103355). 在 Excel 97 和 Excel 2000 中的最大行数是 65,536. 不幸的中在 VFP 中没有 Type Xl8 关键字. 下面的代码提供一种简单的处理办法. 程序 Copy2Xls 可用于替代 VFP 自己的 Copy To Type Xl5 命令. 程序使用了 VFP 6 新增的 Type Csv 关键字. 如果你使用早期版本的 VFP, 用 Fox2x 替换 Csv 关键字. 关于 Csv 与 Fox2x 的区别及一些限制参见程序头中的注释. (以下程序用 UT 上的 Mike Hellands great utility mhHtmlCode 程序格式)
* 程序...........: Copy2xls.prg
* 作者............: Daniel Gramunt
* 项目...........: common
* 创建...........: 11.10.2000 17:25:06
*) 说明.......: 替换 VFP 自己的 COPY TO TYPE XL5 命令.
*) : Excel 5 和 Excel 95 有一个限制就是一张工作表只能有 16,383 行.
*) : 该限制在 Excel 97 和 Excel 2000 是 65,536 行.
*) : 由于没有 TYPE XL8 命令, VFP 只能复制最初的 16,383 条记录.
*) :
*) : 该程序处理该限制并允许复制用户机器上的 Excel 版本所支持的记录数.
*) :
*) : 该方案是非常简单的:
*) : 1. COPY TO TYPE CSV
*) : 2. 打开 CSV 文件并用 Automation 来 SaveAs(tcExcelFile)
*) :
*) : 假定 MS Excel (Excel 97 或以上) 安装在用户的机器上
*) : (好, 它将也可处理 Excel 5.0 和 95, 但将使用 16,383 的限制).
*) :
*) : 返回成功导出的记录数, 否则:
*) : -1 = 缺少参数或参数类型错误
*) : -2 = 当前工作区中未打开表
*) : -3 = 记录数超过最大 Excel 行数
*) : -4 = 用户不想复盖已存在的 Excel 文件 (SET SAFETY = ON)
*) :
*) : 性能注意: 在 VFP 中的 COPY TO 命令比起任何 automation 都要快得多.
*) : 但是, 由于我们只用来打开导出的文件并保存为不同格式, 几乎没有
*) : 性能损失.
*) :
*) :
* 调用示例....: Copy2Xls("c:\temp\bidon.xls")
* 参数列表....: tcExcelFile - 要创建的 Excel 文件的路径\文件名.
* 主要修改....: 26.10.2000: COPY TO FOX2X 和 SaveAs() 代替
* : "组合" 个别的 Excel 文件.
* : 谢谢 UT 的 莈tin Bas鰖 的意见
* : 12.04.2000: COPY TO CSV 代替 FOX2X.
* : FOX2X 有以下限制:
* : - 代码页 850 的问题 (如字符 "?)
* : - 不支持长文件名 (虽然很容易处理)
* : - 不支持 datetime
* : CSV 没有上述问题, 但有其它限制:
* : - 逻辑字段转换为 F/T 而不是 FALSE/TRUE.
* : 这不是一个问题, 但为了保持一致性, 我们
* : 对于记录数没有超过限制的表,
* : 不再使用 VFP 自己的 COPY TO TYPE XL5.
* : - 如果一个字符字段只包括数值且值中包括前导的零,
* : Excel 转换它为数值型的值 (如 "00000100" => 100).
* : 这是一个问题, 特别是字段是一个专用关键字且你又要在稍后从
* : Excel 文件转换回 VFP 时.
*--------------------------------------------------------------------------------------------------
Lparameter tcExcelFile
#INCLUDE FoxPro.h
#Define xlWorkbookNormal -4143 && 被 SaveAs() 用来保存于当前 Excel 版本
#Define ccErrorNoParameter "Parameter : 参数丢失失或类型错误 (非 'C')"
#Define ccErrorNoTableOpen "当前工作区中没有打开表"
#Define ccErrorToManyRows "记录数" + ;
ALLTRIM(Transform(lnRecords, "999,999,999")) +;
") 超过 Excel 最大行数 (" -;
ALLTRIM(Transform(lnXlsMaxNumberOfRows, "999,999,999"))+;
")"
*-- 检查参数
If Vartype(tcExcelFile) <> "C" Or Empty(tcExcelFile)
??Chr(7)
Wait Window Nowait ccErrorNoParameter
Return -1
Else
tcExcelFile = Forceext(tcExcelFile, "XLS")
Endif
*-- 确信在选定的工作区中打开了表或游标
If Empty(Alias())
??Chr(7)
Wait Window Nowait ccErrorNoTableOpen
Return -2
Endif
Local loXls, lnXlsMaxNumberOfRows, lnRecords, lnRetVal, lcTempDbfFile
loXls = Createobject("excel.application")
*-- 抑制 Excel 的警告和信息 (类似于 SET SAFETY OFF)
loXls.DisplayAlerts = .F.
*-- 从 Excel 获取最大行数. 在我们计算工作表中的行数前, 需要添加一个工作簿.
loXls.workbooks.Add()
lnXlsMaxNumberOfRows = loXls.ActiveWorkBook.ActiveSheet.Rows.Count - 1 && 1 头行
lnRecords = Reccount()
*-- 检查记录数是否超过了 Excel 的限制
If lnRecords > lnXlsMaxNumberOfRows
??Chr(7)
Wait Window Nowait ccErrorToManyRows
*-- 关闭 Excel
loXls.Application.Quit()
Return -3
Endif
*-- 维持 SET SAFETY
If Set("SAFETY") = "ON" And File(tcExcelFile)
If Messagebox(tcExcelFile + " 已经存在, 复盖它?",;
MB_YESNO + MB_ICONQUESTION + MB_DEFBUTTON2) = IDNO
*-- 用户选择了 因此退出
*-- 关闭 Excel
loXls.Application.Quit()
Return -4
Endif
Endif
lcTempDbfFile = Addbs(Sys(2023)) + Sys(3) + ".CSV"
Copy To (lcTempDbfFile) Type Csv
lnRetVal = _Tally
*-- 打开导出的 CSV 文件
loXls.Application.Workbooks.Open(lcTempDbfFile)
*-- 保存为 Excel 文件
loXls.ActiveSheet.SaveAs(tcExcelFile, xlWorkbookNormal)
*-- 删除 CSV 文件
If File(lcTempDbfFile)
Delete File (lcTempDbfFile)
Endif
*-- 关闭 Excel
loXls.Application.Quit()
Return lnRetVal
booksoon
2009-10-22
打赏
举报
回复
按行读取,写入excel
WWWWA
2009-10-22
打赏
举报
回复
有多种方式:
1、直接COPY TO;
2、用EXCEL VBA的COPYFROMRECORDSET;
3、导出为TXT,再导入EXCEL中;
4、用_vfp.DataToClip、_CLIPTEXT导入。
chinawcs
2009-10-22
打赏
举报
回复
那我现在 用的 vfp6.0 开发的 vfp9.0编译会报错
如何在vfp6.0 下 导出 xls 支持65536 行
加载更多回复(1)
dbf
文件转excel
不能设置为0分,最低2不知道为啥。自己写的,感觉还能用。没怎么调试。win7 office2013 下测试。
excel转成
dbf
把excel文件转成
dbf
格式 , 很多工具都要输出到excel的功能 但是没有输出成
dbf
格式,使用这个工具就可以转换了
excel转
DBF
excel转
DBF
,可以将excel数据转换成
DBF
格式,使用界面简介。
数据
导出
控件,
导出
各种数据
我们经常要
导出
数据就非常快了,不用我们写很多代码!
Python
导出
DBF
文件到Excel的方法
主要介绍了Python
导出
DBF
文件到Excel的方法,实例分析了Python基于win32com模块实现文件
导出
与转换的相关技巧,需要的朋友可以参考下
VFP
2,748
社区成员
29,138
社区内容
发帖
与我相关
我的任务
VFP
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
复制链接
扫一扫
分享
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章