在VFP中直接来控制Excel.doc_第1页
在VFP中直接来控制Excel.doc_第2页
在VFP中直接来控制Excel.doc_第3页
在VFP中直接来控制Excel.doc_第4页
在VFP中直接来控制Excel.doc_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

在VFP中直接来控制Excel*!*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:templl.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:temp22.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窄行8511 39宽行1411 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:TESTtesta.xls) oExcel.Visible=.T. ?oExcel.Range(B5).Comment.Text &显示B5单元格的批注内容 oExcel.Workbooks.Close oExcel.Quit Release oExcel *!* 将当前工作表中的已用区域(只读)存入数组。 strPath=D:TEST123.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:111321.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+tempsheet1.xls *filepath=tempsheet1.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 tempterm_stru Sele 0 Use tempterm_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.B

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论