社区
VFP
帖子详情
把一个 dbf 表导出为 xls 有几种方式?
chinawcs
2009-10-22 02:33:22
为何 在 vfp6.0 里 导出 xls 只有16384行 应该是17510 行 丢了不少
在 vfp9.0 同样操作 结果正常 !!!
我用的 copy to xxx.xls type xls
...全文
460
21
打赏
收藏
把一个 dbf 表导出为 xls 有几种方式?
为何 在 vfp6.0 里 导出 xls 只有16384行 应该是17510 行 丢了不少 在 vfp9.0 同样操作 结果正常 !!! 我用的 copy to xxx.xls type xls
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
3. **创建Excel工作簿**:程序需要生成
一个
新的Excel文件,可以是.
xls
x或.
xls
格式,取决于目标兼容性。Excel文件由多个工作
表
组成,每个工作
表
可以看作是
一个
二维的数据
表
格。 4. **写入数据**:将解析后的
DBF
数据...
excel转成
dbf
2. **
DBF
文件结构**:
DBF
文件基于dBase III或更高版本,由
一个
数据库文件和
一个
对应的.CDX索引文件组成。它包含列名、数据类型、记录长度等元数据,以及实际的记录数据。每条记录由一系列字段组成,每个字段有固定...
excel转
DBF
Excel到
DBF
转换是数据处理领域的
一个
常见任务,特别是在需要与旧版数据库系统或特定软件兼容时。
DBF
,全称dBase File,是一种流行于20世纪80年代和90年代的数据库文件格式,被许多早期的数据库管理系统如dBase、...
数据
导出
控件,
导出
各种数据
在标签中提到了
几种
常见的数据
导出
格式:“可以
导出
任何格式的(
xls
,
dbf
, mdb, pdf)”。这四种格式分别代
表
: 1. **
XLS
**:这是Microsoft Excel的老版本文件格式,用于存储电子
表
格数据。使用
XLS
格式
导出
数据,用户...
Python
导出
DBF
文件到Excel的方法
在进行
DBF
文件到Excel文件的转换时,需要用到以下
几种
技术和工具: 1. **Python**:一种广泛使用的高级编程语言,以其简洁清晰的语法著称。 2. **
dbf
py**:
一个
用于处理
DBF
文件的Python库,提供了简单易用的API来...
VFP
2,749
社区成员
29,138
社区内容
发帖
与我相关
我的任务
VFP
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
复制链接
扫一扫
分享
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章