合肥哪个澡堂招搓背工:在VFP中直接来控制Excel

来源:百度文库 编辑:偶看新闻 时间:2024/04/28 12:31:09

*!*VFP和Excel都可以用来进行处理数据库表格,如果巧妙地将二者的优点结合起来,将会大大方便我们的工作。比如我们可以利用VFP进行处理数据,而利用Excel的预览打印功能进行报表打印。这就需要我们在VFP中直接来控制Excel。下面就在开发VFP应用项目时对Excel的控制作一下介绍:

 oExcel=Createobject("Excel.application") &&创建Excel对象

 **对象属性

oExcel.Visible=.T.  &&显示Excel窗口

oExcel.Caption="VFP应用程序调用Microsoft Excel"  &&更改Excel标题栏

oExcel.DisplayAlerts = .F. &&关闭提示和警告消息,运行结束后,应将本属性设置回 True 值

oExcel.cells(1,4).Value=XM(XM为数据库字段名)  &&给单元格赋值

 **Workbooks属性

oExcel.Workbooks.Add  &&添加新工作簿

oExcel.Workbooks.Open("c:\temp\ll.xls")  &&打开指定工作簿

oExcel.Workbooks.Close  &&关闭工作簿

oExcel.Quit  &&退出Excel

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

 **Worksheets属性

oExcel.Worksheets("sheet3").Activate  &&设置第3个工作表为激活工作表

oExcel.Worksheets("Sheet1").Rows(18).PageBreak=1  &&在第18行之前插入分页符

oExcel.WorkSheet("Sheet2").Range("A1").PasteSpecial  &&粘贴

**ActiveWorkbook属性

oExcel.ActiveWorkbook.SaveAs("c:\temp\22.xls")  &&工作表另存为

oExcel.ActiveWorkbook.saved=.T.  &&放弃存盘,避免出现保存对话框

oExcel.ActiveWorkbook.Save  &&存盘

oExcel.ActiveWorkbook.Close(.F.)  &&关闭工作簿

oExcel.ActiveWorkbook.Protect('密码',.T.,.T.)  &&保护工作薄(第一个.T.:保护工作簿结构,第二个.T.:保护工作簿窗口)

 **ActiveSheet属性

oExcel.ActiveSheet.UsedRange.Copy  &&拷贝整个工作表

oExcel.ActiveSheet.PrintPreview  &&打印预览工作表

oExcel.ActiveSheet.PrintOut  &&打印输出工作表

oExcel.ActiveSheet.Protect('密码',.T.,.T.,.T.,.T.,.T.,.T.,.T.,.T.,.T.,.T.,.T.,.T.,.T.,.T.,.T.)  &&保护工作表

oExcel.ActiveSheet.Protection.AllowEditRanges.Add("区域3",oExcel.ActiveSheet.Range("A2:D5")) &&设置允许用户编辑区域

  **表格列属性

oExcel.ActiveSheet.Columns(2).Insert  &&在第2列之前插入一列

oExcel.ActiveSheet.Columns(1).ColumnWidth=5  &&设置指定列的宽度(单位:字符个数)

oExcel.ActiveSheet.Columns(4).PageBreak=0  &&在第4列之前删除分页符

oExcel.ActiveSheet.Columns(1).Font.Bold=.T.  &&设置整列字体为粗体

 **表格行属性

oExcel.ActiveSheet.Rows(2).Insert  &&在第2行之前插入一行

oExcel.ActiveSheet.Rows(1).RowHeight=1  &&设置指定行的高度(单位:磅)(设定行高为 1磅 , 1磅 =0.035厘米)

oExcel.ActiveSheet.Rows("50:100").RowHeight=1 &&设置第50行至100行的高度

  **表格范围属性

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=分散对齐)

oExcel.Range("A4:C4").WrapText =.F.  &&文本自动换行

oExcel.ActiveSheet.Range("A4:B5").Merge=.T.  &&合并单元格

oExcel.ActiveSheet.Range("A1:E2").Copy  &&拷贝指定区域

oExcel.ActiveSheet.Range("b3:d3").BorderS(2).Weight=3  &&指定边框线宽度(Borders参数如下)

oExcel.ActiveSheet.Range("b3:d3").BorderS(2).LineStyle=1  &&设置四个边框线条的类型

&&(其中Borders参数:1-左、2-右、3-顶、4-底、5-斜、6-斜/;LineStyle值:1与7-细实、2-细虚、4-点虚、9-双细实线)

  **页面设置

WITH oExcel.ActiveSheet.PageSetup

    .CenterHeader="报表1"  &&设置页眉

    .CenterHeader="&50报表1" &&设置页眉(字体大小),'&'后面的50可以自定义,表示字体的大小

    .CenterFooter="第&P页"  &&设置页脚(LeftFoot:居左,CenterFooter:居中,RightFooter:居右)

    .CenterFooter="&28第&P页  共&N页"  &&设置页脚(字体大小),'&'后面的28可以自定义,表示字体的大小

    .HeaderMargin=2/0.035  &&设置页眉到顶端边距为2厘米

    .FooterMargin=3/0.035  &&设置页脚到底边距为3厘米

    .TopMargin=2/0.035  &&设置顶边距为2厘米

    .BottomMargin=4/0.035  &&设置底边距为4厘米

    .LeftMargin=2/0.035  &&设置左边距为2厘米

    .RightMargin=2/0.035  &&设置右边距为2厘米

    .CenterHorizontally=.T.  &&设置页面水平居中

    .CenterVertically=.T.  &&设置页面垂直居中

    .Papersize=1  &&设置页面纸张大小(1-窄行8511 39-宽行1411 9:A4)

    .Orientation=1  &&设置纸张方向(1-竖向,2-横向)

    .PrintTitleRows="$1:$2"  &&设置顶端标题行,(每页都打印行标头(每页顶部出现的单元格的行))

    .PrintGridlines=.T.  &&打印单元格网线

    .Zoom=75  &&设置缩放比例为75%

ENDWITH 

  **单元格设置

WITH oExcel.ActiveSheet.Cells(1,1)  &&第一行第一列单元格

    .Font.Name="黑体"  &&字体名字

    .Font.Size=25  &&大小

    .Font.Italic=.T.  &&为斜体(Bold-粗体)

    .Value="数值"  &&给单元格赋值

    .ClearContents  &&清除单元格公式

ENDWITH

  *以下为一些过程

*检测当前目录是否有同名的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)

        If File(lcFileName)

            Delete File (lcFileName)

        Endif

        oExcel.ActiveWorkbook.SaveAs(lcFileName)

    Endif

Endif

*!*拷贝整个工作表(含格式)

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列的值

 *!* 显示某个单元格的批注内容

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

Release oExcel

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

strPath='D:\TEST\123.xls'

Local oExcel

oExcel=Createobject("Excel.Application")

oExcel.WorkBooks.Open(strPath)

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

oExcel.Quit

Release oExcel

Insert Into 表名 From arrTableInfo

  *!* 设置excel批注的字体(excel 2000实现了,如下:)

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

Local lnSheetCount

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

oExcel.WORKBOOKS.Open("c:\111\321.xls") &&打开指定工作簿

With oExcel

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

Endwith

'当前EXCEL表中工作表的数目为:'+Alltrim(Str(lnSheetCount))

For Each oMyVar In oExcel.sheets

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

Next oMyVar

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

oExcel.Quit &&退出Excel

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

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

oExcel=Createobject('Excel.application')

oExcel.Workbooks.Open("d:\22.xls")

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

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

oExcel.Workbooks.Open("d:\22.xls",.F.,.F., ,"123","456")

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

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

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

oExcel.ActiveSheet.PictureS.Insert("图片文件名")

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

oExcel.SHEETS(1).Select

oExcel.Range("位置").Select

oExcel.ActiveSheet.PictureS.Insert("图片文件名")).Select

oExcel.Selection.ShapeRange.LockAspectRatio =.T.

oExcel.Selection.ShapeRange.Height = 57

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

*!* 方法1.在字符串前面加半角单引号“ ' ”,

*!* 例如:

oExcel.Cells(1,1).Value="'0123"

*!* 或用变量

cString="'"+"0123"   &&其中0123可以取自表中一个字段

oExcel.Cells(1,1).Value=cString   &&o.Range("A1:A1").value=cString

*!* 方法2.

oExcel.CELLS(1,1).Select   &&或eole.Range("A1:E1").Select

oExcel.Selection.NumberFormatLocal = "@"   &&把被选定的单元格设为文本格式

oExcel.Cells(1,1).Value="0123"   &&给所选单元格覆值

*!* 获取 Excel 记录数

loXls = Createobject("excel.application")

bookExcel = loXls.Application.Workbooks.Open("f:\pz.xls")

nrows=bookExcel.Worksheets('pz')

UsedRange =nrows.UsedRange

r=UsedRange.Rows.Count &&有数据的总行数

c=UsedRange.Columns.Count &&有数据的总列数

loXls.Workbooks.Close

loXls.Quit

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

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

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

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

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

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

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

  *!* 如何才能只粘贴值呢

xlPasteValues=-4163

oExcel.Range("A1").Select

oExcel.Selection.Copy

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

*注意:在Excel 中,"xlPasteValues"是一个常量,它的值是一个数值型的:-4163

oExcel.Range("A1").Copy

oExcel.Range("B3").PasteSpecial(8) &&粘贴行、列宽

oExcel.Range("B3").PasteSpecial(-4122) &&粘贴格式

 *!* 本程序通过将原dbf表拷成excel格式,然后导入并设置报表格式

Para tablename

Local hb1 As excel.Application

Wait "正在导出数据,请稍侯……" Window At 20,30 Timeout 1

bhaveerror=.F. &&定义一个变量判断是否发生错误

Try

    hb1=Createobject("excel.application")

Catch

    Messagebox("请检查你是否已安装microsoft excel应用程序!",0,"提示")

    bhaveerror=.T.

Endtry

If bhaveerror=.T.

    Return

Endif

If Right(curr_path,1)<>'\'

    curr_path=curr_path+"\"

Endif

ctablename=tablename+"_excel"

filepath=curr_path+"temp\sheet1.xls"

*filepath="temp\sheet1.xls"

If !File(filepath)

    Messagebox("数据源的excel文件未生成,报表生成被终止!")

    Return

Endif

HB1.workbooks.Open(filepath)

HB1.SHEETS("sheet1").Select

hb1.sheets(1).Rows(1).entirerow.Insert

hb1.sheets(1).Rows(1).entirerow.Insert

Sele (ctablename)

nfieldcount=Fcount()

nreccount=Reccount()

hbdygs="A1:"+Chr(nfieldcount+64)+"2"

HB1.Range(hbdygs).Select

****合并两行作为报表标题*************

HB1.Selection.HorizontalAlignment = 3 &&水平方向 2左对齐,3居中,4右对齐

HB1.Selection.VerticalAlignment = 2 &&垂直方向 1靠上,2居中,3靠下

HB1.Selection.WrapText = .F. && ??

HB1.Selection.Orientation = 0 && ??

HB1.Selection.AddIndent = .F. && ??

HB1.Selection.ShrinkToFit = .F. && ??

HB1.Selection.MergeCells = .T. && ??

HB1.Range(hbdygs).FormulaR 1C 1 = "请输入报表标题"

HB1.Range(hbdygs).Characters.Font.Name = "隶书"

HB1.Range(hbdygs).Characters.Font.FontStyle = "常规"

HB1.Range(hbdygs).Characters.Font.ColorIndex = 1 &&字符颜色

***根据数据源表结构的宽度设置列的宽度********

Copy Stru Exte To temp\term_stru

Sele 0

Use temp\term_stru

Select (ctablename)

For i=1 To nfieldcount

    cvalue=Allt(Field(i))

    Select term_stru

    Loca For Lower(Allt(field_name))==cvalue

    If Found()

        columnname=Chr(i+64)+":"+Chr(i+64)

        hb1.Columns(columnname).ColumnWidth=field_len

    Endif

    Sele (ctablename)

Endfor

Sele term_stru

Use

activecellname=Chr(nfieldcount+64)+Allt(Str(nreccount+3))

*************设置数据区域的字体格式***************

HB1.Range("A3:"+activecellname).Characters.Font.Name = "宋体"

HB1.Range("A3:"+activecellname).Characters.Font.Size= 9

HB1.Range("A3:"+activecellname).Select

hb1.Selection.BorderS(1).LineStyle = .T.

hb1.Selection.BorderS(2).linestyle = .T.

hb1.Selection.BorderS(3).linestyle = .T.

hb1.Selection.BorderS(4).linestyle = .T.

hb1.ActiveWorkbook.SaveAs("c:\aa.xls")

hb1.Application.Visible=.T.

* HB1.ACTIVEWORKBOOK.SAVE &&自动保存数据

* HB1.ACTIVEWORKBOOK.CLOSE &&关闭当前工作簿

* HB1.QUIT

 

*!* 复制Sheet工作表

EFILENAME='D:\你的Excel表名.XLS'

oExcel=Createobject("Excel.application")

oExcel.Workbooks.Open("&EFILENAME")

oExcel.Visible=.T.

oExcel.SHEETS(1).Select

oExcel.SHEETS(1).Copy(Null,oExcel.SHEETS(1)) &&&&把第1个工作表复制到第1个工作表之后

oExcel.SHEETS(2).Name='NewSheetName' &&设置第2个工作表名称

*!*oExcel.SHEETS(1).COPY(oExcel.SHEETS(1),NULL) &&&&把第1个工作表复制到第1个工作表之前

*!*oExcel.SHEETS(1).NAME='NewSheetName' &&设置第1个工作表名称

 

*!* 如何将DBF中内容COPY到EXCEL的指定区域

例如我有一个DBF:

Name_F Sl_f

Mike 546

kyle 200

想将这个内容转到EXCEL里面的E1:F2区域!

Use 表名

_vfp.DataToClip('表名',Reccount(),3) &&将一组记录作为文本复制到剪贴板上,3使用制表符分隔字段。

oexl=Createobject('excel.application') &&创建电子表格

oexl.Visible=.T. &&使电子表格可见

oexl.workbooks.Add &&创建工作簿

With oexl

    .Range("E1:F2").Select &&根据你的表中的记录数和字段数调整此项中的'F2'

    .ActiveSheet.Paste

Endwith