首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > VFP >

VFP7导入生成Excel时,怎么可以生成超过16550条的限制呢? 小弟我的vfp7只能生成1万6千多条记录啊

2012-02-24 
VFP7导入生成Excel时,如何可以生成超过16550条的限制呢? 我的vfp7只能生成1万6千多条记录啊!VFP7导入生成E

VFP7导入生成Excel时,如何可以生成超过16550条的限制呢? 我的vfp7只能生成1万6千多条记录啊!
VFP7导入生成Excel时,如何可以生成超过16550条的限制呢?   我的vfp7只能生成1万6千多条记录啊!
请高手帮忙,我的是用vfp7,   请考虑在vfp7下的帮忙,而不是说更换为vfp9,谢谢了

[解决办法]
导入:用EXCEL生成TXT文件,再导入
导出:生成TXT OR CSV文件,再用EXCEL打开
[解决办法]
方法一:用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超长的数据

热点排行