VF中控制EXCEL的常用操作.docx

上传人:b****6 文档编号:7696887 上传时间:2023-01-25 格式:DOCX 页数:41 大小:48.69KB
下载 相关 举报
VF中控制EXCEL的常用操作.docx_第1页
第1页 / 共41页
VF中控制EXCEL的常用操作.docx_第2页
第2页 / 共41页
VF中控制EXCEL的常用操作.docx_第3页
第3页 / 共41页
VF中控制EXCEL的常用操作.docx_第4页
第4页 / 共41页
VF中控制EXCEL的常用操作.docx_第5页
第5页 / 共41页
点击查看更多>>
下载资源
资源描述

VF中控制EXCEL的常用操作.docx

《VF中控制EXCEL的常用操作.docx》由会员分享,可在线阅读,更多相关《VF中控制EXCEL的常用操作.docx(41页珍藏版)》请在冰豆网上搜索。

VF中控制EXCEL的常用操作.docx

VF中控制EXCEL的常用操作

VF中控制EXCEL的常用操作

myexcel=createobject('excel.application')

&&创建一个对象

myexcel.visible=.t.&&可见

&&bookexcel=

bookexcel="C:

\DocumentsandSettings\Administrator\桌面\学习\dd.xls")

&&打开指定文件

nrows=bookexcel.worksheets('sheet1')&&打开工作表

UsedRange=nrows.UsedRange&&返回工作表中可使用的区域,UsedRange表的属性

r=

c=

withmyexcel.application

.sheets('sheet3').select

.sheets.add&&添加一个工作表

.ActiveSheet.Name='ddddd'&&重命名表

endwith

myexcel.Worksheets('sheet1').Activate&&选择表为当前工作表

myexcel.cells(1,1).value='sss'&&1,1处的值为

1).Font.size=25&&设置1,1的字体大小

1).Font.name='黑体'&&设置字体

1).clear&&清除内容

  &&选择区域合并单元格

myexcel.Range('a1').Formula='=sum(b2,b3,b4,b5)'&&在A1中键入一个公式

myexcel.range('a1').ClearContents

"@"  &&设置选中的区域为字符型数据

*

myexcel.quit&&excel

********************************************************

*生成一个表并显示可用的sheets

&&oExcel=CREATE("Excel.Application")

&&

&&FOREACHoMyVarINoExcel.sheets

&&  ?

oMyVar.name

&&NEXToMyVar

在 VFP 中控制 Excel 的小小经验集

获取工作表名称

在以下示例中,创建了一个microsoftexcel实例,添加了一个新的工作簿。

使用foreach语句显示工作簿中每个工作表的名称。

此示例要求在运行示例的机器上正确安装microsoftexcel。

oExcel=CREATE("Excel.Application")

FOREACHoMyVarINoExcel.sheets

  ?

oMyVar.name

NEXToMyVar

Excel报表巧生成

巧让FoxPro数据生成Excel报表

VisualFoxPro是应用广泛的前台数据库开发平台之一,因此在我们日常工作中时常会遇到DBF数据文件。

然而随着办公自动化的普及,越来越多的时候需要将DBF文件转化为Excel电子文档。

常用转化方法是在FoxPro中用Copy命令进行格式转化或直接用Excel打开DBF文件。

这两种方式虽然都能达到目的,却不能得到格式规范、可以直接打印输出的报表,且输出的Excel文件中,无法对数据类型进行有效转换,极易出现数据统计错误。

有没有更好的方法呢?

这里有一个更加通用的方法,在VFP中调用Excel,可以由DBF文件直接生成格式如下图所示一样复杂的Excel报表(如图1)。

Excel报表

具体过程如下:

编辑推荐文章

●新鲜接触Excel2000XP

●Excel2000公式应用的几条经验

●Excel2000函数应用之信息函数

   假设我们要将表Agcallop.dbf文件输出为Excel格式文档,报表形如图1所示。

为使通用性更强,页面采用A4纸横向输出,默认字体为宋体10号,页脚处添加页号。

部分程序代码如下:

m.outfilename=putfile('输出结果','agcallop','xls')

&&取导出文件名称

ef=CREATEOBJECT('Excel.application')

&&调用Excel程序

&&添加工作簿

ef.Worksheets("sheet1").Activate

&&激活第一个工作表

ef.visible=.t.

&&显示Excel界面

&&选择整张表

=10

&&设置整表默认字体大小为10

select0

useagcallop

&&选择被导出的表

num=reccount()

&&求导出总记录数

gotop

i=5

ef.range("F1:

K1").Select

&&选择标题栏所在单元格

&&合并单元格

withef.range("F1")

&&设置标题及字体属性

.value='客户服务部业务代表工作量情况统计表'

.Font.Name="黑体"

.Font.size=18

endwith

ef.Rows

(2).RowHeight=1/0.035

&&设置第二行高度为1cm

ef.range("H2:

O2").Select

&&选定统计条件栏所在单元格

&&合并单元格

ef.range("H2").Font.size=10

ef.range("H2").HorizontalAlignment=4

&&设置内容对齐方式为右对齐,3为居中,2为右对齐

ef.range("H2").value='统计时间:

'+dtoc(date())+'打印日期:

'+dtoc(date())

ef.Rows("3:

4").Select

withef.Selection

.HorizontalAlignment=3

&&设置3、4行为水平对齐

.VerticalAlignment=2

&&垂直居中

.NumberFormatLocal="@"

&&设置3、4行为字符型内容

endwith

ef.Range("A3:

A4").Select

&&纵向合并第一列3、4行

ef.Range("A3").value='工号'

&&设置第一列标题内容

ef.Columns("A").Select

&&整列选择

=3

&&水平居中

ef.Columns("A:

B").Select

="@"

&&设置A、B列为字符型内容

ef.Range("B3:

B4").Select

&&纵向合并第二列3、4行

ef.Range("B3").value='姓名'

&&设置第二列标题内容

ef.Columns("B").Select

&&整列选择

=3

&&水平居中

ef.Range("C3:

E3").Select

&&横向合并第三行C-E列

ef.Range("C3").value='话务总量'

&&第三行大标题为“话务总量”的列

ef.Range("C4").value='电话呼入量'

&&“话务总量”下第1个小标题“电话呼入量”

ef.Range("D4").value='电话呼出量'

&&“话务总量”下第2个小标题“电话呼出量”

ef.Range("E4").value='合计'

&&“话务总量”下第3个小标题“合计”

ef.Range("F3:

H3").Select

ef.Range("F3").value='话务总时间'

ef.Range("F4").value='呼入时间'

ef.Range("G4").value='呼出时间'

ef.Range("H4").value='合计'

ef.Range("I3:

K3").Select

ef.Range("I3").value='单个话务平均时间'

ef.Range("I4").value='呼入时间'

ef.Range("J4").value='呼出时间'

ef.Range("K4").value='合计'

ef.Range("L3:

L4").Select

ef.Range("L3").value='累计工作时间'

ef.Range("M3:

M4").Select

ef.Range("M3").value='无效时间'

ef.Range("N3:

N4").Select

ef.Range("N3").value='录入量'

ef.Range("O3:

O4").Select

ef.Range("O3").value='有效时间比'

接下来通过scan语句,依次为每一行每一列单元格赋值。

为了获得更好的打印效果,还需进行页面设置,如标题行、页面居中、横向排版等,还可以加边框线。

以上程序在VFP6+Excel2000+Windows2000下调试通过。

实际应用中可根据需要对各项参数设置进行相应调整。

FOX控制EXCL文件另存为DBF(EXCL后台运行)

fil=&&其值为一个包含路径的文件名

eole=CREATEOBJECT('Excel.application')

&&打开文件

&&关闭(如果无则打开)自动筛选

eole.Range("A1:

F1000").Select&&选中从第1行到1000行的前6列数据(另存后只有这些数据)

asfil=STRTRAN(UPPER(STRTRAN(fil,SUBSTR(fil,1,RAT('\',fil)),'c:

\windows\desktop\cphz\')),'.XLS','.dbf')&&要保存的文件名

IFFILE(asfil)

DELETEFILE&asfil

ENDIF

8)&&另存为DBF

&&不保存当前EXCL表

&&关闭表

eole.quit&&退出EXCL

RELEASEeole&&释放变量

虽然用APPENDFROMtx.xlsTYPEXL8可以更简单的追加数据,但有时会导致程序非法错误退出(不知是不是因为非法字符),而且还有一定的限制

实用的VFP与EXCEL交互编程

邹益民

摘要:

本文介绍了几种实用的VFP与EXCEL交互编程的方法与实例,将VFP强大的数据处理功能与EXCEL优异的制表功能有机地结合起来,大大增强了软件的应用效果。

关键词:

VFP、EXCEL、DDE、OLE、交互编程。

SomeCross_ProgrammingMethodsBetweenVFPandEXCEL

Zouyiming(GansuLanzhouSectionofInstrumentsLanzhouPetrochemicalStaffCollege)

Abstract:

Theauthorintroducesusinthispapersomepracticalmethodsandinstanceofcross_programmingbetweenVFPandEXCEL.ItextremelyimprovestheirperformancesbycombiningVFP'sdataprocessingfunctionswithEXCEL'sexcellenttabulationfunctions.

KeyWords:

VFP、EXCEL、OLE、DDE、Cross-Programming

VFP(VisualFoxpro)是一种关系型数据库管理系统,由于其强大的数据处理能力及良好的兼容性,使其成为数据库应用程序开发人员的强有力工具,而EXECL则是一种优秀的电子表格处理软件,在兼容性、操作界面、公式运算、图表等方面有着独到的优势。

上述两种软件在各自的应用领域均得到广泛的应用,同时上述两种软件还具有良好的交互编程能力,为两者相辅相成、取长补短奠定了良好的基础。

本文将结合具体实例介绍几种VFP与EXCEL交互编程的方法,每种方法虽然实现手段各异,但功能相仿。

其功能可简述如下:

VFP数据表“学生成绩表.DBF”中含“学生姓名”、“语文”、“数学”......等字段,示例程序将从EXCEL工作簿“VFP交互.XLS”之工作表“查询”中用书签“课程名”指定的单元取得欲查询的课程名称,然后在数据表“学生成绩表.DBF”中自动搜索,以找到该门课程不及格的同学名单,最后传送至原EXCEL工作薄形成新的工作表单,同时,新工作表还将以该课程名命名。

下列程序均在VFP5.0与EXCEL97中调试通过。

因篇幅所限,程序中的错误处理部分略去。

一、EXECL驱动VFP

EXECL内置的VBA语言(VisualBasicForApplication)为EXECL功能的扩展提供了便利的手段,用户可使用该语言直接驱动VFP完成数据检索等功能。

程序首先生成一个VFP对象,然后用VFP的DoCmd方法执行VFP摸索命令串,其摸索结果再借助于VFP的DateToClip方法拷贝至剪切板,最后VBA将其粘贴至工作表的正确位置。

SubFoxTest()

DimoFoxAsObject

DimSLessonAsString

DimSCommandAsString

SetoFox=CreateObject("VisualFoxPro.Application")'启动VFP,生成VFP对象

Sheets("查询").Select

SLesson=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中得到要求的数据。

制作工具栏及按钮的方法如下:

1.选“工具”/“自定义”菜单,出现自定义对话框;

2.选择“工具栏”页框,然后按下“新建”按钮;

3.在工具栏对话框中输入“搜索”作为新建工具栏的名称;

4.选择“命令”页框,在“类别”列表中选“宏”,在“命令”列表中选“自定义按钮”并将其拖放至新建的“搜索”工具栏;

5.按下“更新所选内容”按钮,首先在“命名”栏中填入按钮名称“开始搜索”,然后选择“指定宏”,在随后出现的“指定宏”列表中选择上述宏程序FoxTest()即可实现为该宏指定一个工具栏按钮。

二、VFP使用OLE功能驱动EXECL

OLE(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对象

"VFP交互编程"&&指定标题栏名称

&&置EXCEL可见

"d:

\vfp\VFP交互.xls")&&打开EXCEL工作簿

DOWHILE.T.

WITHOleApp.Application

nAnswer=MESSAGEBOX("开始搜索?

",32+4,"搜索指定数据")&&产生信息框

IF(.NOT.(nAnswer=6))&&如按下“Yes"按钮,则开始搜索,反之退出

EXIT

ENDIF

.Sheets("查询").Select&&选择“查询”工作表单

SLesson="课程名").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&&粘贴搜索结果

ENDWITH

ENDDO

OleApp.Quit&&关闭EXCEL,保存更新后的工作簿文件

****************************************

那个是关闭excel啊~~不是存盘~关闭了就不能存盘了

设置打印参数:

问:

用Excel做报表,可打印时怎么选择打印机,即.

 

答:

expression.PrintOut(From,To,Copies,Preview,ActivePrinter,PrintToFile,Collate,PrToFileName)

expression  必选。

该表达式返回“应用于”列表中的某个对象。

From  Variant类型,可选。

打印的开始页号。

如果省略该参数,将从起始位置开始打印。

To  Variant类型,可选。

打印的终止页号。

如果省略该参数,将打印至最后一页。

Copies  Variant类型,可选。

要打印的份数。

如果省略该参数,将只打印一份。

Preview  Variant类型,可选。

如果为True则MicrosoftExcel打印指定对象之前进行打印预览。

如果为False,或者省略此参数则立即打印该对象。

ActivePrinter  Variant类型,可选。

设置活动打印机的名称。

PrintToFile  Variant类型,可选。

如果为True则打印输出到文件。

如果没有指定PrToFileName,则MicrosoftExcel将提示用户输入要输出文件的文件名。

Collate  Variant类型,可选。

如果为True则逐份打印每份副本。

PrToFileName  可选,Variant类型。

如果将PrintToFile设置为True,则本参数指定要打印到的文件名。

说明

From参数和To参数所描述的“页”指的是要打印的页,并非指定工作表或工作簿中的全部页。

如何用编程的方法打开有密码的Excel文件?

问题:

Excel文件加了密码,如何在VFP中用编程的方式把密码输入,使Excel文件打开

如:

eole=CREATEOBJECT('Excel.application')

"d:

\22.xls")

这样还有一个密码的对话框出来,需要输入密码才能打开文件。

如何用编程的方法直接打开有密码的Excel文件?

答:

 

"d:

\22.xls",.f.,.f.,,"123","456")

"123"表示打开权限的密码,

"456"表示修改权限的密码.

----------------------------------------------

问题一:

如何将一个已知路径的图片插入到excel中.

答:

"图片文件名")

----------------------------------------------

问题二:

能不能指定在某一位置或区域放置图片并控制图片显示大小呢?

 

答:

OLEAPP.SHEETS

(1).SELECT

oleapp.Range("位置").Select

"图片文件名")).Select

=.T.

=57

----------------------------------------------

问题:

类型为字符型的字段输出到excel中,前面的零被自动去掉,例如“009877”变为“9877”,怎么解决?

答:

1.在字符串前面加半角单引号“'”

2.

eole.Range("A1:

Y1").Select

="@"

----------------------------------------------

在Excel中插入行和列:

 

objExcel.Rows

(1).Insert() &&在第一行前面插入一行

objExcel.Columns

(2).Insert() &&在第二列前面插入一列

----------------------------------------------

获取Excel记录数

loXls=CREATEOBJECT("excel.application")

bookExcel="f:

\pz.xls")

nrows=bookExcel.Worksheets('pz')

UsedRange=nrows.UsedRange

r=   &&行数

c=&&列数

----------------------------------------------

问:

在EXCEL中如何在打开文件的同时自动执行一个宏命令。

 

答:

 

只要将宏的命名为AUTO_OPEN即可。

如果要在文件关闭时运行,则命名为auto_close。

----------------------------------------------

问:

在VFP中可以执行EXCEL的选择性粘贴吗?

.Range("A2").PasteSpecial("xlPastues")     &&会出错

.Range("A2").PasteSpecial(3)     &&也会出错

.Range("A2").PasteSpecial      &&只好这样了

如何才能只粘贴值呢?

 

=====================================================

答:

xlPastues=-4163

oExcel.Range("A1").Select

oExcel.Range("B1")._PasteSpecial(xlPastues)

注意:

在Excel中,"xlPastues"是一个常量,它的值是一个数值型的:

-4163

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1