已阅读5页,还剩17页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
VFP与Excel交互编程 VFP(Visual Foxpro)是一种关系型数据库管理系统,由于其强大的数据处理能力及良好的兼容性,使其成为数据库应用程序开发人员强有力的工具而广为使用; 而Excel则是一个优秀的电子表格处理软件,在兼容性、操作界面、公式运算、图表等方面有着独到的优势,成为广大办公应用人员必备的首选软件。上述两种软件在各自的应用领域均得到了广泛的应用,同时上述两种软件还具有良好的交互编程能力,为两者相辅相成、取长补短奠定了良好的基础。 本文将结合实例介绍VFP与Excel交互编程的方法,在VFP中除了使用OLE技术外,还可使用DDE技术与外部服务器进行数据交换,本文主要讲解VFP中使用OLE技术与Excel交换数据,Excel中借助内置的VBA使用VFP提供的Application对象来调用VFP中的一些功能。其功能可简述如下:VFP数据表“学生成绩.DBF”中含“学号、姓名、语文、数学”等字段,示例程序将从Excel工作簿“VFP交互.XLS”的工作表“查询”中用“条件”区域(一般为一个矩形区中的数据,该区域名称指定为“条件”,数据形如“语文60”、“数学90”等)中的数据作为查询的条件,用“连接条件”区域(一般为一个单元格,其值为“or”或者“and”)来获取组合“条件”的逻辑连接,并将该连接信息的内容以工作表的形式显示出来,然后调用VFP中针对给定表的SQL查询来找出给定条件的记录并显示到Excel中。下列程序均在VFP 6.0与Excel 2000中调试通过。 Excel驱动VFP Excel内置的VBA语言(Visual Basic For Application)为Excel功能的扩展提供了便利的手段,用户可使用该语言直接驱动VFP完成数据检索等功能。程序首先生成一个VFP对象,然后用VFP的DoCmd方法执行VFP搜索命令串,其搜索结果再借助于VFP的DataToClip方法拷贝至剪切板,最后VBA将其粘贴至工作表的正确位置,为了每次运行时能将结果插入到工作表中,依次对操作的工作表以“搜索结果”、“搜索结果1”等进行编号。 Sub exceluseFox () Dim oFox As Object 声明oFox为一个对象 Dim SCommand As String SQL对应的命令串变量 Dim cell As Variant Dim choice As String Dim join As String Dim first As Boolean Dim found As Boolean 搜索结果标志,若表单中有搜索结果,则为真 Set oFox = CreateObject(“VisualFoxPro .Application”) 启动VFP,生成VFP对象 Sheets(“查询”).Select 选择对应的工作表“查询” join = Range(“连接条件”) 在单一表格中的一个元素,其值为and或者or choice = “” 置连接串初值为空 first = True 一般情况下连接串后需要加上逻辑连接符and 或 or,首次例外 For Each cell In Range(“条件”) 产生连接条件,形成where语句的连接逻辑串 If first Then choice = choice + cell 形成第一次出现的where子句后的字符串 first = False 修改首次进入标志,以后的连接均需要加上逻辑连接符 Else choice = choice + “ ” + join + “ ” + cell join的值是and或者是or End If Next cell Sheets.Add 产生新的工作表单 找一个不重复的工作表名 found = False 工作表名中前四个汉字有没有“搜索结果”的标志变量 n = 1 For Each cell In Worksheets If InStr(1, cell.Name, “搜索结果”) 0 Then found = True 找到对应的工作表 If n 名称-定义”来完成对给定区域名称的设定,这个名称可以在VBA中访问,如前述中的“条件”和“连接条件”。 VFP使用Excel OLE(Object Linking and Embedding)对象链接与嵌入,是Windows应用程序间相互传递和共享数据的一种有效方法。VFP借助于OLE不仅可共享其他应用程序的数据,而且还能以对象方式直接控制其他应用程序的运行,从而进一步扩展VFP的功能。VFP支持直接在程序中创建、使用和控制OLE对象,实现OLE自动化。作为OLE客户,VFP与作为OLE服务器的Excel具有良好的编程接口,下述程序段用OLE方式实现所要求的功能。程序首先生成一个Excel的OLE对象OleApp以便对其进行操作,然后利用OLE功能从Excel表单中获取欲查询的条件,并控制Excel生成新的唯一的工作表,通过找寻当前操作的所有工作表达到名称的唯一,VFP的查询结果仍然使用剪切板的方式传递至Excel工作表中。 local condition,where1,first,scommand,cell,newsheet,found1,n OleApp=CreateObject(“Excel.Application”) & 打开Excel,产生OLE对象 OleApp.Application.Caption=“VFP交互编程” & 指定标题栏名称 OleApp.Application.Visible=.T. & 置Excel可见 OleApp.Application.WorkBooks.Open(“d:vfpVFP交互.xls”) & 打开Excel工作簿,用户也可以修改连接条件或者查询条件 where1=“” &保存SQL中where子句的变量 first=.t. &置首次进入“查询”工作表中“条件”区域标志 found1=.f. n=1 DO WHILE .T. WITH OleApp.Application nAnswer = MessageBox(“开始搜索?”, 32+4, “搜索指定数据”) &显示搜索信息 IF (.NOT. (nAnswer=6) & 如按下“Yes”按钮,则开始搜索,反之退出 EXIT ENDIF .Sheets(“查询”).Select & 选取示例中的对应工作表 condition=.range(“连接条件”).value &得到“连接条件”区域中的逻辑连接符 for each cell in .range(“条件”).value &将表单区域内所有单元的数据拼接以形成where的连接逻辑串 If first Then Where1 = Where1 + cell &首次进入时where子句中串前不需要逻辑连接符 first = .f. &置非首次进入标志 Else Where1=Where1 +“ ”+condition +“ ”+ cell &这里condition的值取and或者or EndIf next for .Sheets.Add & 新建一工作表单 &下面的for each子句是用于找寻有否对应的工作表,若有则在搜索结果1、搜索结果2搜索结果n中得到最大的n值以便产生下一个比n大1的新工作表“搜索结果&(n+1)” for each newsheet in .worksheets if “搜索结果”$ n=max(val(subset(space(2),9,2),n) &得到最大的n值 found1=.t. &置找到工作表中前四个汉字是“搜索结果”的工作表 endif next for if not found1 .ActiveSheet.Name =“搜索结果1” & 指定工作表单的名称 else .=“搜索结果”+str(n+1,2) &得到唯一的工作表 endif SCommand = “SELECT * FROM d:vfp学生成绩表 WHERE ”+ALLTrim(where1) + “INTO CURSOR TEMP” & 形成VFP查询命令串 &Scommand & 执行VFP命令串 _VFP.DataToClip(“TEMP”, , 3) & 将搜索结果以文本方式拷贝至剪切板 .Range(“a1: a1”).Select & 指向拷贝目标区域左上角单元 .ActiveSheet.Paste & 粘贴搜索结果 ENDWITH ENDDO OleApp.Quit & 关闭Excel,保存更新后的工作簿文件 结束语 VFP与Excel的交互能力是很强的,用户可以使用VFP处理数据库的一些运算,如插入、排序、合并、选择等,将结果交由Excel中进行一些后期的处理,甚至可以将一些抽取数据的条件直接加入到Excel的条件区域中,由VFP来读取条件区域进行数据的筛选。总之,只要能充分利用好各自的优点,理解交互的接口方法,就一定能够编写出较适用的程序,满足实际工作的需要。VFP调用EXCEL的补充方法 下面是我使用 VFP CALL EXCEL的部分例子: 这是本人从书本上抄的片断和我的小小经验,可以让你很方便的在 VFP 中调用 EXCEL,所有的例程我都试验过。用Visual Foxpro 设计用Excel表格的程序 利用OLE Automation 设计Excel 应用程序 Excel支持的对象说明: (a) VBA 对象: 对象名称 意义 Application Excel应用程序对象 WorkBooks Excel活页薄对象 (b)所使用的Method 对象名称 Method 执行意义 Application Cells 设定或传回来某个网格的内容 Range 传回或设定某一个范围的网格 Charts 传回或设定活页簿的单一统计表 Quit 结束 Excel Application Save 激活存储文件对话框 WorkBooks Add 新增一个工作簿 Charts Add 新增一个统计图 (c)所使用的Property 对象名称 Property 设定意义 Application Visible 是否现实再 SCREEN上 .T. , .F. Value 传回或者设定存储文件的内容 ActiveSheet 回应Excel Application 执行工作表对象 实例说明: 启动Excel: MyExcel=CreateObject(Excel.Application) &建立Excel对象 MyExcel.Visible=.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 *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).CELLS(1,1).VALUE=客户编号MYEXCEL.ACTIVEWORKBOOK.SHEETS(1).CELLS(1,2).VALUE=公司行号SELECT CUSTOMERR=2C=1 GOTO TOP FOR I=1 TO 20 MYEXCEL.ACTIVEWORKBOOK.SHEETS(1).CELLS(R,C).VALUE=CUSTOMER.CUST_ID MYEXCEL.ACTIVEWORKBOOK.SHEETS(1).CELLS(R,C+1).VALUE=CUSTOMER.COMPANY R=R+1 SKIP ENDFOR调整单元格宽度:MYEXCEL.ACTIVEWORKBOOK.SHEETS(1).CELLS(1,1).columnwidth=30调整单元格对齐方式:MYEXCEL.ACTIVEWORKBOOK.SHEETS(1).CELLS(1,1).horizontalalig=11为默认方式,2为左对齐,3为中对齐,4为右对齐。如何将数据存储: MYEXCEL.SAVE() 注:可以用Save(FileName)指定预存储文件名, 则可不用激活SAVE AS 窗口 如何打印表格: MYEXCEL.ActiveWorkBook.PrintOut &默认打印增个Sheet如何指定打印表格: MYEXCEL.ActiveWorkBook.PrintOut(1,1,1,.T.) &默认打印增个SheetPrintOut有四个参数 A. 数值:,表示指定的工作簿中进行打印的Sheet 的开始编号 B. 数值:,表示指定的工作簿中进行打印的Sheet 的结束编号 C.打印分数. D.是否进行 Preview, .T.,预览, .F.打印 如何产生统计图 CURROW=MYEXCEL.ACTIVESHEET.ROWS.COUNT RANGESTRING=A1:+B+ALLTRIM(STR(CURROW) MYEXCEL.RANGE(RANGESTRING).SELECT MYEXCEL.CHARTS.ADD 结束EXCEL MYEXCEL.QUIT EXCEL.ActiveWindow.SelectedSheets.PrintPreview &预览打印EXCEL.ActiveWorkbook.SaveAs(C:My DocumentsBook1.xls) &另存为EXCEL.ActiveWorkbook.Close &关闭一个工作表,如果有修改则提示 EXCEL.ActiveWorkbook.Close(.t.) &提示另存为 EXCEL.ActiveWorkbook.Close(.f.) &关闭一个工作表不用提示是否存盘VFP全面控制EXCEL VFP和Excel都可以用来进行处理数据库表格,如果巧妙地将二者的优点结合起来,将会大大方便我们的工作。比如我们可以利用VFP进行处理数据,而利用Excel的预览打印功能进行报表打印。这就需要我们在VFP中直接来控制Excel。下面就在开发VFP应用项目时对Excel的控制作一下介绍:1创建Excel对象eole=CREATEOBJECT(Excel.application)2添加新工作簿eole.Workbooks.add3设置第3个工作表为激活工作表eole.Worksheets(sheet3).Activate4打开指定工作簿eole.Workbooks.Open(c:templl.xls)5显示Excel窗口eole.visible=.t.6更改Excel标题栏eole.Caption=VFP应用程序调用Microsoft Excel7给单元格赋值eole.cells(1,4).value=XM(XM为数据库字段名)8设置指定列的宽度(单位:字符个数)eole.ActiveSheet.Columns(1).ColumnWidth=59设置指定行的高度(单位:磅)eole.ActiveSheet.Rows(1).RowHeight=1/0.035(设定行高为1厘米,1磅=0.035厘米)10在第18行之前插入分页符eole.Worksheets(Sheet1).Rows(18).PageBreak=111在第4列之前删除分页符eole.ActiveSheet.Columns(4).PageBreak=012指定边框线宽度(Borders参数如下)ole.ActiveSheet.Range(b3:d3).Borders(2).Weight=313设置四个边框线条的类型eole.ActiveSheet.Range(b3:d3).Borders(2).LineStyle=1(其中Borders参数:1左、2右、3顶、4底、5斜、6斜/;LineStyle值:1与7细实、2细虚、4点虚、9双细实线)14设置页眉eole.ActiveSheet.PageSetup.CenterHeader=报表115设置页脚eole.ActiveSheet.PageSetup.CenterFooter=第P页16设置页眉到顶端边距为2厘米eole.ActiveSheet.PageSetup.HeaderMargin=2/0.03517设置页脚到底边距为3厘米eole.ActiveSheet.PageSetup.FooterMargin=3/0.03518设置顶边距为2厘米eole.ActiveSheet.PageSetup.TopMargin=2/0.03519设置底边距为4厘米eole.ActiveSheet.PageSetup.BottomMargin=4/0.03520设置左边距为2厘米veole.ActiveSheet.PageSetup.LeftMargin=2/0.03521设置右边距为2厘米eole.ActiveSheet.PageSetup.RightMargin=2/0.03522设置页面水平居中eole.ActiveSheet.PageSetup.CenterHorizontally=.t.23设置
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 三年级英语暑假特色作业
- 互联网数据接入采集系统建设方案
- 智慧工地施工方案1
- 网球俱乐部合同(2篇)
- 南京工业大学浦江学院《食品基础实验》2023-2024学年第一学期期末试卷
- 鹅妈妈买鞋的说课稿
- 翔荷雅苑2-楼施工组织设计
- 南京工业大学浦江学院《结构力学》2022-2023学年第一学期期末试卷
- 《小小的船》的说课稿
- 中学语文教学反思1
- 2022电动汽车充电设施建设技术导则
- 落实《中小学德育工作指南》制定的实施方案(pdf版)
- 中国软件行业基准数据报告(SSM-BK-202409)
- 专题09 完形填空 考点2 生活哲理类2024年中考英语真题分类汇编
- 抖音短视频年度打包服务合作协议2024年
- 人教版体育与健康八年级9武术《健身南拳》参考教学设计
- 亮化工程项目管理组织机构架设
- 打印耗材供货协议
- 空调设备的安装和修理行业发展全景调研与投资趋势预测研究报告
- 工程认知实践体验智慧树知到期末考试答案章节答案2024年中国海洋大学
- 食品配送中心租赁合同
评论
0/150
提交评论