注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

零售创新,创新那些事儿,SPSS,VBA

零售创新

 
 
 

日志

 
 
关于我

新浪微博,零售创新 研究经理,数据分析师 希望和市场研究和零售业的同事共同进步! 本博客发表的都是免费或试用的资料,如果有版权问题请发邮件wangli12a@163.com联系删除。 spss excel vba blog

网易考拉推荐

VFP SQL统计并转存EXCEL  

2012-03-31 16:33:42|  分类: VB和VBA知识 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

VFP SQL统计并转存EXCEL

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

-- 字段名 -- 类型及长度----
   编号    C,2
   部门    C,10
   姓名    C,10
   性别    C,2
   出生日期  D
   职务    C,10
   文化程度  C,10

内容大概如下
TABLE1.DBF
---------------------------------
编号  部门  姓名  性别  出生日期  职务    文化程度 
---------------------------------
 1  工程部  张三  男  1971-01-11 工程师   大学本科 
 2  销售部  李四  男  1967-02-23 经理    大学本科 
 3  工程部  王武     1954-03-14 技术员   大学专科 
 4  总经理室 赵洁雅 女  1975-04-05 秘书    硕士研究生
 5  销售部  ..     1977-05-09 销售经理  高中   
 6  工程部  大文     1969-03-30 总工程师  大学专科 
 7  销售部  ..     1961-10-10 销售经理  大学专科 
 8  总经理室 庄稼     1961-10-10 总经理   大学专科 

          各部门人员分布情况表
                            单位:人
---------------------------------
部门  | 男| 女| 本科 | 专科|技术人员|管理人员|秘书 
---------------------------------
工程部 |  |  |    |   |    |    |   
销售部 |  |  |    |   |    |    |   
总经理室|  |  |    |   |    |    |   
    |  |  |    |   |    |    |   
    |  |  |    |   |    |    |   
---------------------------------

第一步:转换
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 部门


第三步:调用EXCEL

首先用 CreateObject 函数建立一个 Excel automation 对象,程序如下:
local excel,o
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)
  COPY to (ExcelFile) type xls
endif

excel.workbooks.open(ExcelFile) &&打开XLS工作簿
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
release o,excel
release FindWindow
?'处理完毕…'
clear

  评论这张
 
阅读(395)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017