首页 > 范文大全 > 正文

利用VFP批量读取EXCEL数据

开篇:润墨网以专业的文秘视角,为您筛选了一篇利用VFP批量读取EXCEL数据范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘 要:针对实际工作中遇到的问题,应用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

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.

k=3 &&从第三行取值

do whil k

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家个体经营户核查数据,大大提高了工作效率。

参考文献:

[1]袁铎峰,杨惠燕.体质测试数据Excel自动统计模板的研制[J].计算机光盘软件与应用,2014(05):132-133.

[2]章立.试析VB在EXCEL中的实际应用[J]计算机光盘软件与应用,2013(23):270-271.

作者简介:陶传军,男,山东工业大学应用数学专业,统计师。

作者单位:山东省蓬莱市统计局,山东蓬莱 265600