- 1、本文档共3页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
VF中正确导入EXCEL表的几种方法
VF中正确导入EXCEL表的几种方法
一次在处理全县小学生毕业会考成绩时,由于各学校交的表格不一致,也不方便统计,为了统计方便、快速、准确无误,把EXCEL表格转换为VF的表,但在转换过程中,打开VFP,点击菜单的“文件”——“导入”,将excel表格导入成VF的表时!出现了如下图的C00005异常代码!!!
经过认真思考,反复探索、多次实践,终于探索出正常将excel表格导入成VF的表的几种方法,以供大家分享。
(1)用向导导入。
现在的 xls 文件一般都是Excel 2000或更高版本做的。要用向导导入时,必须注意其格式,用VFP6.0和EXCEL2000,在VFP6.0里导入EXCEL2000表就会出现"出现C00005代码异常"提示。出现这种错误后,不要急,没有其它软件也不怕,你只要在Excel中打开先要导入的文件表,然后另存为 Excel 5.0格式的表格,再用向导导入刚才另存的Excel 5.0格式的表格就可以正确了。
(2)除了上面这种方法外,经过认真思考,还可以通过VF中表与文本文件之间的数据交换命令appe from 来实现转换。具体步骤如下,首先打开Excel文件,在另存对话框中选文本文件(制表符分隔)格式,然后保存;再进入VFP,打开数据表(自己先建立一个数据表);然后用APPE FROM 文本文件.TXT DELI WITH TAB将文本文件内容导入到自己新建的数据表中。
注意:自己所建的表中字段宽度要给宽一点,类型一律用字符型,否则给出现数据丢失。
(3)用低级文件控制函数转换TEXT文件到VF表中。
先将Excel文件另存为文本文件(制表符分隔);再用VF中的低级文件控制函数转换TEXT文件到VF表中。
首先看一下文本文件(制表符分隔)的格式:在WINDOWS文本文件格式中,每行文本的末尾包括两个不可见字符,即一个是回车符CHR(13)与另一个换行符CHR(10),在读取过程中,需要将这两个字符删除;文本文件中各项采用空格“ ”或换行符CHR(9)或逗号“,”分隔。
在低级文件控制函数中需要使用FOPEN()、FREAD()、FCLOSE()、FEOF()四个函数。FOPEN()函数来正确打开文件,FCLOSE()函数来关闭文件,FEOF()函数来判断文件是否结束,FREAD()函数来读取文件,FREAD()在读取过程中同时移动文件指针,不需要使用FSEEK()函数再来移动文件指针。
下面程序就是输入一个文本文件(含扩展名和路径)然后自动转换成VF中的表。 (此程序在VF6.0下调试通过)
set talk off
clea
close all
clea all
*输入被转换的文本文件的文件名(含扩展名)
accept 输入文件的路径和文件名(含扩展名) to abc
hdq1=fopen(abc)
*打开文本文件是否正确
if hdq10
=messagebox(打开文件错误!,0+48,错误)
return
else
ai=0
zd1=(
zd2=(
kk=
*读取第一条记录的项目个数和宽度,注意第一条记录不能为空,项目也不能为空 for i=1 to 100
ab=aa+allt(str(i))
ab=
*读入一项目的内容
do whil .t.
ctemp=fread(hdq1,1)
if ctempchr(9) and ctemp#chr(13) and ctem”,”
ab=ab+ctemp
ai=ai+1
else
exit
endif
enddo
*判断项目内容是否为空
if len(alltrim(ab))#0
zd1=zd1+dd+allt(str(i))+ char(+alltrim(str(2*len(ab)))+),
zd2=zd2+dd+allt(str(i))+,
kk=kk+ab+,
endif
*判断一行是否读结束
if ctemp=chr(13)
gh=fread(hdq1,1)
exit
endif
endfor
zd1=subs(zd1,1,len(zd1)-1)+)
zd2=subs(zd2,1,len(zd2)-1)+)
kk=subs(kk,1,len(kk)-1)
HYPERLINK / \t _blank
*根据变量zd1的内容在d盘根目录下建立dbf1表 create table d:\dbf1 zd1
*在d盘根目录下的dbf1表中插入一条记录
insert into dbf1zd2 values(kk)
*继续读入其它记录内容
do whil .t.
*读入一条记录的内容
for i=1 to 100
ab=aa+allt(str(i))
ab=
*读入一项的内容
do whil .t
文档评论(0)