Visual Foxpro中如何实现对EXCEL表格的操作.docx

上传人:b****7 文档编号:8692188 上传时间:2023-02-01 格式:DOCX 页数:209 大小:92.48KB
下载 相关 举报
Visual Foxpro中如何实现对EXCEL表格的操作.docx_第1页
第1页 / 共209页
Visual Foxpro中如何实现对EXCEL表格的操作.docx_第2页
第2页 / 共209页
Visual Foxpro中如何实现对EXCEL表格的操作.docx_第3页
第3页 / 共209页
Visual Foxpro中如何实现对EXCEL表格的操作.docx_第4页
第4页 / 共209页
Visual Foxpro中如何实现对EXCEL表格的操作.docx_第5页
第5页 / 共209页
点击查看更多>>
下载资源
资源描述

Visual Foxpro中如何实现对EXCEL表格的操作.docx

《Visual Foxpro中如何实现对EXCEL表格的操作.docx》由会员分享,可在线阅读,更多相关《Visual Foxpro中如何实现对EXCEL表格的操作.docx(209页珍藏版)》请在冰豆网上搜索。

Visual Foxpro中如何实现对EXCEL表格的操作.docx

VisualFoxpro中如何实现对EXCEL表格的操作

VisualFoxpro中如何实现对EXCEL表格的操作

VFP和Excel都可以用来进行处理数据库表格,如果巧妙地将二者的优点结合起来,将会大大方便我们的工作。

比如我们可以利用VFP进行处理数据,而利用Excel的预览打印功能进行报表打印。

这就需要我们在VFP中直接来控制Excel。

下面就在开发VFP应用项目时对Excel的控制作一下介绍:

1.创建Excel对象

oExcel=CREATEOBJECT("Excel.application")

2.添加新工作簿

oExcel.Workbooks.add

3.设置第3个工作表为激活工作表

oExcel.Worksheets("sheet3").Activate

4.打开指定工作簿

oExcel.Workbooks.Open("c:

\temp\ll.xls")

5.显示Excel窗口

oExcel.visible=.t.

6.更改Excel标题栏

oExcel.Caption="VFP应用程序调用MicrosoftExcel"

7.给单元格赋值

oExcel.cells(1,4).value=XM(XM为数据库字段名)

8.设置指定列的宽度(单位:

字符个数)

oExcel.ActiveSheet.Columns

(1).ColumnWidth=5

9.设置指定行的高度(单位:

磅)

oExcel.ActiveSheet.Rows

(1).RowHeight=1

(设定行高为1磅,1磅=0.035厘米)

oExcel.ActiveSheet.Rows("50:

100").RowHeight=1&&设置第50行至100行的高度

10.在第18行之前插入分页符

oExcel.Worksheets("Sheet1").Rows(18).PageBreak=1

11.在第4列之前删除分页符

oExcel.ActiveSheet.Columns(4).PageBreak=0

12.指定边框线宽度(Borders参数如下)

ole.ActiveSheet.Range("b3:

d3").Borders

(2).Weight=3

13.设置四个边框线条的类型

oExcel.ActiveSheet.Range("b3:

d3").Borders

(2).LineStyle=1

(其中Borders参数:

1-左、2-右、3-顶、4-底、5-斜、6-斜/;LineStyle值:

1与7-细实、2-细虚、4-点虚、9-双细实线)

14.设置页眉

oExcel.ActiveSheet.PageSetup.CenterHeader="报表1"

14.设置页眉(字体大小)

oExcel.ActiveSheet.PageSetup.CenterHeader="&50报表1"&&'&'后面的50可以自定义,表示字体的大小

15.设置页脚

oExcel.ActiveSheet.PageSetup.CenterFooter="第&P页"

15.设置页脚(字体大小)

oExcel.ActiveSheet.PageSetup.CenterFooter="&28第&P页"&&'&'后面的28可以自定义,表示字体的大小

16.设置页眉到顶端边距为2厘米

oExcel.ActiveSheet.PageSetup.HeaderMargin=2/0.035

17.设置页脚到底边距为3厘米

oExcel.ActiveSheet.PageSetup.FooterMargin=3/0.035

18.设置顶边距为2厘米

oExcel.ActiveSheet.PageSetup.TopMargin=2/0.035

19.设置底边距为4厘米

oExcel.ActiveSheet.PageSetup.BottomMargin=4/0.035

20.设置左边距为2厘米

oExcel.ActiveSheet.PageSetup.LeftMargin=2/0.035

21.设置右边距为2厘米

oExcel.ActiveSheet.PageSetup.RightMargin=2/0.035

22.设置页面水平居中

oExcel.ActiveSheet.PageSetup.CenterHorizontally=.t.

23.设置页面垂直居中

oExcel.ActiveSheet.PageSetup.CenterVertically=.t.

24.设置页面纸张大小(1-窄行851139-宽行14119:

A4)

oExcel.ActiveSheet.PageSetup.PaperSize=1

25.打印单元格网线

oExcel.ActiveSheet.PageSetup.PrintGridlines=.t.

26.拷贝整个工作表

oExcel.ActiveSheet.UsedRange.Copy

27.拷贝指定区域

oExcel.ActiveSheet.Range("A1:

E2").Copy

28.粘贴

oExcel.WorkSheet("Sheet2").Range("A1").PasteSpecial

29.在第2行之前插入一行

oExcel.ActiveSheet.Rows

(2).Insert

30.在第2列之前插入一列

oExcel.ActiveSheet.Columns

(2).Insert

31.设置字体

oExcel.ActiveSheet.Cells(2,1).Font.Name="黑体"

32.设置字体大小

oExcel.ActiveSheet.Cells(1,1).Font.Size=25

33.设置字体为斜体

oExcel.ActiveSheet.Cells(1,1).Font.Italic=.t.

34.设置整列字体为粗体

oExcel.ActiveSheet.Columns

(1).Font.Bold=.t.

35.清除单元格公式

oExcel.ActiveSheet.Cells(1,4).ClearContents

36.打印预览工作表

oExcel.ActiveSheet.PrintPreview

37.打印输出工作表

oExcel.ActiveSheet.PrintOut

38.oExcel.CommandBars

(1).Controls

(1).accChild(18).Execute&&打印(菜单序号18为Excel2003的‘打印’项)

&&不同版本Excel的菜单序号可以通过以下程序取得

*(需要在VFP7.0以上运行)

oXls=GETOBJECT("","excel.sheet")

XlApp=oXLS.APPLICATION

XlSheet=XlApp.ActiveSheet

bars=xlapp.CommandBars.COUNT

STR=''

FORi=1TObars

STR=STR+CHR(13)+ALLTRIM(STR(i))+'、'+xlapp.CommandBars(i).accName+'(NAME:

'+xlapp.CommandBars(i).NAME+'INDEX:

'+ALLTRIM(STR(xlapp.CommandBars(i).INDEX))+')'

bars2=mandbars(i).accChildCount

FORj=1TObars2

TRY

obj=mandbars(i).CONTROLS(j)

STR=STR+CHR(13)+''+ALLTRIM(STR(j))+'、'+mandbars(i).CONTROLS(j).accname+'(ID:

'+ALLTRIM(STR(xlapp.CommandBars(i).CONTROLS(j).ID))+')'

FORk=1TOobj.accChildCount

TRY

IFNOTEMPTY(obj.CONTROLS(k).accname)

STR=STR+CHR(13)+''+ALLTRIM(STR(k))+'、'+obj.CONTROLS(k).accName+'(ID:

'+ALLTRIM(STR(obj.CONTROLS(k).ID))+')'

ENDIF

CATCH

EXIT

ENDTRY

ENDFOR

CATCH

EXIT

ENDTRY

ENDFOR

WAITWINDOWSALLTRIM(STR(i))+'/'+ALLTRIM(STR(bars))+''+STR(i/bars*100,10,2)+'%'NOWAIT

ENDFOR

SAVETOXLS.txtALLLIKESTR

MODIFYCOMMANDXLS.txt

RETURN

39.工作表另存为

oExcel.ActiveWorkbook.SaveAs("c:

\temp\22.xls")

检测当前目录是否有同名的EXCEL表,如果有先删除,再另存

IF!

FILE(SYS(5)+CURDIR()+"result.xls")

oExcel.ActiveWorkbook.SaveAs(SYS(5)+CURDIR()+"result.xls")

ELSE

lcFileName=loExcel.GetSaveAsFilename("result","Excel(*.xls),*.xls")

IF!

EMPTY(lcFileName)

IFFILE(lcFileName)

DELETEFILE(lcFileName)

ENDIFoExcel.ActiveWorkbook.SaveAs(lcFileName)

ENDIF

ENDIF

40.放弃存盘&&避免出现保存对话框

oExcel.ActiveWorkbook.saved=.t.

41.存盘

oExcel.ActiveWorkbook.save

42.关闭工作簿

oExcel.Workbooks.close

43.退出Excel

oExcel.quit

RELEASEoExcel&&只有释放对象变量,EXCEL进程才会完全关闭

44.合并单元格

oExcel.ActiveSheet.Range("A4:

B5").MergeCells=.t.

45.下列设置大家自己理解

Withcrfole.ActiveSheet.PageSetup

.LeftHeader=chr(13)+"左页眉"

.CenterHeader="中页眉"

.RightHeader="右页眉"

.LeftFooter="左页脚"

.CenterFooter="中页脚"

.RightFooter="右页脚"

.orientation=1&&1竖排,2横排

EndWith

Withcrfole.Range("A4:

C4")

.MergeCells=.t.

.WrapText=.f.

.Orientation=0

.AddIndent=.f.

.ShrinkToFit=.f.

EndWith

46.文本对齐

oExcel.range("A4:

c4").HorizontalAlignment=1&&水平(1-默认、2-靠左、3-居中、4-靠右、5-填充、6=两端对齐、7=跨列居中、8=分散对齐)

oExcel.range("A4:

c4").VerticalAlignment=2&&垂直(1=靠上、2=居中、3=靠下、4=两端对齐、5=分散对齐)

47.拷贝整个工作表(含格式)

oExcel.activesheet.cells.copy&&拷贝

oExcel.sheets

(1).select&&选择第一工作表

oExcel.ActiveSheet.Paste&&粘贴

oExcel.ActiveSheet.Cells(3,4).value&&ActiveSheet为当前的Sheet工作薄名字,Cells(3,4).value为第3行第4列的值

以上控制调用语句在中文VFP5.0企业版下运行通过,运行环境为Excel97及中文Windows98

48.显示某个单元格的批注内容

oExcel=CREATEOBJECT("Excel.application")

oExcel.Workbooks.OPEN("d:

\TEST\testa.xls")

oExcel.VISIBLE=.T.

?

oExcel.Range("B5").Comment.Text&&显示B5单元格的批注内容

oExcel.Workbooks.CLOSE

oExcel.QUIT

RELEASEoExcel

49.oExcel.ActiveSheet.PageSetup.PrintTitleRows="$1:

$1"&&每页都打印行标头(每页顶部出现的单元格的行)

50.保护工作表:

oExcel.ActiveSheet.PROTECT('密码',.T.,.T.,.T.,.T.,.T.,.T.,.T.,.T.,.T.,.T.,.T.,.T.,.T.,.T.,.T.)

51.保护工作薄

oExcel.ActiveWorkbook.PROTECT('密码',.T.,.T.)

第一个.T.:

保护工作簿结构

第二个.T.:

保护工作簿窗口

52.设置允许用户编辑区域

oExcel.ActiveSheet.Protection.AllowEditRanges.Add("区域3",oExcel.ActiveSheet.Range("A2:

D5"))

53.如果不想在宏运行时被无穷无尽的提示和警告消息所困扰,就将本属性设置为.F.

oExcel.DisplayAlerts=.F.

如果不想在宏运行时被无穷无尽的提示和警告消息所困扰,就将本属性设置为False;这样每次出现需用户应答的消息时,MicrosoftExcel将选择默认应答。

如果将本属性设置为False,那么宏运行结束后,MicrosoftExcel并不自动将其设置回True。

故当宏运行结束后,都应将本属性设置回True值。

54.将当前工作表中的已用区域(只读)存入数组。

strPath='D:

\TEST\123.xls'

LOCALoExcel

oExcel=CREATEOBJECT("Excel.Application")

oExcel.WorkBooks.OPEN(strPath)

arrTableInfo=oExcel.ActiveSheet.UsedRange.VALUE&&将当前工作表中的已用区域(只读)存入数组。

oExcel.QUIT

RELEASEoExcel

INSERTINTO表名FROMarrTableInfo

55.设置excel批注的字体(excel2000实现了,如下:

ole.Range("a3").Comment.Shape.Select&&此命令要求批注的Visible=.t.

ole.selection.Font.size=9

ole.selection.Font.name="黑体"

ole.selection.Font.bold=.f.

注:

该组命令要求先选中批注框,否则写成ole.Range("a3").Comment.Shape.Font.size=9则出错,不知为何!

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

如何取得当前EXCEL表中工作表的数目及各工作表的名称?

CLEAR

LOCALlnSheetCount

oExcel=CREATEOBJECT("EXCEL.APPLICATION")&&创建Excel对象

oExcel.WORKBOOKS.OPEN("c:

\111\321.xls")&&打开指定工作簿

WITHoExcel

lnSheetCount=.WorkBooks

(1).Sheets.Count&&统计工作表数量

ENDWITH

?

'当前EXCEL表中工作表的数目为:

'+ALLTRIM(STR(lnSheetCount))

FOREACHoMyVarINoExcel.sheets

?

'当前EXCEL表中工作表的名称分别为'+oMyVar.name&&显示Excel表中所有工作表

NEXToMyVar

oExcel.WORKBOOKS.CLOSE&&关闭工作簿

oExcel.QUIT&&退出Excel

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

获取工作表名称

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

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

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

oExcel=CREATE("Excel.Application")

oExcel.Workbooks.ADD

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.Workbooks.add

&&添加工作簿

ef.Worksheets("sheet1").Activate

&&激活第一个工作表

ef.visible=.t.

&&显示Excel界面

ef.Cells.Select

&&选择整张表

ef.Selection.Font.Size=10

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

select0

useagcallop

&&选择被导出的表

num=reccount()

&&求导出总记录数

gotop

i=5

ef.range("F1:

K1").Select

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

ef.Selection.Merge

&&合并单元格

withef.range("F1")

&&设置标题及字体属性

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

.Font.Name="黑体"

.Font.size=18

endwith

ef.Rows

(2).RowHeight=1/0.035

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

ef.range("H2:

O2").Select

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

ef.Selection.Merge

&&合并单元格

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

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

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

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

ef.Selection.Merge

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

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

&&设置第一列标题内容

ef.Columns("A").Select

&&整列选择

ef.Selection.HorizontalAlignment=3

&&水平居中

ef.Columns("A:

B").Select

ef.Selection.NumberFormatLocal="@"

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

ef.Range("B3:

B4").Select

ef.Selection.Merge

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

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

&&设置第二列标题内容

ef.Columns("B").Select

&&整列选择

ef.Selection.HorizontalAlignment=3

&&水平居中

ef.Range("C3:

E3").Select

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

ef.Selection.Merge

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.Selection.Merge

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

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

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

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

ef.Range("I3:

K3").Select

ef.Selection.Merge

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

ef.Range("I

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

当前位置:首页 > 初中教育

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

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