VFP数据导出到EXCEL技术.

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

VFP数据导出到EXCEL技术

我们都知道在 EXCEL 中有很多很多的计算公式、灵活多变的计算方式、方便快捷的图表处理、和功能强大的VBA 语言,可以说 EXCEL 可能是最好用的表格处理软件。我敢说:微软的产品中大概就 EXCEL 最好!

但是,怎样用 Foxpro 快速产生统计表,并将数据送到 Excel表格中,从而代替 Foxpro 的报表工具呢?

我们大家都知道,在 Visual Foxpro 3.0及以后版本中提供了一个调用Ole Automation 的函数 CREATEOBJECT,用该函数可以让 Visual Foxpro 很方便的和其它可以提供 Ole Automation 服务的程序进行通讯。而 Excel 更是一个标准的 Ole Automation 服务器程序,我们可以在前端将数据传送到后端的 Excel 服务程序,用后端服务程序进行表格处理,从而弥补 Visual Foxpro的不足。

由于历史原因,我们作报表都习惯用 Total、Count、Sum 或者直接在报表中工具中计算,速度最快的大概也就是 Total 了,但不知道还有多少人还在坚持使用 Total 命令进行计算,有没有更好的计算方法呢?当然有啦!我在实际使用中积累有一定的经验但愿能给各位起到小小的启发。

假设有一表:Table1 是一个人员档案,里面的表结构如下:

-----字段名--类型及长度---------

编号C,2

部门C,10

姓名C,10

性别C,2

出生日期 D

职务C,10

文化程度C,10

内容大概如下

TABLE1.DBF

---------------------------------

编号部门姓名性别出生日期职务文化程度

---------------------------------

1 工程部张三男1971-01-11 工程师大学本科

2 销售部李四男1967-02-2

3 经理大学本科

3 工程部王武1954-03-1

4 技术员大学专科

4 总经理室赵洁雅女1975-04-0

5 秘书硕士研究生

5 销售部..1977-05-09 销售经理高中

6 工程部大文1969-03-30 总工程师大学专科

7 销售部..1961-10-10 销售经理大学专科

8 总经理室庄稼1961-10-10 总经理大学专科

当然实际的数据应该比这里多很多,要不还用统计干吗,我不过是举例说明而已。我不知道你们在使用 SQL 语句时有没有用使用函数的习惯,反正我是相

当愿意在 SQL 中使用函数,我认为使用函数的 SQL 语句虽然语句长一点,但是可以让你的程序看起来更清晰、简洁。

说道这里我要感谢当初发明出 IIF 函数那位高人,要没有他(她)我也没有机会在这里罗嗦这么久,在后面提到的快速产生统计表中将大量的运用 IIF 函数。也许你会觉得奇怪,你统计的时候用那么多 IIF 干吗?别急,下面就让我慢慢的告诉你。

看看我们前面描述的表,我们可能要统计各个部门的“性别|职务|文化程度”等的分布情况,简单一点我给画了一个表个出来,可能表格更能说明白:

各部门人员分布情况表

单位:人

---------------------------------

部门|男|女|本科|专科|技术人员|管理人员|秘书

---------------------------------

工程部|||||||

销售部|||||||

总经理室|||||||

|||||||

|||||||

---------------------------------

上面这张表说复杂也不复杂,但是用常给的处理方法可能也要耗掉我们不少的时间,因为你不得不针对不同的项目进行单独反复的计算,可能还要生成一大堆的临时表真烦!下面的计算公司可让你轻松完成上面的表格,当然程序还是要写的不可能什么也不动不想就能达到的,立即输入下列程序:

第一步:转换

Select 部门,;

iif(性别='男',1,0) as 男,;

iif(性别='女',1,0) as 女,;

iif(文化程度='大学本科',1,0) as 大学本科,;

iif(文化程度='大学专科',1,0) as 大学专科,;

iif(inlist(职务,'工程师','技术员','总工程师'),1,0) as 技术人员,;

iif(inlist(职务,'总经理','经理','销售经理'),1,0) as 管理人员,;

iif(inlist(职务,'总经理','经理','销售经理'),1,0) as 管理人员,;

iif(inlist(职务,'秘书'),1,0) as 秘书;

from table into cursor query1

第二步:转换并计算

Select 部门 as 部门,;

sum(男) as 男,;

sum(女) as 女,;

sum(大学本科) as 大学本科,;

sum(大学专科) as 大学专科,;

sum(技术人员) as 技术人员,;

sum(管理人员) as 管理人员,;

sum(管理人员) as 管理人员,;

sum(秘书) as 秘书;

from query1 into cursor query1;

group by 部门

不要以为我把“from query1 into cursor query1”写错了,这样写的语句确实可以使用。

到这一步,统计表就计算出来了,不信用 BROWSE 看看。往下面我们应该说说怎样把现在统计出的数据输出到 EXCEL 中了(当然什么样子的数据都可以)。首先用 CreateObject 函数建立一个 Excel automation 对象,程序如下:

local excel,o

define windows WaitWin at 0,0 size 10,60 system ;

font 'times new roman',12 ;

title '提示' close float zoom &&用于处理提示信息的窗口

move windows waitWin center

acti windows waitwin

set color to w+/n

clear

excel=createobject('excel.application')

if type('excel')='U' &&未能产生EXCEL对象

? '启动 EXCEL 失败...'

release windows WaitWin

return

endif

ReportTitle='XXXX公司人员分布情况'

ExcelFile="xls1.xls"

excel.caption=ReportTitel

select query1

if not file(ExcelFile)

export to (ExcelFile) type xls

endif

excel.workbooks.open(ExcelFile)

o=excel.activeworkbook.activesheet &&用对象代替这么长的一串字

o.cells(1,1).value=ReportTitle

*

* 第一行是标题,故从第二行开始

*

相关文档
最新文档