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

下载本文档

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

文档简介

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

2、而Excel更是一个标准的 Ole Automation服务器程序, 我们可以在前端将数据传送到后端的Excel服务程序,用后端服务程序进行表格处理,从而弥补 Visual Foxpro 的不足。由于历史原因,我们作报表都习惯用 Total 、Count、 Sum 或者直接在报表中工具中计算,速度最快的大概也就是 Total 了,但不知道还有多少人还在坚持使用 Total 命令进行计算,有没有更好的计算方法呢?当然有啦!我在实际使用中积累有一定的经验但愿能给各位起到小小的启发。假设有一表: Table1 是一个人员档案,里面的表结构如下:字段名 类型及长度编号C,2部门C,10姓名C,10性别

3、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总经理大学专科当然实际的数据应该比这里多很多, 要不还用统计干吗, 我不过是举例说明而已。我不知道你们在使用 SQL 语句

4、时有没有用使用函数的习惯,反正我是相当愿意在 SQL 中使用函数,我认为使用函数的 SQL 语句虽然语句长一点, 但是可以让你的程序看起来更清晰、简洁。说道这里我要感谢当初发明出IIF函数那位高人,要没有他( 她 ) 我也没有机会在这里罗嗦这么久,在后面提到的快速产生统计表中将大量的运用 IIF 函数。也许你会觉得奇怪,你统计的时候用那么多 IIF 干吗?别急,下面就让我慢慢的告诉你。看看我们前面描述的表, 我们可能要统计各个部门的“性别职务文化程度”等的分布情况,简单一点我给画了一个表个出来,可能表格更能说明白:各部门人员分布情况表单位:人部门男女本科专科技术人员管理人员秘书工程部销售部总经

5、理室上面这张表说复杂也不复杂, 但是用常给的处理方法可能也要耗掉我们不少的时间,因为你不得不针对不同的项目进行单独反复的计算, 可能还要生成一大堆的临时表真烦! 下面的计算公司可让你轻松完成上面的表格, 当然程序还是要写的不可能什么也不动不想就能达到的,立即输入下列程序:第一步:转换Select部门 ,;iif(性别 = 男,1,0) as男,;iif(性别 = 女,1,0) as女,;iif(文化程度 = 大学本科 ,1,0) as大学本科 ,;iif(文化程度 = 大学专科 ,1,0) as大学专科 ,;iif(inlist(职务 , 工程师 ,技术员 , 总工程师 ),1,0) as技术

6、人员 ,;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

7、管理人员 ,;sum(秘书 )as秘书 ;from query1 into cursor query1;group by部门不要以为我把“ from query1 into cursor query1”写错了,这样写的语句确实可以使用。到这一步,统计表就计算出来了, 不信用 BROWSE看看。往下面我们应该说说怎样把现在统计出的数据输出到EXCEL 中了(当然什么样子的数据都可以)。首先用 CreateObject函数建立一个 Excel automation对象,程序如下:local excel,odefine windows WaitWin at 0,0 size 10,60 system

8、 ;font times new roman,12 ;title 提示 close float zoom & 用于处理提示信息的窗口 move windows waitWin centeracti windows waitwinset color to w+/nclearexcel=createobject(excel.application)if type(excel)=U &未能产生 EXCEL对象? 启动 EXCEL 失败 . release windows WaitWin returnendifReportTitle=XXXX公司人员分布情况 ExcelFile=xls1.xlsexc

9、el.caption=ReportTitelselect query1if not file(ExcelFile)export to (ExcelFile) type xlsendifexcel.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=fi

10、eld(i)每一列if type(fld)=C&如果字段太宽, Excel 可能不能正确接受数据o.cells(recno()+3,i).value=trim(&fld)elseo.cells(recno()+3,i).value=&fldendifendforendscano.cells(1,1).selectexcel.ActiveWindow.windowstate=2excel.ActiveWorkbook.save()excel.visible=.t.clearstartTime=time()set cursor off* 等待 Excel 处理完毕后再继续*do while .t.

11、1,4 say 已启动后台 Excel2,4 say Ctrl+End继续处理4,4 say 开始时间 :?starttime5,4 say 现在时间 :?time()表格处理程序 ., 处理中 .&VFP会在此等待,除非你从EXCEL中退出或按下Ctrl+End键if inkey(0.5)=23 or type()=Uexitendifenddoset cursor onrelease o,excelrelease FindWindow? 处理完毕 .=inkey(0.5)release windows WaitWinend noteVFP调用 EXCEL的补充方法佳帆网站工作室

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

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

14、isible=.T. &让 Excel对象再屏幕上显示出来如何增加工作簿:MyExcel.WorkBooks.Add &在 Excel 对象中增加一份工作簿(WorkBook)如何在工作簿中增加Sheet( 工作表)MyExcel.Sheets.Add & 增加工作表(在当前工作簿中)如何删除工作表MyExcel.ActiveWorkBooks.Sheets(1).Delete&把工作簿中的BOOK(1) 删除向指定的工作簿中的工作表(Sheet) 中存储数据*Excel.application Object*Excel.application.ActiveWorkBook Property*

15、WorkBOoks Object*WorkBOoks Object 的 Add Method.*Sheets 对象*Sheets(Index)对象指定索引工作表*Excel.Application对象的 Cells Method结合 Value 属性Example:CLEAR ALLSET PATH TO SYS(2004)+SAMPLESDATEUSE CUSTOMERMYEXCEL=CREATEOBJEXT(EXCEL.APPLICATION)MYEXCEL.VISIBLE=.T.MYEXCEL.WORKBOOKS.ADDMYEXCEL.ACTIVEWORKBOOK.SHEETS(1).C

16、ELLS(1,1).VALUE=客户编号 MYEXCEL.ACTIVEWORKBOOK.SHEETS(1).CELLS(1,2).VALUE=公司行号 SELECT CUSTOMERR=2C=1GOTO TOPFOR I=1 TO 20MYEXCEL.ACTIVEWORKBOOK.SHEETS(1).CELLS(R,C).VALUE=CUSTOMER.CUST_ID MYEXCEL.ACTIVEWORKBOOK.SHEETS(1).CELLS(R,C+1).VALUE=CUSTOMER.COMPANY R=R+1SKIPENDFOR调整单元格宽度:MYEXCEL.ACTIVEWORKBOOK.

17、SHEETS(1).CELLS(1,1).columnwidth=30 调整单元格对齐方式:MYEXCEL.ACTIVEWORKBOOK.SHEETS(1).CELLS(1,1).horizontalalig=1 1 为默认方式, 2 为左对齐, 3 为中对齐, 4 为右对齐。如何将数据存储:MYEXCEL.SAVE()注 : 可以用 Save(FileName) 指定预存储文件名 , 则可不用激活 SAVE AS窗口如何打印表格:MYEXCEL.ActiveWorkBook.PrintOut & 默认打印增个 Sheet如何指定打印表格:MYEXCEL.ActiveWorkBook.PrintOut(1,1,1,.T.) & 默认打印增个 Sheet PrintOut 有四个参数A. 数值 :, 表示指定的工作簿中进行打印的B. 数值 :, 表示指定的工作簿中进行打印的C. 打印分数 .D. 是否进行 Preview, .T.,预览 , .F.打印Sheet Sheet的开始编号的结束编号如何产生统计图CURROW=MYEXCEL.ACTIVESHEET.ROWS.COUNTRANGESTRING=A1:+B+ALLTRIM(STR(CURROW)MYEXCEL.RANGE(RANGESTRING).SELECT

温馨提示

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

评论

0/150

提交评论