




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
VFP与EXCEL的几种交互编程方法一、 EXECL驱动VFPEXECL内置的VBA语言(VisualBasicForApplication)为EXECL功能的扩展提供了便利的手段,用户可使用该语言直接驱动VFP完成数据检索等功能。程序首先生成一个VFP对象,然后用VFP的DoCmd方法执行VFP摸索命令串,其摸索结果再借助于VFP的DateToClip方法拷贝至剪切板,最后VBA将其粘贴至工作表的正确位置。SubFoxTest()DimoFoxAsObjectDimSLessonAsStringDimSCommandAsStringSetoFox=CreateObject("VisualFoxPro.Application")'启动VFP,生成VFP对象Sheets("查询").SelectSLesson=Range("课程名"厂在名为“课程名”的单元格中得到欲查询的课程名称Sheets.Add'产生新的工作表单ActiveSheet.Name=Slesson'指定工作表单的名称与课程名称相同SCommand="SELECT学号,语文,数学FROMd:\vfp\学生成绩表WHERE"+SLesson+"<60INTOCURSORTEMP"'形成VFP查询命令串oFox.DoCmdScommand'执行VFP命令串oFox.DataToClip"temp",,3'将搜索结果以文本方式拷贝至剪切板Range("a1:a1").Select'指向拷贝目标区域左上角单元ActiveSheet.Paste'粘贴搜索结果EndSub为便于使用,作者在EXECL中自制了一名为“搜索”的工具栏及一名为“开始搜索”的按钮,并将上述宏程序段与自制按钮相关联,按下此按钮即可运行程序并在EXCEL中得到要求的数据。制作工具栏及按钮的方法如下:选“工具”/“自定义”菜单,出现自定义对话框;选择“工具栏”页框,然后按下“新建”按钮;在工具栏对话框中输入“搜索”作为新建工具栏的名称;选择“命令”页框,在“类别”列表中选“宏”,在“命令”列表中选“自定义按钮”并将其拖放至新建的“搜索”工具栏;按下“更新所选内容”按钮,首先在“命名”栏中填入按钮名称“开始搜索”,然后选择“指定宏”,在随后出现的“指定宏”列表中选择上述宏程序FoxTest()即可实现为该宏指定一个工具栏按钮。VFP与EXCEL的几种交互编程方法时间:2007-09-25作者:佚名编辑:本站点击:1605[评论]二、 VFP使用OLE功能驱动EXECLOLE(ObjectLinkingandEmbedding)对象链接与嵌入,是WINDOWS应用程序间相互传递和共享数据的一种有效方法。VFP借助于OLE不仅可共享其它应用程序的数据,而且还能以对象方式直接控制其它应用程序的运行,从而进一步扩展VFP的功能。VFP支持直接在程序中创建、使用和控制OLE对象,实现OLE自动化。作为OLE客户VFP与作为OLE服务器的EXCEL具有良好的编程接口,下述程序段用OLE方式实现所要求的功能。程序首先生成一个EXCEL的OLE对象OleApp以便对其进行操作,然后利用OLE功能从EXCEL表单中获取欲查询的课程名,并控制EXCEL生成新的工作表,VFP的查询结果仍然使用剪切板的方式传递至EXCEL工作表。OleApp=CREATEOBJECT("Excel.Application")&&打开EXCEL,产生OLE对象OleApp.Application.Caption="VFP交互编程"&&指定标题栏名称OleApp.Application.Visible=.T.&&置EXCEL可见OleApp.Application.WorkBooks.Open("d:\vfp\VFP交互.xls")&&打开EXCEL工作簿DOWHILE.T.pplicationnAnswer=MESSAGEBOX("开始搜索?",32+4,"搜索指定数据")&&产生信息框IF(.NOT.(nAnswer=6))&&如按下“Yes,按钮,则开始搜索,反之退出EXITENDIF.Sheets(”查询”).Select&&选择“查询”工作表单SLesson=OleApp.Application.Range('课程名").value&&得到欲查询的课程名称.Sheets.Add&&新建一工作表单.ActiveSheet.Name=Slesson&&指定工作表单的名称SCommand="SELECT学号,语文,数学FROMd:\vfp\学生成绩表WHERE"+ALLTrim(SLesson)+"<60INTOCURSORTEMP"&&形成VFP查询命令串&Scommand&&执行VFP命令串_VFP.DataToClip("TEMP",,3)&&将搜索结果以文本方式拷贝至剪切板.Range("a1:a1").Select&&指向拷贝目标区域左上角单元.ActiveSheet.Paste&&粘贴搜索结果ENDWITHENDDOOleApp.Quit&&关闭EXCEL,保存更新后的工作簿文件三、VFP使用DDE功能驱动EXECLDDE(DynamicDataExchange)动态数据交换,是WINDOWS应用程序间相互传递和共享数据的另一种有效方法,DDE用共享存储器在应用程序间交换数据。DDE会话发生在DDE客户与DDE服务器应用程序之间,客户应用程序向服务器应用程序请求数据和服务,而服务器响应客户应用程序对数据与服务的请求。DDE的数据交换可分三种方式:冷链接:客户应用程序请求数据时,服务器应用程序才发送数据给客户应用程序;暖链接:服务器应用程序在每次数据项的值变化时都向客户应用程序发送通告,但它并不直接发送值给客户应用程序,而由客户应用程序决定是否取得该数据;热链接:服务器应用程序在每次值变化时都发送数据项的新值给客户应用程序。VFP与EXCEL均支持DDE客户与服务器。下述程序段由作为DDE客户的VFP应用程序与作为DDE服务器的EXCEL用DDE方式实现所要求的功能。程序首先启动EXCEL,然后在VFP应用程序与“查询”工作表单的“课程名”单元格之间形成“热链接”,当“课程名”单元格内容改变时,将自动执行“GetData”过程。在该过程中首先直接获取DDE数据,如果该数据为“空”,则关闭EXCEL,程序结束;反之,利用DDEPOKE功能向EXCEL发送键盘命令串,以形成新的工作表,最后VFP将查询结果通过剪切板送EXCEL形成要求的工作表。PUBLICExcelChanPUBLICSheetChanRUN/N3C:\ProgramFiles\MicrosoftOffice\Office\EXCEL.EXE&&以“活动”与“最大化方式启动EXCELExcelChan=DDEInitiate("Excel",'SYSTEM')&&初始化DDE通道ExcelChan=DDEExecute(ExcelChan,'[Open("d:\vfp\VFP交互.xls")]')&&打开“VFP交互.xls”SheetChan=DDEInitiate('Excel','查询')&&初始化DDE通道SheetChan=DDEAdvise(SheetChan,'课程名','GetData',2)&&在VFP应用程序与“查询”工作表单的“课程名”单元格之间形成“热链接”!如果该单元数值改变,贝朋行“GetData”过程。PROCEDUREGetDataPARAMETERSChannel,Action,Item,Data,Format,AdviseIFAction='ADVISE'.AND.Item='课程名'&&服务器提供的链接名为“课程名”SLesson=Data&&直接获取DDE服务器提供的数据SLesson=LEFT(SLesson,LEN(SLesson)-2)&&去掉原始数据尾部的格式字符IF(LEN(SLesson)=0)&&如果指定单元格内容为“空”,贝退出=DDETerminate(SheetChan)&&终止DDE通道SheetChan=DDEExecute(ExcelChan,'[Quit]')&&退出EXCEL=DDETerminate(ExcelChan)&&终止DDE通道ExcelChanELSE=DDEExecute(ExcelChan,'[Formula.Goto(‘课程名")]')&&指定名为“课程名”的单元格为活动单元格=DDEExecute(ExcelChan,'[Copy]')&&将指定单元格内容拷贝至剪切板SKey="'%IW%OHRW{enter『"&&键盘命令字符串,表示插入(I)|工作表(W);格式(0)|工作表(H)|重命名(R);粘贴”=DDEExecute(ExcelChan,&SKey)&&通过DDE通道将命令串送EXCELWAITWINDOWTIMEOUT2&&等待2秒钟以实现上述命令串SCommand="SELECT学号,语文,数学FROMd:\vfp\学生成绩表WHERE"+ALLTRIM(SLesson)+"v60INTOCURSORTEMP"&&形成VFP查询命令串&Scommand&&执行VFP命令串_VFP.DataToClip("TEMP",,3)&&将搜索结果以文本方式拷贝至剪切板SheetChan1=DDEInitiate("Excel",'&SLesson')&&初始化DDE通道SheetChan1指向新生成的工作表=DDEExecute(SheetChan1,'[Paste]')&&粘贴搜索结果=DDETerminate(SheetChani)&&终止DDE通道SheetChaniENDIF关于vfp控制excel、word的常用东东头大mailto:ppp1117@163.com大家对vfp中通过OLE调用excel、word完成报表、数据转换等功能还感兴趣,请按以下步骤得到完整的VBA帮助:1、安装msoffice97/2000;2、启动excel、word,单击“工具”一“宏”一“VisualBasic编辑器”进入,再选“帮助”菜单即可(注意:第一次使用VBA帮助会提示插入光盘安装VBA帮助的)。现将excel下常见的东东搜集整理如下:创建Excel对象_ole_excel=CreateObject("Excel.Application")打开指定工作表_ole_excel.WorkBooks.Open("工作表文件名") &&要打开的工作表名(xls)必须是全路径添加新工作簿_ole_excel.WorksBooks.Add激活指定的工作簿_ole_excel.WorkSheets("工作簿名").Activate5•设置Excel对象为可见,一般为调试用_ole_excel.visible=.t.更改Excel对象标题栏_ole_excel.Caption="VFP程序OLE调用Excel"给单元格赋值_ole_excel.cells(行,列).value=变量 &&重要,一般由VFP传递数据给excel即由此句,可以是VFP支持的任何数据设置指定列的宽度_ole_excel.ActiveSheet.Columns(列).ColumnWidth=字符个数设置指定行的高度(默认单位:磅)_ole_excel.ActiveSheet.Rows(行).RowHeight=1/0.035 &&设定行高为1厘米,1磅=0.035厘米在第18行之前插入分页符_ole_excel.WorkSheets("Sheet1").Rows(18).PageBreak=1在第4列之前删除分页符_ole_excel.ActiveSheet.Columns(4).PageBreak=0设置四个边框线条的类型及风格_ole_excel.ActiveSheet.Range(范围).Borders(线型).LineStyle=1 &&范围指起止的单元格,如"B1:H9";Borders为边框线条:1—左,2—右,3—顶,4—底,5—斜线\,6—斜线/;LineStyle为线型参数:1—细实线,2—细虚线,……4—点虚线,……,9—双细实线13•指定边框线宽度(Borders为边框线条,参见上条;默认单位:磅)_ole_excel.ActiveSheet.Range(范围).Borders(线型).Weight=2设置页眉_ole_excel.ActiveSheet.PageSetup.CenterHeader="什么什么报表"设置页脚_ole_excel.ActiveSheet.PageSetup.CenterFooter="第&P页"设置页眉到顶端边距_ole_excel.ActiveSheet.PageSetup.HeaderMargin=2/0.035 &&2厘米设置页脚到底边边距_ole_excel.ActiveSheet.PageSetup.FooterMargin=3/0.035&&3厘米18.设置顶边距_ole_excel.ActiveSheet.PageSetup.TopMargin=3/0.035&&3厘米19.设置底边距_ole_excel.ActiveSheet.PageSetup.BottomMargin=3/0.035&&3厘米20.设置左边距_ole_excel.ActiveSheet.PageSetup.LeftMargin=3/0.035 &&3厘米21.设置右边距_ole_excel.ActiveSheet.PageSetup.RightMargin=3/0.035 &&3厘米22.设置页面水平居中_ole_excel.ActiveSheet.PageSetup.CenterHorizontally=.t.23.设置页面垂直居中_ole_excel.ActiveSheet.PageSetup.CenterVertically=.t.24.设置页面纸张大小,重要!很多网友需要的东东_ole_excel.ActiveSheet.PageSetup.PaperSize=纸张类型&&下面列出常见的纸张;可为下列XlPaperSize常量之一(某些打印机可能不支持所有的这些纸张大小);常量数值意义;xlPaperLetter1Letter(8-1/2in.x11in.)xlPaperA38A3(297mmx420mm)xlPaperA49A4(210mmx297mm)xlPaperA4Small10 A4Small(210mmx297mm)xlPaperA511A5(148mmx210mm)xlPaperB412B4(250mmx354mm)xlPaperB513B5(182mmx257mm)xlPaperFanfoldUS39U.S.StandardFanfold(14-7/8in.x11in.)xlPaperUsersht.range("&sf").Rows.AutoFitsht.range("&sf").Columns.AutoFitCOUNT(value1,value2,...)倒底如何调用才能知道EXCEL当前SHEET的总行数与总列数??愚昧。看不懂。只好烦请你详细说明。刚试验:35.合并单元格,重要!_ole_excel.Worksheets("工作簿名").Range(范围).merge &&范围必须指定起止的单元格,如"A1:B4"好象也合并不了!myexcel.worksheetd("e:\zzz\xls99.xls").range("a1:b4").merge1、 当前行、当前列没意义;2、 水平居中:_ole_excel.WorkSheets("Sheet1").Range("A1:A5").HorizontalAlignment=xlHAlignCenter垂直居中:_ole_excel.WorkSheets("Sheet1").Rows(2).VerticalAlignment=xlVAlignCenter3、合并的是工作簿而非工作表!你那句是指工作表啊当前的总行数、总列数:.ActiveSheet.UsedRange.rows.count.ActiveSheet.UsedRange.columns.count▲能够让打开的窗口作为VFP的子窗口吗?•_ole_excel.visible=.t.▲请问各位高手,在VFP6.0中生成Execl表格,如何设置“顶端标题行”和“左边标题列”WithActiveSheet.PageSetup.PrintTitleRows="$1:$3".PrintTitleColumns=""EndWitheole.ActiveSheet.PageSetup.PrintTitleRows="$1:$1"eole.ActiveSheet.PageSetup.PrintTitleColumns="$A:$A"VFP与Excel交互编程VFP(VisualFoxpro)是一种关系型数据库管理系统,由于其强大的数据处理能力及良好的兼容性,使其成为数据库应用程序开发人员强有力的工具而广为使用;而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中。下列程序均在VFP6.0与Excel2000中调试通过。Excel驱动VFPExcel内置的VBA语言(VisualBasicForApplication)为Excel功能的扩展提供了便利的手段,用户可使用该语言直接驱动VFP完成数据检索等功能。程序首先生成一个VFP对象,然后用VFP的DoCmd方法执行VFP搜索命令串,其搜索结果再借助于VFP的DataToClip方法拷贝至剪切板,最后VBA将其粘贴至工作表的正确位置,为了每次运行时能将结果插入到工作表中,依次对操作的工作表以“搜索结果”、“搜索结果1”等进行编号。SubexceluseFox()DimoFoxAsObject'声明oFox为一个对象DimSCommandAsString'SQL对应的命令串变量DimcellAsVariantDimchoiceAsStringDimjoinAsStringDimfirstAsBooleanDimfoundAsBoolean'搜索结果标志,若表单中有搜索结果,则为真SetoFox=CreateObject(“VisualFoxPro.Application”)'启动VFP,生成VFP对象Sheets(“查询”).Select'选择对应的工作表“查询”join=Range(“连接条件”)'在单一表格中的一个元素,其值为and或者orchoice=“”'置连接串初值为空first=True'一般情况下连接串后需要加上逻辑连接符and或or,首次例外ForEachcellInRange(“条件”)'产生连接条件,形成where语句的连接逻辑串IffirstThenchoice=choice+cell'形成第一次出现的where子句后的字符串first=False'修改首次进入标志,以后的连接均需要加上逻辑连接符Elsechoice=choice+“”+join+“”+cell'join的值是and或者是orEndIfNextcellSheets.Add'产生新的工作表单'找一个不重复的工作表名found=False'工作表名中前四个汉字有没有“搜索结果”的标志变量n=1ForEachcellInWorksheetsIfInStr(1,cell.Name,“搜索结果”)<>0Thenfound=True'找到对应的工作表Ifn<Val(Mid(cell.Name+Space(2),5,2))Thenn=Val(Mid(cell.Name+Space(2),5,2))'形成形如搜索结果1、搜索结果2等的表单名EndIfEndIfNextcellIfNotfoundThenActiveSheet.Name=“搜索结果”Elsen=n+1'值增1ActiveSheet.Name=“搜索结果”&n'形成工作表名EndIfSCommand=“SELECT*FROMd:\vfp\学生成绩表WHERE"+choice+“INTOCURSORTEMP”’形成VFP查询命令串oFox.DoCmdScommand'执行VFP命令串oFox.DataToClip“temp”,,3'将搜索结果以文本方式拷贝至剪切板Range(“a1:a1”).Select'指向拷贝目标区域左上角单元ActiveSheet.Paste'粘贴搜索结果EndSub上述Excel中的区域名称(如“条件”和“连接条件”名称)的设定方法是,在Excel中选择菜单“插入->名称->定义”来完成对给定区域名称的设定,这个名称可以在VBA中访问,如前述中的“条件”和“连接条件”。VFP使用ExcelOLE(ObjectLinkingandEmbedding)对象链接与嵌入,是Windows应用程序间相互传递和共享数据的一种有效方法。VFP借助于OLE不仅可共享其他应用程序的数据,而且还能以对象方式直接控制其他应用程序的运行,从而进一步扩展VFP的功能。VFP支持直接在程序中创建、使用和控制OLE对象,实现OLE自动化。作为OLE客户,VFP与作为OLE服务器的Excel具有良好的编程接口,下述程序段用OLE方式实现所要求的功能。程序首先生成一个Excel的OLE对象OleApp以便对其进行操作,然后利用OLE功能从Excel表单中获取欲查询的条件,并控制Excel生成新的唯一的工作表,通过找寻当前操作的所有工作表达到名称的唯一,VFP的查询结果仍然使用剪切板的方式传递至Excel工作表中。localcondition,where1,first,scommand,cell,newsheet,found1,nOleApp=CreateObject(“Excel.Application”)&&打开Excel,产生OLE对象OleApp.Application.Caption=“VFP交互编程”&&指定标题栏名称OleApp.Application.Visible=.T.&&置Excel可见OleApp.Application.WorkBooks.Open(“d:\vfp\VFP交互.xls”)&&打开Excel工作簿,用户也可以修改连接条件或者查询条件where1=“”&&保存SQL中where子句的变量first=.t.&&置首次进入“查询”工作表中“条件”区域标志found1=.f.n=1DOWHILE.T.WITHOleApp.ApplicationnAnswer=MessageBox(“开始搜索?”,32+4,“搜索指定数据”)&&显示搜索信息IF(.NOT.(nAns
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 公司新年开工小活动方案
- 公司竞拍活动方案
- 公司案例收集活动方案
- 公司欢迎回来活动方案
- 公司职工健身房策划方案
- 公司疫情捐赠活动方案
- 2025年装修工程师职业资格考试试题及答案
- 公共关系与危机管理的2025年试卷及答案
- 2025年养老服务体系建设考试试卷及答案
- 2025年刑法学知识与实践应用考核题及答案
- 2025年湖北省高考政治试卷真题(含答案)
- 老龄化社会的数字包容-洞察及研究
- 广东省深圳市宝安区2023-2024学年二年级下册期末测试数学试卷(含答案)
- 2025江苏扬州宝应县“乡村振兴青年人才”招聘67人笔试备考试题及参考答案详解
- 北京市顺义区2023-2024学年五年级下学期数学期末试卷(含答案)
- 2025公基题库(附答案解析)
- 三大监测培训试题及答案
- 超市商场保密协议书
- 系统思维与系统决策系统动力学知到智慧树期末考试答案题库2025年中央财经大学
- 社工社会考试试题及答案
- 跨文化交际知识体系及其前沿动态
评论
0/150
提交评论