','经理','销售经理'),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
*
* 第一行是标题,故从第二行开始
*
scan for recno()>1 &&每一行
?'正在将数据转换到 Excel 表格中…',recno()
for i=1 to fcount() &&每一列
fld=field(i)
if type(fld)='C'&&如果字段太宽,Excel可能不能正确接受数据
o.cells(recno()+3,i).value=trim(&fld)
else
o.cells(recno()+3,i).value=&fld
endif
endfor
endscan
o.cells(1,1).select
excel.ActiveWindow.windowstate=2
excel.ActiveWorkbook.save()
excel.visible=.t.
clear
startTime=time()
set cursor off
*
* 等待 Excel 处理完毕后再继续
*
do while .t.
@1,4 say '已启动后台 Excel 表格处理程序,处理中…'
@2,4 say 'Ctrl+End 继续处理…'
@4,4 say '开始时间:'
??starttime
@5,4 say '现在时间:'
??time()
&&VFP会在此等待,除非你从 EXCEL中退出或按下 Ctrl+End键
if inkey(0.5)=23 or type('o.name')='U'
exit
endif
enddo
set cursor on
rel