以下是在网上找的一些内容,我是用的下面的

COPY TO TEST.CVS TYPE CVS方法解决的

为什么用VFP导成EXCEL每次只能导16384行?

*-----------------------------------------

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一样打开,但EXCEL最多能查看65,536行,因为目前EXCEL最多支持 65,536行

copy to test.csv type csv

但导成CSV有如下限制:
- 逻辑字段转换为 F/T 而不是 FALSE/TRUE.
- 如果一个字符字段只包括数值且值中包括前导的零, Excel 转换它为数值型的值 (如 \"00000100\" => 100).
特别是字段是一个专用关键字且你又要在稍后从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超长的数据
---------------------------------------------------------------

 
修改
删除
举报
引用
回复
发表于:2008-01-02 14:52:313楼 得分:45
方法六:

如何复制多于 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

VFP导成EXCEL每次只能导16384行的解决方法相关推荐

  1. Ubuntu 20.04下使用IDEA配置tomcat10,及servlet导包后javax.servelet一直报错的解决方法

    Ubuntu 20.04下使用IDEA配置tomcat10,servlet导包后javax.servelet一直报错的解决方法 ​ 前期有关tomcat的安装就不多详谈,网上教程一大把,就不多赘述了. ...

  2. excel php 数字科学计数_PHP导出excel时数字变为科学计数的解决方法

    在数据导出到excel时数字格式不对,一般分为以下两种情况. 1.excel单元格设置长度不够 解决方法: $objActSheet = $objPHPExcel->getActiveSheet ...

  3. xp系统打不开excel服务器,xp系统下excel表格链接无法点击的解决方法

    在使用excel表格过程中,发现表格中的很多网址链接都无法点击打开.那么,我们该如何将其改成可点击的网址链接,方便快捷的打开网址?接下来,小编就以windowsxp系统为例,给大家分享excel表格链 ...

  4. 2021年office2010每次打开都要配置进度解决方法

    2021年office2010每次打开都要配置进度解决方法 office2010每次打开都要配置进度是什么原因(如下图) 一.第一种原因 ,电脑上安装有金山WPS和office2010会有冲突. 解决 ...

  5. 计算机错误符号,解析Excel中常见的错误符号以及解决方法

    解析Excel中常见的错误符号以及解决方法分享给大家, Excel 电子表格是很多人都要使用的软件,也相信很多人都会用,但是用得好不好就差别很大了,用得好的话可以让工作效率大大提高,但关于Excel的 ...

  6. nfs只能挂载为nobody的解决方法

    nfs只能挂载为nobody的解决方法 参考文章: (1)nfs只能挂载为nobody的解决方法 (2)https://www.cnblogs.com/xingyunfashi/p/8059910.h ...

  7. PDF怎么转换成excel免费?快收藏这几个方法

    在我们日常处理的的工作文件中,PDF文件的数量是越来越高的,而且因为PDF文件比较方便观看,所以很多数据文件也都是PDF格式的,不过PDF文件是不可编辑的,所以在一定程度上还是有限制的,这样我们就不能 ...

  8. 星网宇达惯导插入Windows系统 无法识别usb串口的解决方法

    1.打开设备管理器,显示如下问题: 2.解决方法,参考:https://blog.csdn.net/u013767242/article/details/79571463/ 3.D2XX Direct ...

  9. Word怎么转换成Excel?教你个轻松转换的方法

    说到Word文档,小伙伴们在工作中应该有经常使用到这种文档吧,虽然Word是文档格式,但是在其中也是可以做个数据统计图片功能的,如果需要一些文字标注想必很多人仍会使用Word,但是有些文档里的表格内容 ...

最新文章

  1. 驰骋工作流引擎-嵌入式表单的介绍
  2. .net 常用的插件列表
  3. ContentPlaceHolder必须放在具有 runat=server 的窗体标记内
  4. 通过堡垒机rdp 黑屏_[调优]彻底解决RDP连接过程缓慢的问题
  5. linux 下orapwd 未找到命令,关于orapwd命令entries参数的探究
  6. 最小/大加代数(Min/max-Plus Algebra)
  7. java之struts2的action的创建方式
  8. oppo手机显示andrOid什么意思,OPPO R17 Pro手机状态栏图标分别代表什么意思?
  9. SQL AZURE数据库创建,云计算体验之一
  10. ASP.NET 验证控件总结
  11. 在linux中用高斯09优化分子结构,高斯09的优化 - 量子化学 - Gaussian - 小木虫论坛-学术科研互动平台...
  12. swfobject简单封装
  13. 利用模拟低通滤波器设计带通、带阻、高通模拟滤波器
  14. [书籍翻译]12周撰写期刊文章 学术出版成功指南——第 10 周:编辑你的句子
  15. UVALive - 5713
  16. GDT中的轮廓度标注
  17. 想转行程序员,参加java培训班真的有用吗?
  18. 【C++】Web服务器项目所用到的函数详解
  19. html 全屏撒花的效果,微信里怎么实现撒花效果?
  20. EEG-MI 基于EEG信号的运动想象分类实验

热门文章

  1. PC、手机平台主流字体兼容情况
  2. python输出回车_Python print 如何换行输出?
  3. NOIP 2021 游记--zhengjun
  4. 上天赐予的财富和才能要回馈社会
  5. TypeError: func() missing 1 required positional argument: 'XXXXX' 报错原因
  6. 第2.4章 使用与门、或门、非门来设计异或门
  7. iTunes恢复备份时“恢复备份”按钮为灰色
  8. 2021年制冷与空调设备运行操作最新解析及制冷与空调设备运行操作免费试题
  9. python录音文件降噪,python中多个wav文件的降噪
  10. 可持续能源技术带来的意义