VFP数据导出到EXCEL技术_第1页
VFP数据导出到EXCEL技术_第2页
VFP数据导出到EXCEL技术_第3页
VFP数据导出到EXCEL技术_第4页
VFP数据导出到EXCEL技术_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、VFP 数据导出到 EXCEL 技术VFP 数据导出到 EXCEL 技术我们都知道在 EXCEL 中有很多很多的计算公式、 灵活多变 的计算方式 、方便快捷的图表处理、 和功能强大的 VBA 语 言,可以说 EXCEL 可能是最好用的表格处理软件。 我敢说: 微软的产品中大概就 EXCEL 最好!但是,怎样用 Foxpro 快速产生统计表, 并将数据送到 Excel 表格中,从而代替 Foxpro 的报表工具呢 ? 我们大家都知道,在 Visual Foxpro 3.0 及以后版本中提供了 一个调用 Ole Automation 的函数 CREATEOBJECT ,用该函 数可以让 Visua

2、l Foxpro 很方便的和其它可以提供 Ole Automation 服务的程序进行通讯。而 Excel 更是一个标准 的 Ole Automation 服务器程序, 我们可以在前端将数据传送 到后端的 Excel 服务程序,用后端服务程序进行表格处理, 从而弥补 Visual Foxpro 的不足。 由于历史原因,我们作报 表都习惯用 Total、Count、Sum 或者直接在报表中工具中计 算,速度最快的大概也就是 Total 了,但不知道还有多少人 还在坚持使用 Total 命令进行计算,有没有更好的计算方法 呢?当然有啦!我在实际使用中积累有一定的经验但愿能给 各位起到小小的启发。假

3、设有一表: 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-0

4、3-30 总工程师 大学专科 7 销售部 1961-10-10 销售经理 大学专科 8 总经理室 庄稼 1961-10-10 总经理 大学专科 当然实际的数据应该比这里多很多,要不还用统 计干吗, 我不过是举例说明而已。 我不知道你们在使用 SQL 语句时有没有用使用函数的习惯,反正我是相 当愿意在 SQL 中使用函数,我认为使用函数的 SQL 语句 虽然语句长一点, 但是可以让你的程序看起来更清晰、 简洁。 说道这里我要感谢当初发明出 IIF 函数那位高人, 要没有他 (她)我也没有机会在这里罗嗦这么久,在后面提到的快速产 生统计表中将大量的运用 IIF 函数。 也许你会觉得奇怪, 你 统计

5、的时候用那么多 IIF 干吗?别急, 下面就让我慢慢的告 诉你。 看看我们前面描述的表,我们可能要统计各个部门的“性 别丨职务丨文化程度”等的分布情况,简单一点我给画了一 个表个出来,可能表格更能说明白: 各部门人员分布情况表单位:人 部门丨男丨女丨本科丨 专科I技术人员丨管理人员I秘书 工程部 I I I II I I 销售部 I I IIIII总经理室I I I IIIIIIIIIIIIIIIII上面这张表说复杂也不复杂,但是用常给的处理方法可能也要耗掉我们不少的时间,因为你不得不针对不同的项目进行单独反复的计算,可能还要生成一大堆的临时表真烦!下面的计算公司可让你轻松完成上面的表格,当然

6、程序还是要写的不可能什么也不动 不想就能达到的,立即输入下列程序:第一步:转换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 管理人员 ,;ii

7、f(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 ”写错了,这 样写的

8、语句确实可以使用。到这一步,统计表就计算出来了,不信用 BROWSE 看看 往下面我们应该说说怎样把现在统计出的数据输出到EXCEL 中了(当然什么样子的数据都可以) 。 首先用 CreateObject 函数建立一个 Excel automation 对象,程序如 下: local excel,odefine windows WaitWin at 0,0 size 10,60 system ;font times new roman,12 ;title 提示 close float zoom &;&; 用于处理提示信息的 窗口move windows waitWin center

9、acti windows waitwinset color to w+/n clear excel=createobject(excel.application)if type(excel)=U && 未能产生 EXCEL 对象 启动 EXCEL 失败 .release windows WaitWin return endifReportTitle=XXXX 公司人员分布情况 ExcelFile=xls1.xlsexcel.caption=ReportTitel select query1 if not file(ExcelFile) export to (ExcelFile)

10、 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&& 如果字段太宽,

11、Excel 可能不能正 确接受数据 o.cells(recno()+3,i).value=trim(&fld) elseo.cells(recno()+3,i).value=&fldendifendforendscano.cells(1,1).selectexcel.ActiveWindow.windowstate=2 excel.ActiveWorkbook.save() excel.visible=.t.clearstartTime=time()set cursor off* 等待 Excel 处理完毕后再继续*do while .t.1,4 say 已启动后台 Excel

12、 表格处理程序 ,处理中 .2,4 say Ctrl+End 继续处理 .4,4 say 开始时间 :starttime5,4 say 现在时间 :time()&&VFP 会在此等待,除非你从 EXCEL 中退出或 按下 Ctrl+End 键 if inkey(0.5)=23 or type()=U exitendif enddo set cursor on release o,excel release FindWindow 处理完毕 . =inkey(0.5) release windows WaitWin end noteVFP 调用 EXCEL 的补充方法佳

13、帆网站工作室 大文 下面是我使用 VFP CALL EXCEL 的部分例子: 这是本人从书本上抄的片断和我的小小经验,可以让你很方 便的在 VFP 中调用 EXCEL ,所有的例程我都试验过。 用 Visual Foxpro 设计用 Excel 表格的程序利用 OLE Automation 设计 Excel 应用程序Excel 支持的对象说明:(a) VBA 对象: 对象名称 意义Application Excel 应用程序对象WorkBooks Excel 活页薄对象(b) 所使用的Method对象名称 Method 执行意义Application Cells 设定或传回来某个网格的内容Ra

14、nge 传回或设定某一个范围的网格Charts 传回或设定活页簿的单一统计表Quit 结束 Excel ApplicationSave 激活存储文件对话框WorkBooks Add 新增一个工作簿Charts Add 新增一个统计图(c) 所使用的Property对象名称 Property 设定意义Application Visible 是否现实再 SCREEN 上 .T. , .F. Value 传回或者设定存储文件的内容ActiveSheet 回应 Excel Application 执行工作表对象 实例说明: 启动 Excel :MyExcel=CreateObject(Excel.Ap

15、plication) && 建立 Excel 对象MyExcel.Visible=.T. && 让 Excel 对象再屏幕上显示 出来如何增加工作簿:MyExcel.WorkBooks.Add && 在 Excel 对象中增加 一份工作簿(WorkBook)如何在工作簿中增加Sheet(工作表)MyExcel.Sheets.Add && 增加工作表 (在当前工作簿 中)如何删除工作表MyExcel.ActiveWorkBooks.Sheets(1).Delete && 把 工作簿中的 BOOK ( 1)删除向指定的

16、工作簿中的工作表(Sheet)中存储数据*Excel.application Object*Excel.application.ActiveWorkBook Property*WorkBOoks Object*WorkBOoks Object 的 Add Method.*Sheets 对象*Sheets(lndex)对象指定索引工作表*Excel.Application 对象的 Cells Method 结合 Value 属性 Example:CLEAR ALLSET PATH TO SYS(2004)+SAMPLESDATEUSE CUSTOMERMYEXCEL=CREATEOBJEXT(E

17、XCEL.APPLICATION) MYEXCEL.VISIBLE=.T.MYEXCEL.WORKBOOKS.ADDMYEXCEL.ACTIVEWORKBOOK.SHEETS(1).CELLS(1,1).V ALUE= 客户编号 MYEXCEL.ACTIVEWORKBOOK.SHEETS(1).CELLS(1,2).V ALUE= 公司行号 SELECT CUSTOMERR=2C=1GOTO TOPFOR I=1 TO 20MYEXCEL.ACTIVEWORKBOOK.SHEETS(1).CELLS(R,C). VALUE=CUSTOMER.CUST_IDMYEXCEL.ACTIVEWORKB

18、OOK.SHEETS(1).CELLS(R,C+ 1).VALUE=CUSTOMER.COMPANY R=R+1SKIPENDFOR 调整单元格宽度:MYEXCEL.ACTIVEWORKBOOK.SHEETS(1).CELLS(1,1).c olumnwidth=30调整单元格对齐方式:MYEXCEL.ACTIVEWORKBOOK.SHEETS(1).CELLS(1,1).h orizontalalig=1 1 为默认方式, 2 为左对齐, 3 为中对齐, 4 为右对齐。如何将数据存储:MYEXCEL.SA VE()注:可以用 Save(FileName) 指定预存储文件名 , 则可不用激活SAVE AS 窗口 如何打印表格:MYEXCEL.ActiveWorkBook.PrintOut && 默认打印 增个 Sheet如何指定打印表格:MYEXCEL.ActiveWor

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论