利用VFP批量读取EXCEL数据

点赞:33053 浏览:155843 近期更新时间:2024-04-19 作者:网友分享原创网站原创

摘 要:针对实际工作中遇到的问题,应用VFP编程技术,将VFP和Excel二者的优点结合起来,首先利用VFP的ADIR()函数实现遍历指定文件夹下所有XLS文件,然后通过创建OLE对象,应用VFP控制Excel命令,实现Excel文件数据的批量提取.

关 键 词 :VFP;读取;Excel;数据

中图分类号:TP311.52

1.问题提出

日常工作中,经常会遇到这样的问题:某部门要召开下属单位会议,会议通知中要求入会单位用Excel文件上报入会人员情况,比如:单位、姓名、性别、民族、职务、联系等.入会单位上报后,会议主办单位需要对入会人员的情况进行汇总处理.当入会单位只有几家、十几家或几十家的时候,我们可以用手工复制、粘贴的方式来完成这项工作,但当入会单位达到几百家甚至更多的时候,这项工作的工作量就大到我们难以承受了.那么,有没有更好的解决办法来提高工作效率呢?

2.解决思路

Excel则是一个优秀的电子表格处理软件,在兼容性、操作界面、公式运算、图表表现等方面有着独到的优势,成为广大办公应用人员常用的工具.而VFP(Visual FoxPro)是一种关系型数据库管理系统,其强大的数据处理能力及其面向对象的编程能力,使其得到数据库应用程序开发人员的广泛使用.VFP和Excel都可以用来进行处理数据库表格,我们尝试将二者的优点巧妙结合起来,首先利用VFP的ADIR()函数实现遍历指定文件夹下所有XLS文件,然后通过创建OLE对象,应用VFP控制Excel命令,实现XLS文件数据的批量提取.


3.实现过程

首先,建立格式统一的Excel文件录入模板,要求入会单位用模板录入内容,用单位名称做文件名(必须保证文件名不重复)上报;然后,以Excel文件表头指标名称为字段,建立数据库;入会单位上报后,将全部文件复制到一个文件夹下,运行下列代码,就可完成VFP批量读取Excel数据.(相关代码的作用在代码行后进行批注.)

Excel文件录入模板:

表1 会议报名表

单位 姓名 性别 民族 职务 联系

4.主要代码

set safety off

close databases

clear all

tpath等于sys(5)+sys(2003)+[\] &&读取当前路径

select 1

create table 会议报名表(单位c(40),姓名c(10),性别c(2),民族c(10),职务c(10),c(11)) &&创建"会议报名表.dbf"

tn等于adir(ts,'&tpath.*.xls') &&创建一个数组ts,遍历当前路径下所有.XLS文件

tm等于1

do whil tm<=tn

tfile等于tpath+ts(tm,1)

eole等于createobject('Excel.application') &&创建Excel对象

eole.workbooks.open("&tfile.") &&调用 Excel 应用程序;

eole.worksheets('sheet1').activate &&设置第1个工作表为激活工作表

eole.visible等于.f. &&不显示Excel窗口

eole.displayalerts 等于 .f.

利用VFP批量读取EXCEL数据参考属性评定
有关论文范文主题研究: 关于单位的论文范文集 大学生适用: 专升本毕业论文、学院学士论文
相关参考文献下载数量: 56 写作解决问题: 怎么写
毕业论文开题报告: 文献综述、论文结论 职称论文适用: 核心期刊、高级职称
所属大学生专业类别: 怎么写 论文题目推荐度: 优秀选题

k等于3 &&从第三行取值

do whil k<13 &&检测定Excel文件最多10行数据,可根据需要设置

if isnull(eole.cells(k,1).value) &&空值判断,如值为空则不继续读取

exit

endif

select 1

append blank

replace 单位 with alltrim(eole.cells(k,1).value)

replace 姓名 with iif(isnull(eole.cells(k,2).value),[],alltrim(eole.cells(k,2).value)) &&进行空值判断,防止因空值出错

replace 性别 with iif(isnull(eole.cells(k,3).value),[],alltrim(eole.cells(k,3).value))

replace 民族 with iif(isnull(eole.cells(k,4).value),[],alltrim(eole.cells(k,4).value))

replace 职务 with iif(isnull(eole.cells(k,5).value),[],alltrim(eole.cells(k,5).value))

replace with iif(isnull(eole.cells(k,6).value),[],iif(type("(eole.cells(k,6).value)")等于[N],alltrim(str(eole.cells(k,6).value,11,0)),alltrim(eole.cells(k,7).value))) &&进行数值类型判断,防止类型不符出错

k等于k+1

enddo

eole.workbooks.close

eole.quit

tm等于tm+1

enddo

close databases

retu

5.应用效果

以上代码,已在VFP9.0下调试通过,并在实际工作中得到很好的应用.上述代码,只完成了VFP批量读取Excel数据工作,将数据导入到数据库后,可以重新转到Excel中,也可以对数据进一步处理或存档,篇幅所限,这里就不继续讨论了.需要说明的是,这一解决思路,不仅可以用在会议报名表上,对一些数据结构不复杂,数据量不是特别大的统计报表,也有实际应用价值.作者对上述代码稍加修改,在第三次经济普查中,成功处理了500余家单位上报的近20000家个体经营户核查数据,大大提高了工作效率.