VFP与Excel交互编程
用VisualFoxpro设计用Excel表格的程序
用VisualFoxpro设计用Excel表格的程序一、用Visual Foxpro 设计用Excel表格的程序利用OLE Automation 设计Excel 应用程序Excel支持的对象说明:(a) VBA 对象:Application Excel应用程序对象WorkBooks Excel活页薄对象(b)所使用的MethodApplication Cells 设定或传回来某个网格的内容Range 传回或设定某一个范围的网格Charts 传回或设定活页簿的单一统计表Quit 结束Excel ApplicationSave 激活存储文件对话框WorkBooks Add 新增一个工作簿Charts Add 新增一个统计图所使用的PropertyApplication Visible 是否现实再SCREEN上.T. , .F.Value 传回或者设定存储文件的内容ActiveSheet 回应Excel Application 执行工作表对象实例说明:启动Excel:MyExcel=CreateObject('Excel.Application') &&建立Excel对象MyExcel.Visible=.T. &&让Excel对象再屏幕上显示出来如何增加工作簿:MyExcel.WorkBooks.Add &&在Excel对象中增加一份工作簿(WorkBook)如何在工作簿中增加Sheet(工作表)MyExcel.Sheets.Add &&增加工作表(在当前工作簿中)如何删除工作表MyExcel.ActiveWorkBooks.Sheets(1).Delete &&把工作簿中的BOOK(1)删除向指定的工作簿中的工作表(Sheet)中存储数据*Excel.application Object*Excel.application.ActiveWorkBook Property*WorkBOoks Object*WorkBOoks Object的Add Method.*Sheets对象*Sheets(Index)对象指定索引工作表*Excel.Application对象的Cells Method结合Value属性Example:CLEAR ALLSET PA TH TO SYS(2004)+'SAMPLES\DATE'USE CUSTOMERMYEXCEL=CREA TEOBJEXT('EXCEL.APPLICA TION')MYEXCEL.VISIBLE=.T.MYEXCEL.WORKBOOKS.ADDMYEXCEL.ACTIVEWORKBOOK.SHEETS(1).CELLS(1,1).V ALUE='客户编号'MYEXCEL.ACTIVEWORKBOOK.SHEETS(1).CELLS(1,2).V ALUE='公司行号'SELECT CUSTOMERR=2C=1GOTO TOPFOR I=1 TO 20MYEXCEL.ACTIVEWORKBOOK.SHEETS(1).CELLS(R,C).V ALUE=CUSTOMER.CUST_IDMYEXCEL.ACTIVEWORKBOOK.SHEETS(1).CELLS(R,C+1).V ALUE=/doc/5c5714365.html,PANY R=R+1SKIPENDFOR调整单元格宽度:MYEXCEL.ACTIVEWORKBOOK.SHEETS(1).CELLS(1,1).column width=30调整单元格对齐方式:MYEXCEL.ACTIVEWORKBOOK.SHEETS(1).CELLS(1,1).horizont alalig=11为默认方式,2为左对齐,3为中对齐,4为右对齐。
VFP全面控制EXCEL(完全版)
1.创建Excel对象oExcel=Createobject("Excel.application")2.添加新工作簿oExcel.Workbooks.Add3.设置第3个工作表为激活工作表oExcel.Worksheets("sheet3").Activate4.打开指定工作簿oExcel.Workbooks.Open("c:\temp\ll.xls")5.显示Excel窗口oExcel.Visible=.T.6.更改Excel标题栏oExcel.Caption="VFP应用程序调用Microsoft Excel"7.给单元格赋值oExcel.cells(1,4).Value=XM(XM为数据库字段名)8.设置指定列的宽度(单位:字符个数)oExcel.ActiveSheet.Columns(1).ColumnWidth=59.设置指定行的高度(单位:磅)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=111.在第4列之前删除分页符oExcel.ActiveSheet.Columns(4).PageBreak=012.指定边框线宽度(Borders参数如下)ole.ActiveSheet.Range("b3:d3").BorderS(2).Weight=313.设置四个边框线条的类型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"15.设置页眉(字体大小)oExcel.ActiveSheet.PageSetup.CenterHeader="&50报表1" &&'&'后面的50可以自定义,表示字体的大小16.设置页脚oExcel.ActiveSheet.PageSetup.CenterFooter="第&P页"17.设置页脚(字体大小)oExcel.ActiveSheet.PageSetup.CenterFooter="&28第&P页" &&'&'后面的28可以自定义,表示字体的大小18.设置页眉到顶端边距为2厘米oExcel.ActiveSheet.PageSetup.HeaderMargin=2/0.03519.设置页脚到底边距为3厘米oExcel.ActiveSheet.PageSetup.FooterMargin=3/0.03520.设置顶边距为2厘米oExcel.ActiveSheet.PageSetup.TopMargin=2/0.03521.设置底边距为4厘米oExcel.ActiveSheet.PageSetup.BottomMargin=4/0.03522.设置左边距为2厘米oExcel.ActiveSheet.PageSetup.LeftMargin=2/0.03523.设置右边距为2厘米oExcel.ActiveSheet.PageSetup.RightMargin=2/0.03524.设置页面水平居中oExcel.ActiveSheet.PageSetup.CenterHorizontally=.T. 25.设置页面垂直居中oExcel.ActiveSheet.PageSetup.CenterVertically=.T.26.设置页面纸张大小(1-窄行8511 39-宽行1411 9:A4) oExcel.ActiveSheet.PageSetup.Papersize=127.打印单元格网线oExcel.ActiveSheet.PageSetup.PrintGridlines=.T.28.拷贝整个工作表edRange.Copy29.拷贝指定区域oExcel.ActiveSheet.Range("A1:E2").Copy30.粘贴oExcel.WorkSheet("Sheet2").Range("A1").PasteSpecial 31.在第2行之前插入一行oExcel.ActiveSheet.Rows(2).Insert32.在第2列之前插入一列oExcel.ActiveSheet.Columns(2).Insert33.设置字体oExcel.ActiveSheet.Cells(2,1)="黑体"34.设置字体大小oExcel.ActiveSheet.Cells(1,1).Font.Size=2535.设置字体为斜体oExcel.ActiveSheet.Cells(1,1).Font.Italic=.T.36.设置整列字体为粗体oExcel.ActiveSheet.Columns(1).Font.Bold=.T.37.清除单元格公式oExcel.ActiveSheet.Cells(1,4).ClearContents38.打印预览工作表oExcel.ActiveSheet.PrintPreview39.打印输出工作表oExcel.ActiveSheet.PrintOut40. mandBars(1).Controls(1).accChild(18).Execute &&打印(菜单序号18为Excel2003的‘打印’项)&&不同版本Excel的菜单序号可以通过以下程序取得*(需要在VFP7.0以上运行)oXls=Getobject("","excel.sheet")XlApp=oXLS.ApplicationXlSheet=XlApp.ActiveSheetbars=mandBars.CountStr1=''For i=1 To barsStr1=Str1+Chr(13)+Alltrim(Str(i))+'、'+mandBars(i).accName+'(NAME:'+mandBars(i).Name+'INDEX:'+Alltrim(Str(mandBars(i).Index))+')'bars2=mandbars(i).accChildCountFor j=1 To bars2Tryobj=mandbars(i).Controls(j)Str1=Str1+Chr(13)+' '+Alltrim(Str(j))+'、'+mandbars(i).Controls(j).accname+'(ID:'+Alltrim(Str(mandBars(i).Controls( j).Id))+')'For k=1 To obj.accChildCountTryIf Not Empty(obj.Controls(k).accname )Str1=Str1+Chr(13)+' '+Alltrim(Str(k))+'、'+obj.Controls(k).accName+' (ID:'+ Alltrim(Str(obj.Controls(k).Id))+')'EndifCatchExitEndtryEndforCatchExitEndtryEndforWait Windows Alltrim(Str(i))+' / '+Alltrim(Str(bars))+' '+Str(i/bars*100,10,2)+'%' Nowait EndforSave To Xls.txt All Like Str1Modify Command Xls.txtReturn41.工作表另存为oExcel.ActiveWorkbook.SaveAs("c:\temp\22.xls")*检测当前目录是否有同名的EXCEL表,如果有先删除,再另存If !File(Sys(5) + Curdir() + "result.xls")oExcel.ActiveWorkbook.SaveAs(Sys(5) + Curdir() + "result.xls")ElselcFileName = loExcel.GetSaveAsFilename("result", "Excel (*.xls), *.xls") If !Empty(lcFileName)If File(lcFileName)Delete File (lcFileName)EndifoExcel.ActiveWorkbook.SaveAs(lcFileName)EndifEndif42.放弃存盘 && 避免出现保存对话框oExcel.ActiveWorkbook.saved=.T.43.存盘oExcel.ActiveWorkbook.Save44.关闭工作簿oExcel.Workbooks.Closeobjexcel.activeworkbook.Close(.F.)45.退出ExceloExcel.QuitRelease oExcel &&只有释放对象变量, EXCEL进程才会完全关闭46.合并单元格oExcel.ActiveSheet.Range("A4:B5").MergeCells=.T.47.下列设置大家自己理解With crfole.ActiveSheet.PageSetup.LeftHeader = Chr(13)+"左页眉".CenterHeader = "中页眉".RightHeader = "右页眉".LeftFooter = "左页脚".CenterFooter = "中页脚".RightFooter = "右页脚".Orientation=1 &&1竖排,2横排EndwithWith crfole.Range("A4:C4").MergeCells = .T..WrapText =.F..Orientation = 0.AddIndent =.F..ShrinkToFit = .F.Endwith48.文本对齐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=分散对齐)49.拷贝整个工作表(含格式)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企业版下运行通过,运行环境为Excel 97及中文Windows 98 50.显示某个单元格的批注内容oExcel=Createobject("Excel.application")oExcel.Workbooks.Open("d:\TEST\testa.xls")oExcel.Visible=.T.?oExcel.Range("B5").Comment.Text &&显示B5单元格的批注内容oExcel.Workbooks.CloseoExcel.QuitRelease oExcel51.oExcel.ActiveSheet.PageSetup.PrintTitleRows="$1:$1" &&每页都打印行标头(每页顶部出现的单元格的行)52.保护工作表:oExcel.ActiveSheet.Protect('密码',.T.,.T.,.T.,.T.,.T.,.T.,.T.,.T.,.T.,.T.,.T.,.T.,.T.,.T.,.T.)53.保护工作薄oExcel.ActiveWorkbook.Protect('密码',.T.,.T.)第一个.T.:保护工作簿结构第二个.T.:保护工作簿窗口54.设置允许用户编辑区域oExcel.ActiveSheet.Protection.AllowEditRanges.Add("区域3",oExcel.ActiveSheet.Range("A2:D5"))55.如果不想在宏运行时被无穷无尽的提示和警告消息所困扰,就将本属性设置为.F.oExcel.DisplayAlerts = .F.如果不想在宏运行时被无穷无尽的提示和警告消息所困扰,就将本属性设置为 False;这样每次出现需用户应答的消息时,Microsoft Excel 将选择默认应答。
VFP全面控制EXCEL
最近正好有空,看到不少人对VFP控制EXCEL有兴趣,现将上次的“精华贴"重新整理一下,供各位爱好者参考!oExcel。
Selection。
NumberFormatLocal = "@" &&把被选定的单元格设为文本格式1、对象的创建与关闭*******************************eole=CREATEOBJECT('Excel.application') &&创建Excel对象eole.Workbooks。
add && 添加新工作簿eole。
Worksheets(”sheet3").Activate &&设置第3个工作表为激活工作表eole。
Workbooks。
Open(”D:\ABC\11.xls”) &&打开指定工作簿eole。
visible=。
t. && 显示Excel窗口eole。
visible=。
F。
&& 不显示Excel窗口eole。
Caption="VFP应用程序调用Microsoft Excel”&&更改Excel标题栏eole。
ActiveWorkbook.SaveAs(”D:\ABC\22。
xls") &&工作表另为eole。
ActiveWorkbook。
saved=。
t. && 放弃存盘eole。
edRange。
Copy && 拷贝整个工作表eole。
ActiveSheet。
Range("A1:E2”)。
Copy &&拷贝指定区域eole.WorkSheet("Sheet2”)。
Range(”A1").PasteSpecial &&粘贴eole。
ActiveWorkbook.Save && 存盘(自动存盘不提问)eole。
Workbooks.close &&关闭工作簿eole。
VFP 控制 EXCEL 的方法(最全)(DOC)
新编 VFP 控制 EXCEL 的方法最近正好有空,看到不少人对VFP控制EXCEL有兴趣,现将上次的"精华贴"重新整理一下,供各位爱好者参考!1、对象的创建与关闭 *******************************eole=CREATEOBJECT('Excel.application') && 创建Excel对象eole.Workbooks.add && 添加新工作簿eole.Worksheets("sheet3").Activate && 设置第3个工作表为激活工作表eole.Workbooks.Open("D:\ABC\11.xls") && 打开指定工作簿eole.visible=.t. && 显示Excel窗口eole.visible=.F. && 不显示Excel窗口eole.Caption="VFP应用程序调用Microsoft Excel" && 更改Excel标题栏eole.ActiveWorkbook.SaveAs("D:\ABC\22.xls") && 工作表另为eole.ActiveWorkbook.saved=.t. && 放弃存盘edRange.Copy && 拷贝整个工作表eole.ActiveSheet.Range("A1:E2").Copy && 拷贝指定区域eole.WorkSheet("Sheet2").Range("A1").PasteSpecial && 粘贴eole.Sheets.Count &&sheets的数量eole.Sheets.item(1).cell(1,1) &&sheet1的单元格存取(无需激活)eole.ActiveWorkbook.Save && 存盘(自动存盘不提问)eole.Workbooks.close && 关闭工作簿eole.quit && 退出Excel2、单元格的设置 ***********************************eole.ActiveSheet.Columns("D:D").Delete && 删除列eole.ActiveSheet.Columns("A:B").Delete && 删除列eole.ActiveSheet.Columns(1).ColumnWidth=20 && 列的宽度(单位:字符个数) eole.ActiveSheet.Columns(2).ColumnWidth=30eole.ActiveSheet.Columns("C:BE").ColumnWidth=9.5eole.Selection.Columns.AutoFit && 最适合的列宽eole.ActiveSheet.Range("b3:d3").Borders(2).Weight=3 && 指定边框线宽度(其中Borders参数:1-左、2-右、3-顶、4-底、5-斜、6-斜/;LineStyle值:1与7-细实、2-细虚、4-点虚、9-双细实线)eole.ActiveSheet.Range("A1:BE29").Borders(1).LineStyle=1 && 设置四个边框线条的类型eole.ActiveSheet.Range("A1:BE29").Borders(2).LineStyle=1 && 设置四个边框线条的类型eole.ActiveSheet.Range("A1:BE29").Borders(3).LineStyle=1 && 设置四个边框线条的类型eole.ActiveSheet.Range("A1:BE29").Borders(4).LineStyle=1 && 设置四个边框线条的类型eole.ActiveSheet.Rows(1).Insert && 在第1行之前插入一行eole.ActiveSheet.Columns(2).Insert && 在第2列之前插入一列eole.cells(1,2).value="ABTMC" && 给单元格赋值eole.cells(2,2).value="&BBBB" && 给单元格赋值eole.ActiveSheet.Cells(1,4).ClearContents && 清除单元格公式eole.cells(1,2).value="ABTMC"+CHR(10)+"ABTMC" && 单元格内强制换行eole.ActiveSheet.Rows(1).RowHeight=1/0.035 && 设置指定行的高度(单位:磅) *(行高为1厘米,1磅=0.035厘米) eole.ActiveSheet.ROWS(1)="黑体" && 设置字体eole.ActiveSheet.ROWS(1).Font.Size=14 && 设置字体大小eole.ActiveSheet.ROWS(1).Font.Bold=.t. && 设置整行字体为粗体eole.ActiveSheet.Cells(1,1).Font.Italic=.t. && 设置字体为斜体eole.ActiveSheet.ROWS(1).Font.Underline = .t. && 设置下划线eole.ActiveSheet.ROWS(1).Font.FontStyle = "常规" && 字形eole.ActiveSheet.ROWS(1).Font.OutlineFont = .t. && 删除线----------------------取数据的一部分进行操作-----------------eole.ActiveSheet.Cells(1,1).Characters(3,2).Font.Bold= .T. &&取单元格数值的一部分进行设定,其中3为取得的起始位置,2为取得的字符个数。
Visual Foxpro中如何实现对EXCEL表格的操作
Visual Foxpro中如何实现对EXCEL表格的操作VFP和Excel都可以用来进行处理数据库表格,如果巧妙地将二者的优点结合起来,将会大大方便我们的工作。
比如我们可以利用VFP进行处理数据,而利用Excel的预览打印功能进行报表打印。
这就需要我们在VFP中直接来控制Excel。
下面就在开发VFP 应用项目时对Excel的控制作一下介绍:1.创建Excel对象oExcel=CREA TEOBJECT("Excel.application")2.添加新工作簿oExcel.Workbooks.add3.设置第3个工作表为激活工作表oExcel.Worksheets("sheet3").Activate4.打开指定工作簿oExcel.Workbooks.Open("c:\temp\ll.xls")5.显示Excel窗口oExcel.visible=.t.6.更改Excel标题栏oExcel.Caption="VFP应用程序调用Microsoft Excel" 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=012.指定边框线宽度(Borders参数如下)ole.ActiveSheet.Range("b3:d3").Borders(2).Weight=3 13.设置四个边框线条的类型oExcel.ActiveSheet.Range("b3:d3").Borders(2).LineSty le=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.03519.设置底边距为4厘米oExcel.ActiveSheet.PageSetup.BottomMargin=4/0.035 20.设置左边距为2厘米oExcel.ActiveSheet.PageSetup.LeftMargin=2/0.03521.设置右边距为2厘米oExcel.ActiveSheet.PageSetup.RightMargin=2/0.035 22.设置页面水平居中oExcel.ActiveSheet.PageSetup.CenterHorizontally=.t.23.设置页面垂直居中oExcel.ActiveSheet.PageSetup.CenterV ertically=.t.24.设置页面纸张大小(1-窄行8 5 11 39-宽行14 11 9:A4)oExcel.ActiveSheet.PageSetup.PaperSize=125.打印单元格网线oExcel.ActiveSheet.PageSetup.PrintGridlines=.t.26.拷贝整个工作表edRange.Copy27.拷贝指定区域oExcel.ActiveSheet.Range("A1:E2").Copy28.粘贴oExcel.WorkSheet("Sheet2").Range("A1").PasteSpecial 29.在第2行之前插入一行oExcel.ActiveSheet.Rows(2).Insert30.在第2列之前插入一列oExcel.ActiveSheet.Columns(2).Insert31.设置字体oExcel.ActiveSheet.Cells(2,1)="黑体"32.设置字体大小oExcel.ActiveSheet.Cells(1,1).Font.Size=2533.设置字体为斜体oExcel.ActiveSheet.Cells(1,1).Font.Italic=.t.134.设置整列字体为粗体oExcel.ActiveSheet.Columns(1).Font.Bold=.t.35.清除单元格公式oExcel.ActiveSheet.Cells(1,4).ClearContents36.打印预览工作表oExcel.ActiveSheet.PrintPreview37.打印输出工作表oExcel.ActiveSheet.PrintOut38.mandBars(1).Controls(1).accChild(18).Exe cute &&打印(菜单序号18为Excel2003的‘打印’项)&&不同版本Excel的菜单序号可以通过以下程序取得*(需要在VFP7.0以上运行)oXls=GETOBJECT("","excel.sheet")XlApp=oXLS.APPLICA TIONXlSheet=XlApp.ActiveSheetbars=mandBars.COUNTSTR=''FOR i=1 TO barsSTR=STR+CHR(13)+ALLTRIM(STR(i))+'、'+mandBars(i).accName+'(NAME:'+xlapp.C ommandBars(i).NAME+'INDEX:'+ALLTRIM(STR(mandBars(i).IND EX))+')'bars2=mandbars(i).accChildCountFOR j=1 TO bars2TRYobj=mandbars(i).CONTROLS(j)STR=STR+CHR(13)+''+ALLTRIM(STR(j))+'、'+mandbars(i).CONTROLS(j).accname+'(ID: '+ALLTRIM(STR(mandBars(i).CONTROL S(j).ID))+')'FOR k=1 TO obj.accChildCountTRYIF NOT EMPTY(obj.CONTROLS(k).accname )STR=STR+CHR(13)+''+ALLTRIM(STR(k))+'、'+obj.CONTROLS(k).accName+' (ID:'+ ALLTRIM(STR(obj.CONTROLS(k).ID))+')'ENDIFCA TCHEXITENDTRYENDFORCA TCHEXITENDTRYENDFORW AIT WINDOWS ALLTRIM(STR(i))+' / '+ALLTRIM(STR(bars))+''+STR(i/bars*100,10,2)+'%' NOW AITENDFORSA VE TO XLS.txt ALL LIKE STRMODIFY COMMAND XLS.txtRETURN39.工作表另存为oExcel.ActiveWorkbook.SaveAs("c:\temp\22.xls")检测当前目录是否有同名的EXCEL表,如果有先删除,再另存IF !FILE(SYS(5) + CURDIR() + "result.xls")oExcel.ActiveWorkbook.SaveAs(SYS(5) + CURDIR() + "result.xls")ELSElcFileName = loExcel.GetSaveAsFilename("result", "Excel (*.xls), *.xls")IF !EMPTY(lcFileName)IF FILE(lcFileName)DELETE FILE (lcFileName)ENDIFoExcel.ActiveWorkbook.SaveAs(lcFileName)ENDIFENDIF40.放弃存盘&& 避免出现保存对话框oExcel.ActiveWorkbook.saved=.t.41.存盘oExcel.ActiveWorkbook.save42.关闭工作簿oExcel.Workbooks.close43.退出ExceloExcel.quitRELEASE oExcel &&只有释放对象变量, EXCEL进程才会完全关闭44.合并单元格oExcel.ActiveSheet.Range("A4:B5").MergeCells=.t.45.下列设置大家自己理解With crfole.ActiveSheet.PageSetup.LeftHeader = chr(13)+"左页眉"2.CenterHeader = "中页眉".RightHeader = "右页眉".LeftFooter = "左页脚".CenterFooter = "中页脚".RightFooter = "右页脚".orientation=1 &&1竖排,2横排EndWithWith crfole.Range("A4:C4").MergeCells = .t..WrapText =.f..Orientation = 0.AddIndent =.f..ShrinkToFit = .f.EndWith46.文本对齐oExcel.range("A4:c4").HorizontalAlignment =1 &&水平(1-默认、2-靠左、3-居中、4-靠右、5-填充、6=两端对齐、7=跨列居中、8=分散对齐)oExcel.range("A4:c4").V erticalAlignment =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企业版下运行通过,运行环境为Excel 97及中文Windows 9848. 显示某个单元格的批注内容oExcel=CREA TEOBJECT("Excel.application") oExcel.Workbooks.OPEN("d:\TEST\testa.xls") oExcel.VISIBLE=.T.?oExcel.Range("B5").Comment.Text &&显示B5单元格的批注内容oExcel.Workbooks.CLOSEoExcel.QUITRELEASE oExcel49.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;这样每次出现需用户应答的消息时,Microsoft Excel 将选择默认应答。
vfp与excel的结合
set safe offif used('qxjl')sele qxjlelsesele 0use qxjlendifzapxh=3tmpsheet = GetObject('','excel.sheet')XLApp = tmpsheet.applicationXLBOOK=XLApp.WorkBooks.open('c:\zlgl\qxjl.xls')XLApp.Worksheets('缺陷明细').ActivateXLSheet = XLApp.ActiveSheetxlapp.visible=.t.XH=1*!* DO WHILE .T.*!* DDA=XLSheet.Cells(XH,1).Value*!* IF LEN(ALLTRIM(DDA))>0*!* DDA='A4'+':G'+ALLTRIM(STR(XH))*!* dda1=XLSheet.range("&DDA").BORDERS(1).LINESTYLE*!* XLSheet.range("&DDA").BORDERS(1).LINESTYLE=1*!* XLSheet.range("&DDA").BORDERS(2).LINESTYLE=1*!* XLSheet.range("&DDA").BORDERS(3).LINESTYLE=1*!* XLSheet.range("&DDA").BORDERS(4).LINESTYLE=1*!* XH=XH+1*!* ELSE*!* EXIT*!* ENDIF*!* ENDDOdateyear1=left(alltrim(XLSheet.Cells(1,1).Value),4)datemonth1=substr(alltrim(XLSheet.Cells(1,1).Value),7,2)dda='C:\ZLGL\history\TJ'+DA TEYEAR1+DA TEMONTH1+'.XLS'if file("&dda")ts=messagebox(dateyear1+'年'+datemonth1+'月已经统计过了,还要重新统计吗?',256+64+4,'*****************友情提示************************')if ts=6delete file &ddasele lstjlocate for dateyear=dateyear1.and.datemonth=datemonth1deletepackendifelsereturnendifendifif type('XLSheet.Cells(2,5).Value')!='N'.or.XLSheet.Cells(2,5).Value=0messagebox('E2栏中没有填写罗莎线的生产量',256,'***********友情提示****************')returnendifif type('XLSheet.Cells(2,7).Value')!='N'.or.XLSheet.Cells(2,7).Value=0messagebox('G2栏中没有填写6790线的生产量',256,'***********友情提示****************')returnendifoldcaption=mand4.captionmand4.forecolor=16711680mand4.caption='正在处理,请稍候…………!'zsl=XLSheet.Cells(2,2).Value&&本月底盘数lssl=XLSheet.Cells(2,5).Value&&本月罗莎底盘数zksl=XLSheet.Cells(2,7).Value&&本月6790底盘数do while .t.dda=XLSheet.Cells(xh,1).Valueif len(alltrim(dda))=0exitendifxh=xh+1enddofor i1=4 to xh-1sele qxjlappen blankrepla qxjl with alltrim(XLSheet.Cells(i1,1).Value)repla zrr with alltrim(XLSheet.Cells(i1,2).Value)repla tsg with alltrim(XLSheet.Cells(i1,3).Value)repla ch with alltrim(XLSheet.Cells(i1,4).Value)repla jb with alltrim(XLSheet.Cells(i1,5).Value)repla zrlb with alltrim(XLSheet.Cells(i1,6).Value)repla zrrbz with alltrim(XLSheet.Cells(i1,8).Value)repla tsgbz with alltrim(XLSheet.Cells(i1,9).Value)sele qxjlcount to hfjl for alltrim(upper(jb))='AA'.or.alltrim(upper(jb))='AB'.or.alltrim(upper(jb))='BA'.or.alltrim(upper(jb)) ='BB'.or.alltrim(upper(jb))='CA'.or.alltrim(upper(jb))='AC'.or.alltrim(upper(jb))='BC'.or.alltrim(up per(jb))='CB'.or.alltrim(upper(jb))='CC'.or.len(alltrim(upper(jb)))=0COUNT TO BIG2 FOR LEN(ALLTRIM(JB))>2if hfjl<reccount().OR.BIG2>0messagebox('明细中存在不明缺陷类别,请更正后重新运行!',256,'**************友情提示****************')sele qxjlzapmand4.forecolor=0returnendifset safe offuse zrrbbzapsele 0use gwbbzapsele 0use zrrfszapsele 0use zrrcszapsele 0use gwfszapsele 0use gwcszapsele 0use ryb order zrrsele 0use qxdzb order jbsele 0use qxjlset relation to jb into qxdzbset relation to zrr into ryb addiset order to xwgwcount to a for len(alltrim(zrr))=0repla all zrr with tsg for len(alltrim(zrr))=0.and.len(alltrim(tsg))>0repla all gw with ryb.gw,xw with ryb.xw,i with 1,fs with qxdzb.fsset relation tocopy to bbfs for (upper(jb)='BB'.or.upper(jb)='CA'.or.upper(jb)='AA'.or.upper(jb)='AB'.or.upper(jb)='BA').and.at(' Z',upper(zrlb))>0sele rybset order to xwzrrcopy to xwzrrset order to xwgwcopy to xwgwsele 0use xwgwgo topscanxwmem=alltrim(xw)gwmem=alltrim(gw)sele qxjlcount to a for xw=xwmem.and.gw=gwmemsum fs to b for xw=xwmem.and.gw=gwmemcount to c for xw=xwmem.and.gw=gwmem.and.fs>2*按工位统计sele gwcsappen blankrepla i with a,xw with xwmem,gw with gwmemsele gwbbappen blankrepla i with c,xw with xwmem,gw with gwmemsele gwfsappen blankrepla i with b,xw with xwmem,gw with gwmemsele xwgwendscan*按责任人统计sele 0use xwzrrgo topscanxwmem=alltrim(xw)gwmem=alltrim(gw)zrrmem=alltrim(zrr)sele qxjlcount to a for xw=xwmem.and.zrr=zrrmem*sum fs to b for xw=xwmem.and.zrr=zrrmem.and.at('H',ch)=0.and.at('N',ch)=0.and.at('W',zrlb)=0.and.at('C',zrlb)= 0sum fs to b for xw=xwmem.and.zrr=zrrmem.and.at('Z',upper(zrlb))>0&&.and.at('H',upper(ch))=0.and.at('N',uppe r(ch))=0count to c for xw=xwmem.and.zrr=zrrmem.and.fs>2sele zrrcsappen blankrepla i with a,xw with xwmem,gw with gwmem,zrr with zrrmemsele zrrbbappen blankrepla i with c,xw with xwmem,gw with gwmem,zrr with zrrmemsele zrrfsappen blankrepla i with b,xw with xwmem,gw with gwmem,zrr with zrrmemsele xwzrrendscansele qxjlcount to asum fs to bcount to c for fs>2XLApp.Worksheets('月产量').ActivateXLSheet = XLApp.ActiveSheetXLSheet.Cells(1,1).Value=dateyear1+'年'+datemonth1+'月'+'公司质量统计'dda=val(datemonth1)+1XLSheet.Cells(3,dda).Value=zslXLSheet.Cells(4,dda).Value=aXLSheet.Cells(5,dda).Value=bXLSheet.Cells(6,dda).Value=cif dda<12for xh=dda+1 to 12XLSheet.Cells(3,xh).V alue=0XLSheet.Cells(4,xh).V alue=0XLSheet.Cells(5,xh).V alue=0XLSheet.Cells(6,xh).V alue=0endforendifxlSheet.ChartObjects("图表2").Activatexlchart=xlapp.activechartxlchart.SeriesCollection(1).Points(dda-1).border.linestyle=1xlchart.SeriesCollection(1).border.colorindex=1xlchart.SeriesCollection(1).Points(dda).border.linestyle=0xlchart.SeriesCollection(1).Points(dda-1).markersize=5xlSheet.ChartObjects("图表11").Activatexlchart=xlapp.activechartxlchart.SeriesCollection(1).Points(dda-1).border.linestyle=1xlchart.SeriesCollection(1).Points(dda).border.linestyle=0xlchart.SeriesCollection(1).Points(dda-1).markersize=5xlSheet.ChartObjects("图表8").Activatexlchart=xlapp.activechartxlchart.SeriesCollection(1).Points(dda-1).border.linestyle=1xlchart.SeriesCollection(1).Points(dda).border.linestyle=0xlchart.SeriesCollection(1).Points(dda-1).markersize=5xlSheet.ChartObjects("图表10").Activatexlchart=xlapp.activechartxlchart.SeriesCollection(1).Points(dda-1).border.linestyle=1xlchart.SeriesCollection(1).Points(dda).border.linestyle=0xlchart.SeriesCollection(1).Points(dda-1).markersize=5XLAPP.ACTIVEWORKBOOK.SA VED=.T.xwmc='6790线'XLApp.Worksheets('6790缺陷明细').ActivateXLSheet = XLApp.ActiveSheetxlsheet.range('a3:g300').deleteXLSheet.Cells(1,1).Value=dateyear1+'年'+datemonth1+'月'+'6790缺陷明细' if used('qxjlls')sele qxjllsuseendifif used('qxjl')sele qxjlelsesele 0use qxjlendifset order to xwgwzrrcopy to qxjlls for xw='6790线'use qxjllsgo topstartrec1=0startrec2=0ddadda1=''ddadda2=''scanxh1=recno()+2if XLSheet.Cells(xh1,1).mergecellsXLSheet.Cells(xh1,1).Horizontalalignment =2XLSheet.Cells(xh1,1).mergecells=.f.XLSheet.Cells(xh1,1).Horizontalalignment =4XLSheet.Cells(xh1,5).Horizontalalignment =4endifif ddadda1!=alltrim(gw).or.mod((xh1-3),64)=0XLSheet.Cells(xh1,1).Value=alltrim(gw)ddadda1=alltrim(gw)if startrec1>0DDA='A'+ALLTRIM(STR(STARTREC1))+':A'+ALLTRIM(STR(xh1-1)) XLSheet.RANGE("&DDA").mergeXLSheet.Cells(startrec1,1).Horizontalalignment =3XLSheet.Cells(startrec1,1).verticalalignment =2endifstartrec1=xh1endifif ddadda2!=alltrim(zrr).or.mod((xh1-3),64)=0XLSheet.Cells(xh1,3).Value=alltrim(zrr)ddadda2=alltrim(zrr)if startrec2>0DDA='C'+ALLTRIM(STR(STARTREC2))+':C'+ALLTRIM(STR(xh1-1)) XLSheet.RANGE("&DDA").mergeXLSheet.Cells(startrec2,3).Horizontalalignment =3XLSheet.Cells(startrec2,3).verticalalignment =2endifstartrec2=xh1endifXLSheet.Cells(xh1,2).Value=alltrim(qxjl)XLSheet.Cells(xh1,4).Value=alltrim(tsg)XLSheet.Cells(xh1,5).Value=alltrim(ch)XLSheet.Cells(xh1,6).Value=alltrim(jb)XLSheet.Cells(xh1,7).Value=alltrim(zrlb)DDA='A'+ALLTRIM(STR(recno()+2))+':g'+ALLTRIM(STR(recno()+2)) XLSheet.RANGE("&DDA").BORDERS(1).LINESTYLE=1XLSheet.range("&DDA").BORDERS(2).LINESTYLE=1XLSheet.RANGE("&DDA").BORDERS(3).LINESTYLE=1XLSheet.range("&DDA").BORDERS(4).LINESTYLE=1endscanif startrec1<xh1DDA='A'+ALLTRIM(STR(STARTREC1))+':A'+ALLTRIM(STR(xh1)) XLSheet.RANGE("&DDA").mergeendifXLSheet.Cells(startrec1,1).Horizontalalignment =3XLSheet.Cells(startrec1,1).verticalalignment =2if startrec2<xh1DDA='C'+ALLTRIM(STR(STARTREC2))+':C'+ALLTRIM(STR(xh1))XLSheet.RANGE("&DDA").mergeendifXLSheet.Cells(startrec2,3).Horizontalalignment =3XLSheet.Cells(startrec2,3).verticalalignment =2DDA='A'+ALLTRIM(STR(xh1+1))+':G'+ALLTRIM(STR(xh1+1))xlsheet.range("&dda").mergexlsheet.range("&dda").BORDERS(1).LINESTYLE=1xlsheet.range("&dda").BORDERS(2).LINESTYLE=1xlsheet.range("&dda").BORDERS(3).LINESTYLE=1xlsheet.range("&dda").BORDERS(4).LINESTYLE=1if used('qxjl')sele qxjlelsesele 0use qxjlendifset order to xwgwcount to a for alltrim(xw)=xwmc.and.fs>2b=round(((zksl-a)*100/zksl),2)xlsheet.cells(xh1+1,1).value=xwmc+'本月一次交检合格率:'+alltrim(str(b,6,2))+'%' XLSheet.Cells(xh1+1,1).Horizontalalignment =3XLSheet.Cells(xh1+1,1).verticalalignment =2*!* sum i to ddadda*!* DDA='A'+ALLTRIM(STR(reccount()+3))+':G'+ALLTRIM(STR(reccount()+3)) *!* XLSheet.RANGE("&DDA").BORDERS(1).LINESTYLE=1*!* XLSheet.RANGE("&DDA").BORDERS(2).LINESTYLE=1*!* XLSheet.RANGE("&DDA").BORDERS(3).LINESTYLE=1*!* XLSheet.RANGE("&DDA").BORDERS(4).LINESTYLE=1*!* XLSheet.RANGE("&DDA").merge*!* XLSheet.Cells(xh1,1).Horizontalalignment =3xwmc='罗莎线'XLApp.Worksheets('罗莎缺陷明细').ActivateXLSheet = XLApp.ActiveSheetxlsheet.range('a3:g300').deleteXLSheet.Cells(1,1).Value=dateyear1+'年'+datemonth1+'月'+'罗莎缺陷明细' if used('qxjlls')sele qxjllsuseendifif used('qxjl')sele qxjlelsesele 0use qxjlendifset order to xwgwzrrcopy to qxjlls for xw='罗莎线'use qxjllsgo topstartrec1=0startrec2=0ddadda1=''ddadda2=''scanxh1=recno()+2if XLSheet.Cells(xh1,1).mergecellsXLSheet.Cells(xh1,1).Horizontalalignment =2XLSheet.Cells(xh1,1).mergecells=.f.XLSheet.Cells(xh1,1).Horizontalalignment =4XLSheet.Cells(xh1,5).Horizontalalignment =4endifif ddadda1!=alltrim(gw).or.mod((xh1-3),64)=0XLSheet.Cells(xh1,1).Value=alltrim(gw)ddadda1=alltrim(gw)if startrec1>0DDA='A'+ALLTRIM(STR(STARTREC1))+':A'+ALLTRIM(STR(xh1-1)) XLSheet.RANGE("&DDA").mergeXLSheet.Cells(startrec1,1).Horizontalalignment =3XLSheet.Cells(startrec1,1).verticalalignment =2endifstartrec1=xh1endifif ddadda2!=alltrim(zrr).or.mod((xh1-3),64)=0XLSheet.Cells(xh1,3).Value=alltrim(zrr)ddadda2=alltrim(zrr)if startrec2>0DDA='C'+ALLTRIM(STR(STARTREC2))+':C'+ALLTRIM(STR(xh1-1)) XLSheet.RANGE("&DDA").mergeXLSheet.Cells(startrec2,3).Horizontalalignment =3XLSheet.Cells(startrec2,3).verticalalignment =2endifstartrec2=xh1endifXLSheet.Cells(xh1,2).Value=alltrim(qxjl)XLSheet.Cells(xh1,4).Value=alltrim(tsg)XLSheet.Cells(xh1,5).Value=alltrim(ch)XLSheet.Cells(xh1,6).Value=alltrim(jb)XLSheet.Cells(xh1,7).Value=alltrim(zrlb)DDA='A'+ALLTRIM(STR(recno()+2))+':g'+ALLTRIM(STR(recno()+2)) XLSheet.RANGE("&DDA").BORDERS(1).LINESTYLE=1 XLSheet.range("&DDA").BORDERS(2).LINESTYLE=1XLSheet.RANGE("&DDA").BORDERS(3).LINESTYLE=1 XLSheet.range("&DDA").BORDERS(4).LINESTYLE=1endscanif startrec1<xh1DDA='A'+ALLTRIM(STR(STARTREC1))+':A'+ALLTRIM(STR(xh1)) XLSheet.RANGE("&DDA").mergeendifXLSheet.Cells(startrec1,1).Horizontalalignment =3XLSheet.Cells(startrec1,1).verticalalignment =2if startrec2<xh1DDA='C'+ALLTRIM(STR(STARTREC2))+':C'+ALLTRIM(STR(xh1)) XLSheet.RANGE("&DDA").mergeendifXLSheet.Cells(startrec2,3).Horizontalalignment =3XLSheet.Cells(startrec2,3).verticalalignment =2dda='A'+ALLTRIM(STR(xh1+1))+':G'+ALLTRIM(STR(xh1+1))xlsheet.range("&dda").mergexlsheet.range("&dda").BORDERS(1).LINESTYLE=1xlsheet.range("&dda").BORDERS(2).LINESTYLE=1xlsheet.range("&dda").BORDERS(3).LINESTYLE=1xlsheet.range("&dda").BORDERS(4).LINESTYLE=1if used('qxjl')sele qxjlelsesele 0use qxjlendifset order to xwgwcount to a for alltrim(xw)=xwmc.and.fs>2b=round(((lssl-a)*100/lssl),2)xlsheet.cells(xh1+1,1).value=xwmc+'本月一次交检合格率:'+alltrim(str(b,6,2))+'%' XLSheet.Cells(xh1+1,1).Horizontalalignment =3XLSheet.Cells(xh1+1,1).verticalalignment =2*!* sum i to ddadda*!* DDA='A'+ALLTRIM(STR(reccount()+3))+':G'+ALLTRIM(STR(reccount()+3)) *!* XLSheet.RANGE("&DDA").BORDERS(1).LINESTYLE=1*!* XLSheet.RANGE("&DDA").BORDERS(2).LINESTYLE=1*!* XLSheet.RANGE("&DDA").BORDERS(3).LINESTYLE=1*!* XLSheet.RANGE("&DDA").BORDERS(4).LINESTYLE=1*!* XLSheet.RANGE("&DDA").merge*!* XLSheet.Cells(xh1,1).Horizontalalignment =3xwmc='综合类'XLApp.Worksheets('综合类缺陷明细').ActivateXLSheet = XLApp.ActiveSheetxlsheet.range('a3:g500').deleteXLSheet.Cells(1,1).Value=dateyear1+'年'+datemonth1+'月'+'综合类缺陷明细'if used('qxjlls')sele qxjllsuseendifif used('qxjl')sele qxjlelsesele 0use qxjlendifset order to xwgwzrrcopy to qxjlls for xw='综合类'use qxjllsgo topstartrec1=0startrec2=0ddadda1=''ddadda2=''scanxh1=recno()+2if XLSheet.Cells(xh1,1).mergecellsXLSheet.Cells(xh1,1).Horizontalalignment =2XLSheet.Cells(xh1,1).mergecells=.f.XLSheet.Cells(xh1,1).Horizontalalignment =4XLSheet.Cells(xh1,5).Horizontalalignment =4endifif ddadda1!=alltrim(gw).or.mod((xh1-3),64)=0XLSheet.Cells(xh1,1).Value=alltrim(gw)ddadda1=alltrim(gw)if startrec1>0DDA='A'+ALLTRIM(STR(STARTREC1))+':A'+ALLTRIM(STR(xh1-1)) XLSheet.RANGE("&DDA").mergeXLSheet.Cells(startrec1,1).Horizontalalignment =3XLSheet.Cells(startrec1,1).verticalalignment =2endifstartrec1=xh1endifif ddadda2!=alltrim(zrr).or.mod((xh1-3),64)=0XLSheet.Cells(xh1,3).Value=alltrim(zrr)ddadda2=alltrim(zrr)if startrec2>0DDA='C'+ALLTRIM(STR(STARTREC2))+':C'+ALLTRIM(STR(xh1-1)) XLSheet.RANGE("&DDA").mergeXLSheet.Cells(startrec2,3).Horizontalalignment =3XLSheet.Cells(startrec2,3).verticalalignment =2endifstartrec2=xh1endifXLSheet.Cells(xh1,2).Value=alltrim(qxjl)XLSheet.Cells(xh1,4).Value=alltrim(tsg)XLSheet.Cells(xh1,5).Value=alltrim(ch)XLSheet.Cells(xh1,6).Value=alltrim(jb)XLSheet.Cells(xh1,7).Value=alltrim(zrlb)DDA='A'+ALLTRIM(STR(recno()+2))+':g'+ALLTRIM(STR(recno()+2)) XLSheet.RANGE("&DDA").BORDERS(1).LINESTYLE=1XLSheet.range("&DDA").BORDERS(2).LINESTYLE=1XLSheet.RANGE("&DDA").BORDERS(3).LINESTYLE=1XLSheet.range("&DDA").BORDERS(4).LINESTYLE=1endscanif startrec1<xh1DDA='A'+ALLTRIM(STR(STARTREC1))+':A'+ALLTRIM(STR(xh1)) XLSheet.RANGE("&DDA").mergeendifXLSheet.Cells(startrec1,1).Horizontalalignment =3XLSheet.Cells(startrec1,1).verticalalignment =2if startrec2<xh1DDA='C'+ALLTRIM(STR(STARTREC2))+':C'+ALLTRIM(STR(xh1))XLSheet.RANGE("&DDA").mergeendifXLSheet.Cells(startrec2,3).Horizontalalignment =3XLSheet.Cells(startrec2,3).verticalalignment =2dda='A'+ALLTRIM(STR(xh1+1))+':G'+ALLTRIM(STR(xh1+1))xlsheet.range("&dda").mergexlsheet.range("&dda").BORDERS(1).LINESTYLE=1xlsheet.range("&dda").BORDERS(2).LINESTYLE=1xlsheet.range("&dda").BORDERS(3).LINESTYLE=1xlsheet.range("&dda").BORDERS(4).LINESTYLE=1if used('qxjl')sele qxjlelsesele 0use qxjlendifset order to xwgwcount to a for alltrim(xw)=xwmc.and.fs>2b=round(((zsl-a)*100/zsl),2)xlsheet.cells(xh1+1,1).value=xwmc+'本月一次交检合格率:'+alltrim(str(b,6,2))+'%' XLSheet.Cells(xh1+1,1).Horizontalalignment =3XLSheet.Cells(xh1+1,1).verticalalignment =2*!* sum i to ddadda*!* DDA='A'+ALLTRIM(STR(reccount()+3))+':G'+ALLTRIM(STR(reccount()+3))*!* XLSheet.RANGE("&DDA").BORDERS(1).LINESTYLE=1*!* XLSheet.RANGE("&DDA").BORDERS(2).LINESTYLE=1*!* XLSheet.RANGE("&DDA").BORDERS(3).LINESTYLE=1*!* XLSheet.RANGE("&DDA").BORDERS(4).LINESTYLE=1*!* XLSheet.RANGE("&DDA").merge*!* XLSheet.Cells(xh1,1).Horizontalalignment =3******************************************以上为公共数据处理模块**********************************************************************************6790数据处理模块****************************************xwmc='6790线'sele gwcscount to reccounts for alltrim(xw)=xwmcpublic sjcs(reccounts)public cs(4),fs(4),bl(4)XLApp.Worksheets('6790质量分析').ActivateXLSheet = XLApp.ActiveSheetIF USED('QXJL')SELE QXJLELSESELE 0USE QXJLENDIFsele qxjlcount to bbx for fs>2.and.alltrim(xw)=xwmccount to cs(1) for alltrim(xw)=xwmccount to cs(2) for at('Z',UPPER(zrlb))>0.and.alltrim(xw)=xwmccount to cs(3) for at('W',UPPER(zrlb))>0.and.alltrim(xw)=xwmccount to cs(4) for at('C',UPPER(zrlb))>0.and.alltrim(xw)=xwmcSUM FS to fs(1) for alltrim(xw)=xwmcSUM FS to fs(2) for at('Z',UPPER(zrlb))>0.and.alltrim(xw)=xwmcSUM FS to fs(3) for at('W',UPPER(zrlb))>0.and.alltrim(xw)=xwmcSUM FS to fs(4) for at('C',UPPER(zrlb))>0.and.alltrim(xw)=xwmcdda1=left(alltrim(XLSheet.Cells(1,1).Value),4)dda2=substr(alltrim(XLSheet.Cells(1,1).Value),7,2)XLSheet.Cells(1,1).Value=dateyear1+'年'+datemonth1+'月'+xwmc+'底盘质量缺陷分析'if dda1=dateyear1.and.dda2=datemonth1for xh1=0 to 3dda1=4*xh1+2dda2=xh1+1XLSheet.Cells(4,dda1).Value=cs(dda2)XLSheet.Cells(5,dda1).Value=fs(dda2)endforoutput4='('+ALLTRIM(STR(zksl))+')台'XLSheet.Cells(9,2).Value='本月份'+output4xh=11do while .t.dda=alltrim(XLSheet.Cells(xh,1).Value)if len(dda)=0exitendifsele gwcslocate for xw=xwmc.and.gw=ddaif !found()XLSheet.Cells(xh,2).V alue='没有找到此工位!'loopendifXLSheet.Cells(xh,2).V alue=round(i/zksl,4)xh=xh+1enddoelsefor xh1=0 to 3dda1=4*xh1+2dda2=xh1+1for xh=dda1+3 to dda1+1 step -1XLSheet.Cells(4,xh).V alue=XLSheet.Cells(4,xh-1).Value XLSheet.Cells(5,xh).V alue=XLSheet.Cells(5,xh-1).Value endforXLSheet.Cells(4,dda1).Value=cs(dda2)XLSheet.Cells(5,dda1).Value=fs(dda2)endforsta=at('(',alltrim(XLSheet.Cells(9,10).Value))enda=len(alltrim(XLSheet.Cells(9,10).Value))sta=enda-staoutput1=right(alltrim(XLSheet.Cells(9,10).Value),sta+1) sta=at('(',alltrim(XLSheet.Cells(9,6).Value))enda=len(alltrim(XLSheet.Cells(9,6).Value))sta=enda-staoutput2=right(alltrim(XLSheet.Cells(9,6).Value),sta+1)sta=at('(',alltrim(XLSheet.Cells(9,2).Value))enda=len(alltrim(XLSheet.Cells(9,2).Value))sta=enda-staoutput3=right(alltrim(XLSheet.Cells(9,2).Value),sta+1) output4='('+ALLTRIM(STR(zksl))+')台'XLSheet.Cells(9,14).V alue='前三月'+output1XLSheet.Cells(9,10).V alue='前二月'+output2XLSheet.Cells(9,6).Value='前一月'+output3XLSheet.Cells(9,2).Value='本月份'+output4xh=11do while .t.dda=alltrim(XLSheet.Cells(xh,1).Value)if len(dda)=0exitendifsele gwcslocate for xw=xwmc.and.gw=ddaif !found()XLSheet.Cells(xh,1).V alue='无此工位!'xh=xh+1loopendifdda=XLSheet.Cells(xh,14).V alue-XLSheet.Cells(xh,10).Value if type('dda')='C'dda=0endifdo casecase dda=0XLSheet.Cells(xh,16).Value='---'case dda<0XLSheet.Cells(xh,16).Value='↑'case dda>0XLSheet.Cells(xh,16).Value=' ↓'endcaseXLSheet.Cells(xh,14).Value=XLSheet.Cells(xh,10).Value XLSheet.Cells(xh,10).Value=XLSheet.Cells(xh,6).Value XLSheet.Cells(xh,6).V alue=XLSheet.Cells(xh,2).V alue XLSheet.Cells(xh,2).Value=round(i/zksl,4)xh=xh+1enddoendifxh=21do while .t.dda=alltrim(XLSheet.Cells(xh,1).Value)if len(dda)=0exitendifsele gwbbset order to xwgwsele gwfsset order to xwgwsele gwcsset relation to xw+gw into gwfsset relation to xw+gw into gwbb addirepla all gwcs.i1 with gwfs.i,gwcs.i2 with gwbb.i set relation tolocate for xw=xwmc.and.gw=ddaif !found()XLSheet.Cells(xh,1).V alue='无此工位!'xh=xh+1loopendifXLSheet.Cells(xh,2).V alue=iXLSheet.Cells(xh,3).V alue=i1XLSheet.Cells(xh,4).V alue=i2xh=xh+1enddoXLApp.Worksheets('6790按责任人统计').Activate XLSheet = XLApp.ActiveSheetFOR XH=1 TO 50XLSheet.ROWS(4).DELETEENDFORsele zrrcsset order to icopy to zrrcsls for xw=xwmcsele zrrfsset order to icopy to zrrfsls for xw=xwmcsele zrrbbset order to icopy to zrrbbls for xw=xwmcsele 0use zrrcslsxh1=1go topscanif recno()>1.and.XLSheet.Cells(recno()+2,5).Value!=i xh1=xh1+1endifXLSheet.Cells(recno()+3,1).Value=recno() XLSheet.Cells(recno()+3,2).Value=xh1XLSheet.Cells(recno()+3,3).Value=alltrim(zrr) XLSheet.Cells(recno()+3,4).Value=gwXLSheet.Cells(recno()+3,5).Value=iendscansele 0use zrrfslsxh1=1go topscanif recno()>1.and.XLSheet.Cells(recno()+2,11).Value!=i xh1=xh1+1endifXLSheet.Cells(recno()+3,7).Value=recno() XLSheet.Cells(recno()+3,8).Value=xh1XLSheet.Cells(recno()+3,9).Value=alltrim(zrr) XLSheet.Cells(recno()+3,10).Value=gwXLSheet.Cells(recno()+3,11).Value=iendscansele 0use zrrbblsxh1=1go topscanif recno()>1.and.XLSheet.Cells(recno()+2,17).Value!=i xh1=xh1+1endifXLSheet.Cells(recno()+3,13).Value=recno()XLSheet.Cells(recno()+3,14).Value=xh1XLSheet.Cells(recno()+3,15).Value=alltrim(zrr)XLSheet.Cells(recno()+3,16).Value=gwXLSheet.Cells(recno()+3,17).Value=iendscanDDA='A4'+':Q'+ALLTRIM(STR(reccount()+3))XLSheet.range("&DDA").BORDERS(1).LINESTYLE=1XLSheet.range("&DDA").BORDERS(2).LINESTYLE=1XLSheet.range("&DDA").BORDERS(3).LINESTYLE=1XLSheet.range("&DDA").BORDERS(4).LINESTYLE=1DDA='F2'+':F'+ALLTRIM(STR(reccount()+3))XLSheet.range("&DDA").MERGEDDA='L2'+':L'+ALLTRIM(STR(reccount()+3))XLSheet.range("&DDA").MERGE*!* XLSheet.ROWS(8).ROWHEIGHT=13*!* XLSheet.COLUMNS(5).COLUMNWIDTH=13*************罗莎线********************xwmc='罗莎线'sele gwcscount to reccounts for alltrim(xw)=xwmcpublic sjcs(reccounts)public cs(4),fs(4),bl(4)XLApp.Worksheets('罗莎质量分析').ActivateXLSheet = XLApp.ActiveSheetsele qxjlcount to bbx for fs>2.and.alltrim(xw)=xwmccount to cs(1) for alltrim(xw)=xwmccount to cs(2) for at('Z',UPPER(zrlb))>0.and.alltrim(xw)=xwmccount to cs(3) for at('W',UPPER(zrlb))>0.and.alltrim(xw)=xwmccount to cs(4) for at('C',UPPER(zrlb))>0.and.alltrim(xw)=xwmcSUM FS to fs(1) for alltrim(xw)=xwmcSUM FS to fs(2) for at('Z',UPPER(zrlb))>0.and.alltrim(xw)=xwmcSUM FS to fs(3) for at('W',UPPER(zrlb))>0.and.alltrim(xw)=xwmcSUM FS to fs(4) for at('C',UPPER(zrlb))>0.and.alltrim(xw)=xwmcdda1=left(alltrim(XLSheet.Cells(1,1).Value),4)dda2=substr(alltrim(XLSheet.Cells(1,1).Value),7,2)XLSheet.Cells(1,1).Value=dateyear1+'年'+datemonth1+'月'+xwmc+'底盘质量缺陷分析' if dda1=dateyear1.and.dda2=datemonth1for xh1=0 to 3dda1=4*xh1+2dda2=xh1+1XLSheet.Cells(4,dda1).Value=cs(dda2)XLSheet.Cells(5,dda1).Value=fs(dda2)endforoutput4='('+ALLTRIM(STR(lssl))+')台'XLSheet.Cells(9,2).Value='本月份'+output4xh=11do while .t.dda=alltrim(XLSheet.Cells(xh,1).Value)if len(dda)=0exitendifsele gwcslocate for xw=xwmc.and.gw=ddaif !found()XLSheet.Cells(xh,2).V alue='没有找到此工位!'loopendifXLSheet.Cells(xh,2).V alue=round(i/lssl,4)xh=xh+1enddoelsefor xh1=0 to 3dda1=4*xh1+2dda2=xh1+1for xh=dda1+3 to dda1+1 step -1XLSheet.Cells(4,xh).V alue=XLSheet.Cells(4,xh-1).Value XLSheet.Cells(5,xh).V alue=XLSheet.Cells(5,xh-1).Value endforXLSheet.Cells(4,dda1).Value=cs(dda2)XLSheet.Cells(5,dda1).Value=fs(dda2)endforsta=at('(',alltrim(XLSheet.Cells(9,10).Value))enda=len(alltrim(XLSheet.Cells(9,10).Value))sta=enda-staoutput1=right(alltrim(XLSheet.Cells(9,10).Value),sta+1) sta=at('(',alltrim(XLSheet.Cells(9,6).Value))enda=len(alltrim(XLSheet.Cells(9,6).Value))sta=enda-staoutput2=right(alltrim(XLSheet.Cells(9,6).Value),sta+1)sta=at('(',alltrim(XLSheet.Cells(9,2).Value))enda=len(alltrim(XLSheet.Cells(9,2).Value))sta=enda-staoutput3=right(alltrim(XLSheet.Cells(9,2).Value),sta+1) output4='('+ALLTRIM(STR(lssl))+')台'XLSheet.Cells(9,14).V alue='前三月'+output1XLSheet.Cells(9,10).V alue='前二月'+output2XLSheet.Cells(9,6).Value='前一月'+output3XLSheet.Cells(9,2).Value='本月份'+output4xh=11do while .t.dda=alltrim(XLSheet.Cells(xh,1).Value)if len(dda)=0exitendifsele gwcslocate for xw=xwmc.and.gw=ddaif !found()XLSheet.Cells(xh,1).V alue='无此工位!'xh=xh+1loopendifdda=XLSheet.Cells(xh,14).V alue-XLSheet.Cells(xh,10).Value if type('dda')='C'dda=0endifdo casecase dda=0XLSheet.Cells(xh,16).Value='---'case dda<0XLSheet.Cells(xh,16).Value='↑'case dda>0XLSheet.Cells(xh,16).Value=' ↓'endcaseXLSheet.Cells(xh,14).Value=XLSheet.Cells(xh,10).Value XLSheet.Cells(xh,10).Value=XLSheet.Cells(xh,6).Value XLSheet.Cells(xh,6).V alue=XLSheet.Cells(xh,2).V alue XLSheet.Cells(xh,2).Value=round(i/lssl,4)xh=xh+1enddoendif。
如何在vfp中调用excel实现图、表的制作(之八)
如何在vfp中调用excel实现图、表的制作(之八)如何在vfp中调用excel实现图、表的制作(之八)本讲纯属凑数,将搜集的一些可能用到的VFP调用Excel指令语句罗列出来供各位在编程时参考。
所幸没有稿酬可赚,也就没有骗稿费之嫌,各位看官也就不会责怪我。
呵呵。
1. 创建Excel对象eole=CreateObject(“Excel.application”)2. 添加新的工作簿eole.Workbooks.Add3. 打开指定工作簿eole.Workbooks.Open(“C:\demo.xls”)4. 设置第三个工作表为激活(作用)工作表eole.WorkSheets(“Sheet3”).Activate5. 是否显示Excel窗口eole.Visible=.T. (.T. 显示;.F.不显示)6.关闭工作簿eole.Workbooks.Close7.退出Exceleole.quit8.保存当前工作簿eole.ActiveWorkbook.Save9.当前工作簿另存为eole.ActiveWorkbook.SaveAs(“e:\temp\my1.xls”)10.退出时是否存盘eole.ActiveWorkbook.Saved=.F. (.F. 放弃存盘;.T.不放弃存盘)11.是否防止警告框的出现eole.DisplayAlerts=.F. (.F. 不出现;.T.出现)12.运行Excel宏eole.Application.Run(“宏1”)13.当前屏不显示零值eole.ActiveWindow.DisplayZeros=.F.14.更改Excel标题栏内容eole.Caption=”趋势分析表”15. 给单元格赋值eole.Cells(1,4).Value=3.141616.选定区域eole.ActiveSheet.Range(“A1:G10”).Select17.清除区域eole. ActiveSheet.Range(“A1:G10”).Clear18.合并单元格eole.ActiveSheet.Range(“A1:B2”).Merge19. 设置字体eole.ActiveSheet.Cells(2,1)=”隶书”20. 设置字号eole.ActiveSheet.Cells(2,1).font.size=1621.设置字体颜色eole.ActiveSheet.Cells(1,1).font.ColorIndex=322.字体设为斜体eole.ActiveSheet.Cells(1,1).font.Italic=.T.23.文字带下划线eole. ActiveSheet.Range(“A2:A2”).font.underline=.T.24.整列字体为粗体eole.ActiveSheet.Columns(2).font.bold=.T.25.设置单元格背景色eole. ActiveSheet.Cells(3,4).Interior.ColorIndex = 46 26.调整列宽eole.Range(“A1:H1”).ColumnWidth=12.527.调整指定列宽度eole.ActiveSheet.Column(2).ColumnWidth=2028.单元格文字居中eole.Cells(1,8).HorizontalAlignment=329.插行eole.ActiveSheet.Rows(1).Insert30.删行eole.ActiveSheet.Rows[8].Delete31.插列eole.ActiveSheet.Columns(2).Insert32.删列eole.Columns("D:D").Selecteole.Selection.Delete(-4159)33.删除指定工作表指定列eole.WorkSheets(“Sheet1”).Row(3).Delete34.调整行高eole.ActiveSheet.Rows(5).RowHeight=4035.块拷贝eole.Range(“A1:J3”).Selecteole.Selection.Copy或:eole.ActiveSheet.Range(“A1:E2”).Copy36.块粘贴eole.Range(“A1:A1”).Selecteole.ActiveSheet.Paste37.拷贝整个工作表ed.Range.Copy / eole.Cells.Copy 38.在指定工作表指定单元格粘贴eole.WorkSheets(“Sheet2”).Range(“A1”).PasteSpecial 39.单元格设置公式eole.Range(“A1”).Fornula=”=10*Rand()”40.清除单元格公式eole.ActiveSheet.Cells(1,4).ClearContents41.插入新工作表eole.Sheets.Add42.删除某个工作表eole.Sheets(“Sheet2”).Selecteole.ActiveWindow.SelectSheets.Delete43.返回当前工作簿工作表的总数eole.WorkSheets.Count44.返回Sheet1工作表的表名eole.WorkSheets(1).Name45.工作表更名eole.Sheets(2).Name=”损益表”46. 设置表格四个边框线条的类型eole.ActiveSheet.Range(“B3:D3”).Borders(2).Linestyl e=1 其中:borders参数:1-左 2-右 3-顶 4-底 5-斜/ 6-反斜\Linestyle参数:1和7-细实线;2-细虚线;4-点虚线;9:双细实线47. 设置表格边框线粗细eole.ActiveSheet.Range(“B3:D3”).Borders(2).Weight=348.在指定行插入分页符eole.WorkSheets(“Sheet1”).Rows(10).PageBreak=149.在指定列之前删除分页符eole.ActiveSheet.Columns(4).PageBreak=050.打印预览工作表eole.ActiveSheet.PrintPreview51.打印输出eole.ActiveSheet.Printout52.报表打印方向eole.ActiveSheet.PageSetup.Orientation=1 (1:垂直打印2:水平打印)53.设置页面纸张尺寸eole.ActiveSheet.PageSetup.PaperSize=954.打印单元格网线eole.ActiveSheet.PageSetup.PrintGridLines=.T.55.报表水平居中eole.ActiveSheet.PageSetup.CenterHorizontally=.T.56.报表垂直居中eole.ActiveSheet.PageSetup. CenterVertically=.T.57.设置报表页眉eole.ActiveSheet.PageSetup.CenterHeader=”报表1”58.设置报表页脚eole.ActiveSheet.PageSetup.CenterFoo ter=”第6页”59.设置报表左边距eole.ActiveSheet.PageSetup.LeftMargin=2/0.035 (2厘米)60.设置报表右边距eole.ActiveSheet.PageSetup.RightMargin=2/0.03561.设置报表顶边距eole.ActiveSheet.PageSetup.T opMargin=2/0.03562.设置报表底边距eole.ActiveSheet.PageSetup.BottomMargin=2/0.035关于VFP调用Excel 编程最后再罗嗦几句。
VFP控制EXCEL的方法
VFP控制EXCEL的方法VFP(Visual FoxPro)是一种面向对象的数据库管理系统,可以通过它来控制和操作Excel。
下面将详细介绍一些使用VFP控制Excel的方法。
1. 建立与Excel的连接:首先需要建立与Excel的连接,可以使用OLE(Object Linking and Embedding)技术来实现。
通过OLE创建一个Excel应用程序实例,然后使用该实例进行操作。
```foxprooExcel = CREATEOBJECT("Excel.Application") && 创建Excel应用程序实例oWorkbook = oExcel.Workbooks.Add( && 新建一个工作簿oWorksheet = oWorkbook.WorkSheets(1) && 获取第一个工作表```2. 设置Excel对象的属性:Excel应用程序有很多属性可以设置,比如设置显示/隐藏工作窗口、设置自动保存等。
例如,以下代码将Excel应用程序窗口设置为不可见:```foxprooExcel.Visible = .F. && 不显示Excel窗口```3. 操作Excel工作表:通过Excel应用程序实例的oWorksheet对象,可以对Excel工作表进行操作。
比如,设置单元格的值、获取单元格内容、设置字体、设置单元格格式等。
例如,以下代码将A1单元格的值设置为“Hello World!”:```foxprooWorksheet.Range("A1").Value = "Hello World!"```4. 操作Excel图表:可以使用VFP控制Excel创建和操作图表。
例如,以下代码创建一个柱状图:```foxprooChart = oWorksheet.Shapes.AddChart2(240, xlColumnClustered) && 创建一个柱状图oChart.Select( && 选中图表oChart.SetSourceData(oWorksheet.Range("A1:B10")) && 设置图表数据范围```5. 保存Excel文件:VFP可以通过Excel应用程序实例的oWorkbook对象来保存Excel文件。
VFP控制EXCEL的方法(终于找到了)
VFP控制EXCEL的方法(终于找到了)VFP控制EXCEL的常用方法oExl=CREATEOBJECT('Excel.application') oExl.Visible=.T.oExl.DefaultSaveFormat=39 oExl.SheetsInNewWorkbook=1oExl.Workbooks.Open(cXLS)oExl.WindowState=-4140 &&窗口最小化 oExl.WindowState=-4143 &&窗口正常化oExl.WindowState=-4147 &&窗口最大化 *------------------------------------------------------*&&页面设置oExl.ActiveSheet.PageSetup.PrintTitleRows=\&&打印标题oExl.ActiveSheet.PageSetup.Orientation=2 &&页面方向:1纵向/2横向*oExl.ActiveSheet.PageSetup.PaperSize=11 &&纸张尺寸:9-A4/11-A5oExl.ActiveSheet.PageSetup.TopMargin=0.8/0.035 &&顶边距oExl.ActiveSheet.PageSetup.BottomMargin=0.8/0.035 &&底边距oExl.ActiveSheet.PageSetup.LeftMargin=0 &&左边距oExl.ActiveSheet.PageSetup.RightMargin=0 &&右边距oExl.ActiveSheet.PageSetup.CenterHorizontally=.T. &&页面居中oExl.ActiveSheet.PageSetup.HeaderMargin=0.5/0.035oExl.ActiveSheet.PageSetup.FooterMargin=0.5/0.035oExl.ActiveSheet.PageSetup.LeftHeader=\表格\”9是字号”oExl.ActiveSheet.PageSetup.CenterHeader=\oExl.ActiveSheet.PageSetup.RightHeade r=\oExl.ActiveSheet.PageSetup.LeftFooter=\oExl.ActiveSheet.PageSetup.CenterFooter=\第&P页,共&N页\oExl.ActiveSheet.PageSetup.RightFooter=\制表人:'+代码+' 制表时间:\*------------------------------------------------------* &&整体格式设置oExl.ActiveSheet.Rows.Font.Size=9='宋体'oExl.ActiveSheet.Rows.RowHeight=0.5/0.035oExl.ActiveSheet.Rows.NumberFormatLocal=\红色]-0.00\oExl.ActiveSheet.Rows.VerticalAlignment=2 &&单元格内容垂直居中 *------------------------------------------------------* &&获取最大行号和最大列号 Local nMaxRow,nMaxColnMaxRow=edRange.Rows.CountnMaxCol=edRange.Columns.Count &&表头格式设置oExl.ActiveSheet.Rows(1).Font.Size=16oExl.ActiveSheet.Rows(1).Font.Bold=.T.oExl.ActiveSheet.Rows(1).RowHeight=1/0.035oExl.ActiveSheet.Rows(1).HorizontalAlignment=3oExl.ActiveSheet.Rows(2).HorizontalAlignment=3oExl.ActiveSheet.Rows(3).HorizontalAlignment=3oExl.ActiveSheet.Rows(3).Font.Bold=.T.oExl.ActiveSheet.Range('A1:'+CHR(96+nMaxCol)+'1').MergeoExl.ActiveSheet.Range('A2:'+CHR(96+nMaxCol)+'2').Merge *------------------------------------------------------*&&条件格式隐藏0值edRange.FormatConditions.DeleteedRange.FormatConditions.Add(1,3,'0')edRange.FormatConditions(1).Font.ColorIndex=2&&文字白色*------------------------------------------------------*oExl.ActiveSheet.Range('A1:B1').Interior.ColorIndex=6 *------------------------------------------------------*&&单元格底纹黄色oExl.ActiveSheet.Columns.AutoFit &&自动列宽oExl.ActiveSheet.Range(\ &&边框线*------------------------------------------------------*&&自动筛选IF !oExl.ActiveSheet.AutoFilterMode &&判断是否存在自动筛选oExl.ActiveSheet.Rows(3).Autofilter &&如果不存在自动筛选,则添加自动筛选 ENDIF*------------------------------------------------------* &&冻结窗格oExl.ActiveSheet.Range('D4').Select oExl.ActiveWindow.FreezePanes = .T.*------------------------------------------------------* *------------------------------------------------------*&&分类汇总Local Arry(1),nMaxRow,nMaxCol Arry(1)=5nMaxRow=edRange.Rows.CountnMaxCol=edRange.Columns.CountoExl.ActiveSheet.Range('A3:'+chr(96+nMaxCol)+alltrim(str(nMaxRow))).Subtotal(2 ,-4157,@Arry,.T.,.F.,.T.) &&按第2列分类汇总数组Arry保存的列 *------------------------------------------------------*1、对象的创建与关闭*******************************oExl=CREATEOBJECT('Excel.application') &&创建Excel对象oExl.SheetsInNewWorkbook=1 &&新建工作簿默认包含工作表个数oExl.Workbooks.Add &&新建工作簿,工作表个数由SheetsInNewWorkBooks属性指定oExl.Workbooks.Open(cXLS,3,.T.) &&打开指定工作簿(更新链接/只读打开)oExl.Workbooks.Open(cXLS, [UpdateLinks], [ReadOnly], [Format], [Password], [WriteResPassword], [IgnoreReadOnlyRecommended], [Origin], [Delimiter], [Editable], [Notify], [Converter], [AddToMru], [Local], [CorruptLoad])oExl.Worksheets(cSheet).Activate &&激活工作表Sheet3oExl.Worksheets(3).Activate &&激活(从左到右)第3个工作表oExl.WorkSheets.Count &&工作簿中工作表数 oExl.DefaultSaveFormat=39 &&默认格式Excel 5.0 oExl.DisplayAlerts=.F. &&不显示警告信息oExl.Visible=.T. &&显示Excel窗口 oExl.Visible=.F. &&不显示Excel窗口 oExl.Caption=\标题栏\ &&更改Excel标题栏oExl.WorkSheet(\ &&粘贴oExl.Quit &&退出Excel oExl.DisplayRecentFiles=.T.&&是否显示最近打开文档 oExl.RecentFiles.Maximum=4 &&历史最大纪录数erName=\ &&用户名 oExl.StandardFont=\宋体\ &&标准字体oExl.StandardFontSize=\ &&标准字体大小 oExl.DefaultFilePath=\ &&默认工作目录 oExl.EnableSound=False &&声音反馈 oExl.RollZoom=False &&智能鼠标缩放 oExl.TransitionMenuKey=\ &&Microsoft Office Excel菜单键oExl.ActiveWorkbook.Password=\oExl.ActiveWorkbook.WritePassword=\oExl.ActiveWorkbook.ReadOnlyRecommended=FalseoExl.ActiveWorkbook.SetPasswordEncryptionOptionsPasswordEncryptionProvider:=\_ PasswordEncryptionAlgorithm:=\ PasswordEncryptionKeyLength:=40 _ ,PasswordEncryptionFileProperties:=FalseIF oExl.ActiveWorkbook.FileFormat==39 &&格式为Excel 5.0工作簿 ENDIFoExl.ActiveWorkBook.SaveAs(FileName,FileFormat,PassWord,WriteResPassWord,ReadO nlyRecommended,CreateBackup) &&另存为 &&参数说明FileName 字符型,指定文件名 FileFormat 数值型,文件格式 -4143 MicrosoftOffice Excel 11 DBF4 39 Microsoft Excel 5.0/95 43 Microsoft Excel97-Excel2021 & 5.0/95 44 网页Html文件 -4158 文本文件(制表符分隔) PassWord 字符型,只读密码 WriteResPassWord 字符型,写密码ReadOnlyRecommended逻辑型,建议只读 CreateBackup 逻辑型,自动备份例如:oExl.ActiveWorkBook.SaveAs(\oExl.ActiveWorkbook.saved=.T. &&放弃存盘oExl.ActiveWorkbook.Save &&存盘(自动存盘不提问)oExl.Workbooks.close &&关闭工作簿3、单元格的设置*********************************** &&冻结窗格oExl.ActiveSheet.Range('D4').Select oExl.ActiveWindow.FreezePanes = .T.&&条件格式设定oExl.ActiveSheet.Range('A1:H18').FormatConditions.Add(Type,Operator,Formula1,Formula2) Type 类型(1单元格数值,2公式) Operator 操作符(1介于,2不介于,3等于,4不等于,5大于,6小于,7大于等于,8小于等于) Formula1 表达式1 Formula2 表达式2,操作符为1介于或2不介于才有效 &&条件格式例句:数值为0者,文字颜色白色edRange.FormatConditions.DeleteedRange.FormatConditions.Add(1,3,'0')edRange.FormatConditions(1).Font.ColorIndex=2&&文字白色&&编辑edRange.Copy &&拷贝整个工作表oExl.ActiveSheet.Range(\ &&拷贝指定区域 oExl.ActiveSheet.Columns(\ &&删除列 oExl.ActiveSheet.Columns(\ &&删除列oExl.ActiveSheet.Rows(1).Insert &&在第1行之前插入一行oExl.ActiveSheet.Columns(2).Insert &&在第2列之前插入一列oExl.ActiveSheet.Cells(1,2).Value=\ &&给单元格赋值oExl.ActiveSheet.Cells(2,2).Value=\ &&给单元格赋值oExl.ActiveSheet.Cells(1,4).ClearContents &&清除单元格公式oExl.ActiveSheet.Rows(18).PageBreak=1 &&在第18行之前插入分页符oExl.ActiveSheet.Columns(4).PageBreak=0 &&在第4列之前删除分页符oExl.ActiveSheet.Rows(3).AutoFilter &&自动筛选oExl.ActiveSheet.Cells(1,1).Delete(-4159) &&删除单元格 -4159 右边单元格左移-4162 下边单元格上移oExl.Selection.EntireRow.Delete &&所在行整行删除oExl.Selection.EntireColumn.Delete &&所在列整列删除oExl.ActiveSheet.Cells(1,1).Insert(-4142) &&插入单元格 -4142 活动单元格下移-4161 活动单元格右移oExl.ActiveSheet.Selection.EntireRow.Insert &&插入行oExl.ActiveSheet.Selection.EntireColumn.Insert &&插入列&&选择性粘贴oExl.ActiveSheet.Selection.PasteSpecial Paste:=xlPasteValues,Operation:=xlNone, SkipBlanks:=False, Transpose:=False Paste 粘贴数据:8列宽,11公式和数值格式,12数值与数值格式,-4104全部,-4123公式,-4163数值,-4122格式, Operation 运算符:-4142无,2加,3减,4乘,5除 SkipBlanks 跳过空白单元:逻辑型Transpose 转置:逻辑型-------------------------------------------------- &&排序成功例句:oExl.ActiveSheet.Range('A1:'+CHR(96+nMaxCol)+ALLTRIM(STR(nMaxRow))).Sort(oExl. ActiveSheet.Range(CHR(96+ASCAN(Arry,'原币金额'))+'2'),2,,,,,,1) &&按\原币金额\所在列降序排列,有标题oExl.ActiveSheet.Rows('1:28').Sort Key1:=Range(\ Key2:=Range(\Key3:=Range(\ Header:=xlYes, OrderCustom:=6, MatchCase:=True, Orientation:=xlTopToBottom, SortMethod:=xlStroke,DataOption1:=xlSortNormal, DataOption2:=xlSortNormal,感谢您的阅读,祝您生活愉快。
VFP调用EXCEL
VFP(Visual Foxpro)是一种关系型数据库管理系统,由于其强大的数据处理能力及良好的兼容性,使其成为数据库应用程序开发人员强有力的工具而广为使用; 而Excel则是一个优秀的电子表格处理软件,在兼容性、操作界面、公式运算、图表等方面有着独到的优势,成为广大办公应用人员必备的首选软件。
上述两种软件在各自的应用领域均得到了广泛的应用,同时上述两种软件还具有良好的交互编程能力,为两者相辅相成、取长补短奠定了良好的基础。
本文将结合实例介绍VFP与Excel交互编程的方法,在VFP中除了使用OLE技术外,还可使用DDE技术与外部服务器进行数据交换,本文主要讲解VFP中使用OLE技术与Excel交换数据,Excel中借助内置的VBA使用VFP提供的Application对象来调用VFP中的一些功能。
其功能可简述如下:VFP数据表“学生成绩.DBF”中含“学号、姓名、语文、数学”等字段,示例程序将从Excel工作簿“VFP交互.XLS”的工作表“查询”中用“条件”区域(一般为一个矩形区中的数据,该区域名称指定为“条件”,数据形如“语文>60”、“数学<90”等)中的数据作为查询的条件,用“连接条件”区域(一般为一个单元格,其值为“or”或者“and”)来获取组合“条件”的逻辑连接,并将该连接信息的内容以工作表的形式显示出来,然后调用VFP中针对给定表的SQL查询来找出给定条件的记录并显示到Excel中。
下列程序均在VFP 6.0与Excel 2000中调试通过。
Excel驱动VFPExcel内置的VBA语言(Visual Basic For Application)为Excel功能的扩展提供了便利的手段,用户可使用该语言直接驱动VFP完成数据检索等功能。
程序首先生成一个VFP对象,然后用VFP的DoCmd方法执行VFP搜索命令串,其搜索结果再借助于VFP的DataToClip方法拷贝至剪切板,最后VBA将其粘贴至工作表的正确位置,为了每次运行时能将结果插入到工作表中,依次对操作的工作表以“搜索结果”、“搜索结果1”等进行编号。
VFP操作Excel
VFP操作Excel首先创建Excel 对象,使用ComObj:var ExcelApp: Variant;ExcelApp := CreateOleObject( 'Excel.Application' );1) 显示当前窗口:ExcelApp.Visible := True;2) 更改Excel 标题栏:ExcelApp.Caption := '应用程序调用Microsoft Excel';3) 添加新工作簿:ExcelApp.WorkBooks.Add;4) 打开已存在的工作簿:ExcelApp.WorkBooks.Open( 'C:\Excel\Demo.xls' );5) 设置第2个工作表为活动工作表:ExcelApp.WorkSheets[2].Activate;或ExcelApp.WorksSheets[ 'Sheet2' ].Activate;6) 给单元格赋值:ExcelApp.Cells[1,4].Value := '第一行第四列';7) 设置指定列的宽度(单位:字符个数),以第一列为例: ExcelApp.ActiveSheet.Columns[1].ColumnsWidth := 5;8) 设置指定行的高度(单位:磅)(1磅=0.035厘米),以第二行为例: ExcelApp.ActiveSheet.Rows[2].RowHeight := 1/0.035; // 1厘米9) 在第8行之前插入分页符:ExcelApp.WorkSheets[1].Rows[8].PageBreak := 1;10) 在第8列之前删除分页符:ExcelApp.ActiveSheet.Columns[4].PageBreak := 0;11) 指定边框线宽度:ExcelApp.ActiveSheet.Range[ 'B3:D4' ].Borders[2].Weight := 3; 1-左2-右3-顶4-底5-斜( \ ) 6-斜( / )12) 清除第一行第四列单元格公式:ExcelApp.ActiveSheet.Cells[1,4].ClearContents;13) 设置第一行字体属性:ExcelApp.ActiveSheet.Rows[1]/doc/af17851 593.html, := '隶书'; ExcelApp.ActiveSheet.Rows[1].Font.Color := clBlue; ExcelApp.ActiveSheet.Rows[1].Font.Bold := True; ExcelApp.ActiveSheet.Rows[1].Font.UnderLine := True;14) 进行页面设置:a.页眉:ExcelApp.ActiveSheet.PageSetup.CenterHeader := '报表演示';b.页脚:ExcelApp.ActiveSheet.PageSetup.CenterFooter := '第&P页'; c.页眉到顶端边距2cm:ExcelApp.ActiveSheet.PageSetup.HeaderMargin := 2/0.035;d.页脚到底端边距3cm:ExcelApp.ActiveSheet.PageSetup.HeaderMargin := 3/0.035;e.顶边距2cm:ExcelApp.ActiveSheet.PageSetup.TopMargin := 2/0.035;f.底边距2cm:ExcelApp.ActiveSheet.PageSetup.BottomMargin := 2/0.035;g.左边距2cm:ExcelApp.ActiveSheet.PageSetup.LeftMargin := 2/0.035;h.右边距2cm:ExcelApp.ActiveSheet.PageSetup.RightMargin := 2/0.035;i.页面水平居中:ExcelApp.ActiveSheet.PageSetup.CenterHorizontally := 2/0.035; j.页面垂直居中:ExcelApp.ActiveSheet.PageSetup.CenterVertically := 2/0.035; k.打印单元格网线:ExcelApp.ActiveSheet.PageSetup.PrintGridLines := True;15) 拷贝操作:a.拷贝整个工作表:/doc/af17851593.html,ed.Range.Copy;b.拷贝指定区域:ExcelApp.ActiveSheet.Range[ 'A1:E2' ].Copy;c.从A1位置开始粘贴:ExcelApp.ActiveSheet.Range.PasteSpecial;16) 插入一行或一列:a. ExcelApp.ActiveSheet.Rows[2].Insert;b. ExcelApp.ActiveSheet.Columns[1].Insert;17) 删除一行或一列:a. ExcelApp.ActiveSheet.Rows[2].Delete;b. ExcelApp.ActiveSheet.Columns[1].Delete;18) 打印预览工作表:ExcelApp.ActiveSheet.PrintPreview;19) 打印输出工作表:ExcelApp.ActiveSheet.PrintOut;20) 工作表保存:if not ExcelApp.ActiveWorkBook.Saved then ExcelApp.ActiveSheet.PrintPreview;21) 工作表另存为:ExcelApp.SaveAs( 'C:\Excel\Demo1.xls' );22) 放弃存盘:ExcelApp.ActiveWorkBook.Saved := True;23) 关闭工作簿:ExcelApp.WorkBooks.Close;24) 退出Excel:ExcelApp.Quit;25) 关闭程序时,释放Excel应用对象procedure TForm1.FormDestroy(Sender: TObject);begin//关闭ExcelApp//若不进行这一步,在任务管理器中会驻留Excel进程//但可以不必关闭Excel (eclApp.Quit),这样,操作员可以继续编辑或打印表格ExcelApp:= Unassigned;end;25) 工作区已用的最大行数rcount:=ExcelApp.WorkSheets[1].usedrange.rows.count;26) 是否提示存盘excelapp.DisplayAlerts:=false;。
vfp与excel
SET DEFAULT TO e:\xingyyoleApp=CREATEOBJECT("Excel.Application")oleApp.Visible=.T. &&显示Excel。
oleApp.Workbooks.Add&&设置单元格的值(报表标题):oleApp.Cells(1,1).Value="山东省临沂市费县实验中学"oleApp.Cells(2,1).Value="学生成绩表"oleApp.Cells(4,1).Value="报名序号"oleApp.Cells(4,2).Value="姓名"oleApp.Cells(4,3).Value="身份证号"oleApp.Cells(4,4).Value="语文"oleApp.Cells(4,5).Value="数学"oleApp.Cells(4,6).Value="总分"&&打开数据表,取得该表的记录数use cjjl=RECCOUNT()-1&&将数据表中的记录数据放入Excel工作簿的单元格中FOR i=0 TO jlgo i+1 && 第i+1条记录oleApp.Cells(5+i,1).Value=cj.bmxholeApp.Cells(5+i,2).Value=cj.xmoleApp.Cells(5+i,3).Value=cj.sfzholeApp.Cells(5+i,4).Value=cj.ywoleApp.Cells(5+i,5).Value=cj.sx&&计算总分:oleApp.Cells(5+i,6).Value=cj.yw+cj.sxENDFORoleApp.ActiveWorkbook.SaveAs("e:\xingyy\temp.XLS")--------------------------------------------------------------------------------------------------------------------------------------------------要调用Excel,有必要先了解下述命令语句及其功能。
VFP操作Excel
首先创建Excel 对象,使用ComObj:var ExcelApp: Variant;ExcelApp := CreateOleObject( 'Excel.Application' );1) 显示当前窗口:ExcelApp.Visible := True;2) 更改Excel 标题栏:ExcelApp.Caption := '应用程序调用Microsoft Excel';3) 添加新工作簿:ExcelApp.WorkBooks.Add;4) 打开已存在的工作簿:ExcelApp.WorkBooks.Open( 'C:\Excel\Demo.xls' );5) 设置第2个工作表为活动工作表:ExcelApp.WorkSheets[2].Activate;或ExcelApp.WorksSheets[ 'Sheet2' ].Activate;6) 给单元格赋值:ExcelApp.Cells[1,4].Value := '第一行第四列';7) 设置指定列的宽度(单位:字符个数),以第一列为例: ExcelApp.ActiveSheet.Columns[1].ColumnsWidth := 5;8) 设置指定行的高度(单位:磅)(1磅=0.035厘米),以第二行为例: ExcelApp.ActiveSheet.Rows[2].RowHeight := 1/0.035; // 1厘米9) 在第8行之前插入分页符:ExcelApp.WorkSheets[1].Rows[8].PageBreak := 1;10) 在第8列之前删除分页符:ExcelApp.ActiveSheet.Columns[4].PageBreak := 0;11) 指定边框线宽度:ExcelApp.ActiveSheet.Range[ 'B3:D4' ].Borders[2].Weight := 3; 1-左2-右3-顶4-底5-斜( \ ) 6-斜( / )12) 清除第一行第四列单元格公式:ExcelApp.ActiveSheet.Cells[1,4].ClearContents;13) 设置第一行字体属性:ExcelApp.ActiveSheet.Rows[1] := '隶书'; ExcelApp.ActiveSheet.Rows[1].Font.Color := clBlue; ExcelApp.ActiveSheet.Rows[1].Font.Bold := True; ExcelApp.ActiveSheet.Rows[1].Font.UnderLine := True;14) 进行页面设置:a.页眉:ExcelApp.ActiveSheet.PageSetup.CenterHeader := '报表演示';b.页脚:ExcelApp.ActiveSheet.PageSetup.CenterFooter := '第&P页'; c.页眉到顶端边距2cm:ExcelApp.ActiveSheet.PageSetup.HeaderMargin := 2/0.035; d.页脚到底端边距3cm:ExcelApp.ActiveSheet.PageSetup.HeaderMargin := 3/0.035;e.顶边距2cm:ExcelApp.ActiveSheet.PageSetup.TopMargin := 2/0.035;f.底边距2cm:ExcelApp.ActiveSheet.PageSetup.BottomMargin := 2/0.035;g.左边距2cm:ExcelApp.ActiveSheet.PageSetup.LeftMargin := 2/0.035;h.右边距2cm:ExcelApp.ActiveSheet.PageSetup.RightMargin := 2/0.035;i.页面水平居中:ExcelApp.ActiveSheet.PageSetup.CenterHorizontally := 2/0.035; j.页面垂直居中:ExcelApp.ActiveSheet.PageSetup.CenterVertically := 2/0.035; k.打印单元格网线:ExcelApp.ActiveSheet.PageSetup.PrintGridLines := True;15) 拷贝操作:a.拷贝整个工作表:ed.Range.Copy;b.拷贝指定区域:ExcelApp.ActiveSheet.Range[ 'A1:E2' ].Copy;c.从A1位置开始粘贴:ExcelApp.ActiveSheet.Range.PasteSpecial;16) 插入一行或一列:a. ExcelApp.ActiveSheet.Rows[2].Insert;b. ExcelApp.ActiveSheet.Columns[1].Insert;17) 删除一行或一列:a. ExcelApp.ActiveSheet.Rows[2].Delete;b. ExcelApp.ActiveSheet.Columns[1].Delete;18) 打印预览工作表:ExcelApp.ActiveSheet.PrintPreview;19) 打印输出工作表:ExcelApp.ActiveSheet.PrintOut;20) 工作表保存:if not ExcelApp.ActiveWorkBook.Saved thenExcelApp.ActiveSheet.PrintPreview;21) 工作表另存为:ExcelApp.SaveAs( 'C:\Excel\Demo1.xls' );22) 放弃存盘:ExcelApp.ActiveWorkBook.Saved := True;23) 关闭工作簿:ExcelApp.WorkBooks.Close;24) 退出Excel:ExcelApp.Quit;25) 关闭程序时,释放Excel应用对象procedure TForm1.FormDestroy(Sender: TObject);begin//关闭ExcelApp//若不进行这一步,在任务管理器中会驻留Excel进程//但可以不必关闭Excel (eclApp.Quit),这样,操作员可以继续编辑或打印表格ExcelApp:= Unassigned;end;25) 工作区已用的最大行数rcount:=ExcelApp.WorkSheets[1].usedrange.rows.count;26) 是否提示存盘excelapp.DisplayAlerts:=false;。
VF中控制EXCEL的常用操作
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 select 0 use agcallop &&选择被导出的表 num=reccount() &&求导出总记录数 go top i=5 ef.range("F1:K1").Select &&选择标题栏所在单元格 ef.Selection.Merge &&合并单元格 with ef.range("F1 ") &&设置标题及字体属性 .value='客户服务部业务代表工作量情况统计表' ="黑体" .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 为居中,2 为右对齐 ef.range("H2").value='统计时间:'+dtoc(date())+' 打印日期: '+dtoc(date()) ef.Rows("3:4").Select with ef.Selection .HorizontalAlignment = 3 &&设置 3、4 行为水平对齐
VFP与EXCEL的几种交互编程方法
VFP与EXCEL的几种交互编程方法VFP与EXCEL的几种交互编程方法一、EXECL驱动VFPEXECL内置的VBA语言(Visual Basic For Application)为EXECL功能的扩展提供了便利的手段,用户可使用该语言直接驱动VFP完成数据检索等功能。
程序首先生成一个VFP对象,然后用VFP的DoCmd方法执行VFP摸索命令串,其摸索结果再借助于VFP的DateToClip方法拷贝至剪切板,最后VBA将其粘贴至工作表的正确位置。
Sub FoxTest()Dim oFox As ObjectDim SLesson As StringDim SCommand As StringSet oFox = CreateObject("VisualFoxPro.Application") '启动VFP,生成VFP对象Sheets("查询").SelectSLesson = Range("课程名") '在名为“课程名”的单元格中得到欲查询的课程名称Sheets.Add '产生新的工作表单/doc/e66089125.html, = Slesson '指定工作表单的名称与课程名称相同SCommand = "SELECT 学号,语文,数学 FROM d:\vfp\学生成绩表 WHERE "+ SLesson + "<60 INTO CURSOR TEMP" '形成VFP 查询命令串oFox.DoCmd Scommand '执行VFP命令串oFox.DataToClip "temp", , 3 '将搜索结果以文本方式拷贝至剪切板Range("a1:a1").Select '指向拷贝目标区域左上角单元ActiveSheet.Paste '粘贴搜索结果End Sub为便于使用,作者在EXECL中自制了一名为“搜索”的工具栏及一名为“开始搜索”的按钮,并将上述宏程序段与自制按钮相关联,按下此按钮即可运行程序并在EXCEL中得到要求的数据。
VFP表与Excel表的交互使用
辽 宁 师 专 学 报
J u n l f a n n e c e sColg o r a Lio i  ̄T a h r l e o e 学术研究】
V P表 与 E cl 的交 互 使 用 F xe 表
李丽妹
( 阳 职 业技 术 学 院 ,辽 宁 辽 阳 1 lO ) 辽 1O 4
摘 要 :E cl 报 表 打 印方 面 优 势 突 出 , 可 以 弥补 v P 中 报表 工 具 的 不 足 .二 者 交 互使 用 的 方 法 很 多 。 xe 在 F 结 合 实 例 重 点介 绍导 入 、导 出法 .
C P O E . B O E NO ( > 1 O Y T T MP D F F R R C )
GO TOP
F R lC u t Fe N m O o n =1TO l i d u n n l
lS r g = lSrn + FI LD (1C u t) + AS + c ti n c tig E n on
2 导入 、导出法 2 1 在 V P中导入 E cl . F x e 表
如何 在 VF P中导 入 E cl 格 数据 ,使 之成 为 VF xe 表 P中能识别 的表 呢 ?首先 将 在 E cl xe 中制作好 的 电 子表 格保存在 磁盘上 ,如 E: 原 表 . l 然后 在 VF \ xs , P中使用下 面三 种方法 之 一将其 导入 . ( )使用 VF 1 P的导入对 话框 .从 V P主 菜单 中选 择 “ F 文件 / 导入 …” 打开 “ 人 ”对话 框 ,在对 话 导 框 中选 择文件 格式 ,V P . F 6 0中默认为 Mi oot xe 5 0和 9 ( L ) c sf E cl . r 7 X S ,在 “ 来源 于 ”框 中输 入该 E cl xe 工作簿 名“ \原 表 .l , “ E: xs 在 工作 表” 中输入 来源于 工作 簿 的工 作表 ,如 set ,然后 输入 D F数 据表 ” h e1 B 名 和路 径 ,按 “ 确定 ” 即可 . ( )使 用 V P的 I O T命 令 导人 .I OR F OM E: 2 F MP R MP T R \原 表 . l T E X 5 S E T Xs YP L H E set” hel .命令 中 TY E选 项 可 限制 导人 文件 的类 型 :X S可 从 Mi oot E cl . 、3 0和 4 0的工作 P L c sf r xe 20 . .
Excel与VFP的有机结合4页word
Excel与VFP的有机结合VFP有很强大的报表设计和报表输出功能,可设计报表要耗费很多的时间和精力,而且用户的需求常常会有变化,报表很不方便随之改变。
如果报表内容稍微有改变就需要修改程序,那么在应用软件的维护中就会有很多的麻烦,Excel就能够省去这样的麻烦。
Excel的兼容性强且操作简单,很多程序员可以利用其中的报表功能省去程序修改的精力。
在实际操作中,VFP和Excel分别来自两个不同的应用系统,将二者结合到一起,使它们的功能可以优势互补。
在我们的教学中,很多专业的专业技能都要求学生可以熟练高效地进行报表制作,教师在教学中探究二者之间的整合,可以让学生学习到更加实用的技能,在日后的工作竞争中占据优势地位。
Excel是微软公司开发的电子表格软件,是办公组件中的一个,作为office办公套装中的重要组成部分,它可以对各种数据和表格进行处理和分析。
Excel的这些优点使得它成为了财务管理、行政管理等专业学生的必备技能,而如何将Excel与VFP有机结合,是本文要探讨的问题。
1 VFP与Excel有机结合的实际应用VFP和Excel各具有其在各自?I域的应用优势,也有其技术上的缺陷。
VFP在报表的设计和输出上做得很好,可是,应对随时可能发生的需求上的变化,VFP在操作上就显得有些笨重,常常需要改变相应的程序设定,这给相关操作带来了很大的不便。
Excel是办公中的常用软件,但是它的公式运算却并不尽如人意。
在实际应用中,二者如果可以实现融合,各自发挥其在报表中的长处,用VFP把自动处理后的报表输出,放在Excel中进行自动化的处理,让功能与灵活都可以实现,那么这就可以大大地提高办公效率。
1.1 通过复制功能和粘贴功能对数据进行软件的转换用户可以用VFP进行数据处理,比如数据的插入、排序、合并等指令,然后将处理后的数据输出,放到Excel表格中,等待随时有应用上的需求随时进行更改和处理。
更简单的方法,可以把输出的数据的某些条件直接放在Excel的条件区域中,再用VFP去读取其中的条件,根据不同的条件筛选数据。
Excel与VFP交互编程方法
Excel与VFP交互编程方法
康从英;毛家伟
【期刊名称】《临沂大学学报》
【年(卷),期】2001(023)004
【摘要】通过有关实例,介绍了利用OLE、ADO、DDE技术实现Excel和VFP的交互编程方法,达到了Excel与VFP的有机结合.
【总页数】4页(P127-130)
【作者】康从英;毛家伟
【作者单位】临沂师范学院,计算机与信息科学系,山东,临沂,276005;临沂市教育委员会,山东,临沂,276000
【正文语种】中文
【中图分类】TP391.13
【相关文献】
1.VFP与Excel交互数据的实现方法 [J], 俞扬信;朱旦辰
2.VFP与Excel交互编程在水情数据库中的应用 [J], 宋文献;董雯
3.试谈用VFP6.0高效准确获取汉字拼音首字母编程方法 [J], 姚克义
4.交互运用VFP与Excel制作财务报表 [J], 殷凤琴;袁亚丽
5.VFP表与Excel表的交互使用 [J], 李丽姝
因版权原因,仅展示原文概要,查看原文内容请购买。
基于VBA的Visual FoxPro与Excel的交互编程
基于VBA的Visual FoxPro与Excel的交互编程
王志梅
【期刊名称】《温州职业技术学院学报》
【年(卷),期】2003(003)002
【摘要】Excel作为一种优秀的OA软件及Visual FoxPro作为一种较流行的数据库管理软件,两者在各自的应用领域内均得到了广泛的应用且两种软件还具有良好的交互编程能力.本文主要介绍了用Excel VBA驱动VFP完成数据检索及美化数据报表的一些方法.并给出了实例及关键程序片断.
【总页数】3页(P35-37)
【作者】王志梅
【作者单位】温州职业技术学院,浙江,温州,325035
【正文语种】中文
【中图分类】TP311.11
【相关文献】
1.基于Visual FoxPro的CAI课件鼠标智能交互技术 [J], 李贤志
2.VBA编程实现Word和Excel数据交互 [J], 胡新平;沈洪妹
3.基于VisualFoxPro的Excel文件与文本文件的转换 [J], 薛转花
4.基于Excel VBA与CAD VBA联合编程技术实现快速编制绘图程序 [J], 李祥;李遥玉
5.如何从FoxPro2.x编程转向Visual FoxPro3.0 [J], 姜浩
因版权原因,仅展示原文概要,查看原文内容请购买。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
VFP与Excel交互编程---------------------------------------------------------------------------------VFP(Visual Foxpro)是一种关系型数据库管理系统,由于其强大的数据处理能力及良好的兼容性,使其成为数据库应用程序开发人员强有力的工具而广为使用; 而Excel则是一个优秀的电子表格处理软件,在兼容性、操作界面、公式运算、图表等方面有着独到的优势,成为广大办公应用人员必备的首选软件。
上述两种软件在各自的应用领域均得到了广泛的应用,同时上述两种软件还具有良好的交互编程能力,为两者相辅相成、取长补短奠定了良好的基础。
本文将结合实例介绍VFP与Excel交互编程的方法,在VFP中除了使用OLE技术外,还可使用DDE技术与外部服务器进行数据交换,本文主要讲解VFP中使用OLE技术与Excel 交换数据,Excel中借助内置的VBA使用VFP提供的Application对象来调用VFP中的一些功能。
其功能可简述如下:VFP数据表“学生成绩.DBF”中含“学号、姓名、语文、数学”等字段,示例程序将从Excel工作簿“VFP交互.XLS”的工作表“查询”中用“条件”区域(一般为一个矩形区中的数据,该区域名称指定为“条件”,数据形如“语文>60”、“数学<90”等)中的数据作为查询的条件,用“连接条件”区域(一般为一个单元格,其值为“or”或者“and”)来获取组合“条件”的逻辑连接,并将该连接信息的内容以工作表的形式显示出来,然后调用VFP中针对给定表的SQL查询来找出给定条件的记录并显示到Excel中。
下列程序均在VFP 6.0与Excel 2000中调试通过。
Excel驱动VFPExcel内置的VBA语言(Visual Basic For Application)为Excel功能的扩展提供了便利的手段,用户可使用该语言直接驱动VFP完成数据检索等功能。
程序首先生成一个VFP对象,然后用VFP的DoCmd方法执行VFP搜索命令串,其搜索结果再借助于VFP的DataToClip 方法拷贝至剪切板,最后VBA将其粘贴至工作表的正确位置,为了每次运行时能将结果插入到工作表中,依次对操作的工作表以“搜索结果”、“搜索结果1”等进行编号。
Sub exceluseFox ()Dim oFox As Object ’声明oFox为一个对象Dim SCommand As String’SQL对应的命令串变量Dim cell As VariantDim choice As StringDim join As StringDim first As BooleanDim found As Boolean ’搜索结果标志,若表单中有搜索结果,则为真Set oFox = CreateObject(“VisualFoxPro.Application”)’启动VFP,生成VFP对象Sheets(“查询”).Select’选择对应的工作表“查询”join = Range(“连接条件”)’在单一表格中的一个元素,其值为and或者orchoice = “”’置连接串初值为空first = True ’一般情况下连接串后需要加上逻辑连接符and 或or,首次例外For Each cell In Range(“条件”) ’产生连接条件,形成where语句的连接逻辑串If first Thenchoice = choice + cell ’形成第一次出现的where子句后的字符串first = False’修改首次进入标志,以后的连接均需要加上逻辑连接符Elsechoice = choice + “ ” + join + “ ” + cell’join的值是and或者是orEnd IfNext cell** ’产生新的工作表单’找一个不重复的工作表名found = False’工作表名中前四个汉字有没有“搜索结果”的标志变量n = 1For Each cell In WorksheetsIf InStr(1, , “搜索结果”) <> 0 Thenfound = True ’找到对应的工作表If n < Val(Mid( + Space(2), 5, 2)) Thenn = Val(Mid( + Space(2), 5, 2))’形成形如搜索结果1、搜索结果2等的表单名End IfEnd IfNext cellIf Not found Then** = “搜索结果”Elsen = n + 1 ’值增1** = “搜索结果”& n’形成工作表名End IfSCommand =“SELECT * FROM d:vfp学生成绩表WHERE”+choice +“INTO CURSOR TEMP”’形成VFP查询命令串** Scommand ’执行VFP命令串** “temp”, , 3’将搜索结果以文本方式拷贝至剪切板Range(“a1: a1”).Select’指向拷贝目标区域左上角单元** ’粘贴搜索结果End Sub上述Excel中的区域名称(如“条件”和“连接条件”名称)的设定方法是,在Excel中选择菜单“插入->名称->定义”来完成对给定区域名称的设定,这个名称可以在VBA中访问,如前述中的“条件”和“连接条件”。
VFP使用ExcelOLE(Object Linking and Embedding)对象链接与嵌入,是Windows应用程序间相互传递和共享数据的一种有效方法。
VFP借助于OLE不仅可共享其他应用程序的数据,而且还能以对象方式直接控制其他应用程序的运行,从而进一步扩展VFP的功能。
VFP支持直接在程序中创建、使用和控制OLE对象,实现OLE自动化。
作为OLE客户,VFP与作为OLE服务器的Excel具有良好的编程接口,下述程序段用OLE方式实现所要求的功能。
程序首先生成一个Excel的OLE对象OleApp以便对其进行操作,然后利用OLE功能从Excel表单中获取欲查询的条件,并控制Excel生成新的唯一的工作表,通过找寻当前操作的所有工作表达到名称的唯一,VFP的查询结果仍然使用剪切板的方式传递至Excel工作表中。
local condition,where1,first,scommand,cell,newsheet,found1,nOleApp=CreateObject(“Excel.Application”)&& 打开Excel,产生OLE对象**=“VFP交互编程”&& 指定标题栏名称**=.T.&& 置Excel可见**(“d:vfpVFP交互.xls”)&& 打开Excel工作簿,用户也可以修改连接条件或者查询条件where1=“”&&保存SQL中where子句的变量first=.t.&&置首次进入“查询”工作表中“条件”区域标志found1=.f.n=1DO WHILE .T.WITH OleApp.ApplicationnAnswer = MessageBox(“开始搜索?”, 32+4, “搜索指定数据”) &&显示搜索信息IF (.NOT. (nAnswer=6))&& 如按下“Yes”按钮,则开始搜索,反之退出EXITENDIF.Sheets(“查询”).Select&& 选取示例中的对应工作表condition=.range(“连接条件”).value&&得到“连接条件”区域中的逻辑连接符for each cell in .range(“条件”).value&&将表单区域内所有单元的数据拼接以形成where的连接逻辑串If first ThenWhere1 = Where1 + cell&&首次进入时where子句中串前不需要逻辑连接符first = .f. &&置非首次进入标志ElseWhere1=Where1 +“ ”+condition +“ ”+ cell&&这里condition的值取and或者orEndIfnext for.Sheets.Add && 新建一工作表单&&下面的for …each子句是用于找寻有否对应的工作表,若有则在搜索结果1、搜索结果2……搜索结果n中得到最大的n值以便产生下一个比n大1的新工作表“搜索结果&(n+1)”for each newsheet in .worksheetsif “搜索结果”$ n=max(val(subset(+space(2),9,2)),n) &&得到最大的n值found1=.t. &&置找到工作表中前四个汉字是“搜索结果”的工作表endifnext forif not found1 =“搜索结果1”&& 指定工作表单的名称else=“搜索结果”+str(n+1,2)&&得到唯一的工作表endifSCommand = “SELECT * FROM d:vfp学生成绩表WHERE ”+ALLTrim(where1) + “INTO CURSOR TEMP”&& 形成VFP查询命令串&Scommand && 执行VFP命令串_VFP.DataToClip(“TEMP”, , 3)&& 将搜索结果以文本方式拷贝至剪切板.Range(“a1: a1”).Select&& 指向拷贝目标区域左上角单元.ActiveSheet.Paste&& 粘贴搜索结果ENDWITHENDDO**&& 关闭Excel,保存更新后的工作簿文件结束语VFP与Excel的交互能力是很强的,用户可以使用VFP处理数据库的一些运算,如插入、排序、合并、选择等,将结果交由Excel中进行一些后期的处理,甚至可以将一些抽取数据的条件直接加入到Excel的条件区域中,由VFP来读取条件区域进行数据的筛选。
总之,只要能充分利用好各自的优点,理解交互的接口方法,就一定能够编写出较适用的程序,满足实际工作的需要。