&&设置内容对齐方式为右对齐,3为居中,4为右对齐
ef.Range(\统计时间:'+Dtoc(Date())+' 打印日期:'+Dtoc(Date()) ef.Rows(\With ef.Selection
.HorizontalAlignment = 3 &&设置3、4行为水平对齐 .VerticalAlignment = 2 &&垂直居中
.NumberFormatLocal = \ &&设置3、4行为字符型内容 Endwith
ef.Range(\ef.Selection.Merge
&&纵向合并第一列3、4行 ef.Range(\工号' &&设置第一列标题内容 ef.Columns(\&&整列选择
ef.Selection.HorizontalAlignment = 3 &&水平居中
ef.Columns(\
ef.Selection.NumberFormatLocal = \&&设置A、B列为字符型内容 ef.Range(\ef.Selection.Merge
&&纵向合并第二列3、4行 ef.Range(\姓名' &&设置第二列标题内容 ef.Columns(\&&整列选择
ef.Selection.HorizontalAlignment = 3 &&水平居中
ef.Range(\&&横向合并第三行C-E列 ef.Selection.Merge
ef.Range(\话务总量'
&&第三行大标题为“话务总量”的列 ef.Range(\电话呼入量'
&&“话务总量”下第1个小标题“电话呼入量” ef.Range(\电话呼出量'
&&“话务总量”下第2个小标题“电话呼出量” ef.Range(\合 计'
&&“话务总量”下第3个小标题“合计” ef.Range(\
ef.Selection.Merge
ef.Range(\话务总时间' ef.Range(\呼入时间' ef.Range(\呼出时间' ef.Range(\合 计' ef.Range(\ef.Selection.Merge
ef.Range(\单个话务平均时间' ef.Range(\呼入时间' ef.Range(\呼出时间' ef.Range(\合 计' ef.Range(\ef.Selection.Merge
ef.Range(\累计工作时间' ef.Range(\ef.Selection.Merge
ef.Range(\无效时间' ef.Range(\ef.Selection.Merge
ef.Range(\录入量' ef.Range(\ef.Selection.Merge
ef.Range(\有效时间比'
接下来通过scan语句,依次为每一行每一列单元格赋值。为了获得更好的打印效果,还需进行页面设置,如标题行、页面居中、横向排版等,还可以加边框线。
以上程序在VFP 6+Excel 2000+Windows 2000下调试通过。实际应用中可根据需要对各项参数设置进行相应调整。
*!* 81.实用的VFP与EXCEL交互编程
摘要:本文介绍了几种实用的VFP与EXCEL交互编程的方法与实例,将VFP强大的数据处理功能与EXCEL优异的制表功能有机地结合起来,大大增强了软件的应用效果。
关键词:VFP、EXCEL、DDE、OLE、交互编程。
Some Cross_Programming Methods Between VFP And EXCEL
Zou yiming(Gansu Lanzhou Section Of Instruments Lanzhou Petrochemical Staff College) Abstract: The author introduces us In This Paper Some practical methods And instance Of cross_programming Between VFP And EXCEL . It extremely improves their performances By combining VFP's data processing functions with EXCEL's excellent tabulation functions.
Key Words: VFP、EXCEL、OLE、DDE、Cross-Programming
VFP(Visual Foxpro)是一种关系型数据库管理系统,由于其强大的数据处理能力及良好的兼容性,使其成为数据库应用程序开发人员的强有力工具,而EXECL则是一种优秀的电子表格处理软件,在兼容性、操作界面、公式运算、图表等方面有着独到的优势。上述两种软件在各自的应用领域均得到广泛的应用,同时上述两种软件还具有良好的交互编程能力,为两者相辅相成、取长补短奠定了良好的基础。
本文将结合具体实例介绍几种VFP与EXCEL交互编程的方法,每种方法虽然实现手段各异,但功能相仿。其功能可简述如下:VFP数据表“学生成绩表.DBF”中含“学生姓
名”、“语文”、“数学”......等字段,示例程序将从EXCEL工作簿“VFP交互.XLS”之工作表“查询”中用书签“课程名”指定的单元取得欲查询的课程名称,然后在数据表“学生成绩表.DBF”中自动搜索,以找到该门课程不及格的同学名单,最后传送至原EXCEL工作薄形成新的工作表单,同时,新工作表还将以该课程名命名。
下列程序均在VFP5.0与EXCEL97中调试通过。因篇幅所限,程序中的错误处理部分略去。
一、EXECL驱动VFP
EXECL内置的VBA语言(Visual Basic For Application)为EXECL功能的扩展提供了便利的手段,用户可使用该语言直接驱动VFP完成数据检索等功能。
程序首先生成一个VFP对象,然后用VFP的DoCmd方法执行VFP摸索命令串,其摸索结果再借助于VFP的DateToClip方法拷贝至剪切板,最后VBA将其粘贴至工作表的正确位置。
Sub FoxTest()
Dim oFox As Object Dim SLesson As String Dim SCommand As String
Set oFox = Createobject(\启动VFP,生成VFP对象 Sheets(\查询\
SLesson = Range(\课程名\在名为“课程名”的单元格中得到欲查询的课程名称 Sheets.Add '产生新的工作表单
ActiveSheet.Name = Slesson '指定工作表单的名称与课程名称相同
SCommand = \学号,语文,数学 FROM d:\\vfp\\学生成绩表 WHERE \+ \形成VFP查询命令串
oFox.DoCmd Scommand '执行VFP命令串
oFox.DataToClip \将搜索结果以文本方式拷贝至剪切板 Range(\指向拷贝目标区域左上角单元 ActiveSheet.Paste '粘贴搜索结果 End Sub
为便于使用,作者在EXECL中自制了一名为“搜索”的工具栏及一名为“开始搜索”的按钮,并将上述宏程序段与自制按钮相关联,按下此按钮即可运行程序并在EXCEL中得到要求的数据。
制作工具栏及按钮的方法如下:
1. 选“工具”/“自定义”菜单,出现自定义对话框; 2. 选择“工具栏”页框,然后按下“新建”按钮;
3. 在工具栏对话框中输入“搜索”作为新建工具栏的名称; 4. 选择“命令”页框,在“类别”列表中选“宏”,在“命令”列表中选“自定义按钮”并将其拖放至新建的“搜索”工具栏;
5. 按下“更新所选内容”按钮,首先在“命名”栏中填入按钮名称“开始搜索”,然后选择“指定宏”,在随后出现的“指定宏”列表中选择上述宏程序FoxTest()即可实现为该宏指定一个工具栏按钮。
二、VFP使用OLE功能驱动EXECL
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工作表。
OleApp=Createobject(\打开EXCEL,产生OLE对象 OleApp.Application.Caption=\交互编程\指定标题栏名称 OleApp.Application.Visible=.T. && 置EXCEL可见
OleApp.Application.WorkBooks.Open(\交互.xls\打开EXCEL工作簿 Do While .T.
With OleApp.Application
nAnswer = Messagebox(\开始搜索?\搜索指定数据\产生信息框 If (.Not.(nAnswer=6)) && 如按下“Yes\按钮,则开始搜索,反之退出 Exit Endif
.Sheets(\查询\选择“查询”工作表单
SLesson = OleApp.Application.Range(\课程名\&& 得到欲查询的课程名称
.Sheets.Add && 新建一工作表单
.ActiveSheet.Name = Slesson && 指定工作表单的名称
SCommand = \学号,语文,数学 FROM d:\\vfp\\学生成绩表 WHERE \+Alltrim(SLesson) + \形成VFP查询命令串
&Scommand && 执行VFP命令串
_vfp.DataToClip(\将搜索结果以文本方式拷贝至剪切板 .Range(\指向拷贝目标区域左上角单元 .ActiveSheet.Paste && 粘贴搜索结果 Endwith Enddo
OleApp.Quit && 关闭EXCEL,保存更新后的工作簿文件
*!* 82.在VFP中Disabled/Enabled EXCEL中的菜单项及按钮 有时需要在VFP中控制EXCEL中的按钮及菜单项,以达到由VFP控制XLS文档的目的。可以控制XLS文
档不能复制、不能另存、不能打印、不能以附档的形式发邮件。结合陆老师的在通用字段中存放文档
的思路,完全可以用VFP开发文档发布系统,可以发布公司的守则、公告、管理办法、机密资料、图
片资料等而不用担心用户复制、打印、以邮件传播资料。
XLS中各个菜单项或按钮都有唯一的ID或序号,本例是利用序号来控制的(利用ID也可以控制)。
对象大多只有三层,对应的控制方法是:
对象.CommandBars(第一层序号).Controls(第二层序号).accChild(第二层序号).属性=值 本例仅列出菜单项的部分控制,其它菜单项或按钮的序号可以程序取得,此程序参考本文章开头第40条
oXLS=Createobject('excel.application')