




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
VisualFoxpro中如何實(shí)現(xiàn)對EXCEL表格的操作VFP和Excel都可以用來進(jìn)行處理數(shù)據(jù)庫表格,如果巧妙地將二者的優(yōu)點(diǎn)結(jié)合起來,將會大大方便我們的工作。比如我們可以利用VFP進(jìn)行處理數(shù)據(jù),而利用Excel的預(yù)覽打印功能進(jìn)行報表打印。這就需要我們在VFP中直接來控制Excel。下面就在開發(fā)VFP應(yīng)用項(xiàng)目時對Excel的控制作一下介紹:1.創(chuàng)建Excel對象oExcel=CREATEOBJECT("Excel.application")2.添加新工作簿oExcel.Workbooks.add3.設(shè)置第3個工作表為激活工作表oExcel.Worksheets("sheet3").Activate4.打開指定工作簿oExcel.Workbooks.Open("c:\temp\ll.xls")5.顯示Excel窗口oExcel.visible=.t.6.更改Excel標(biāo)題欄oExcel.Caption="VFP應(yīng)用程序調(diào)用MicrosoftExcel"7.給單元格賦值oExcel.cells(1,4).value=XM(XM為數(shù)據(jù)庫字段名)8.設(shè)置指定列的寬度(單位:字符個數(shù))oExcel.ActiveSheet.Columns(1).ColumnWidth=59.設(shè)置指定行的高度(單位:磅)oExcel.ActiveSheet.Rows(1).RowHeight=1(設(shè)定行高為1磅,1磅=0.035厘米)oExcel.ActiveSheet.Rows("50:100").RowHeight=1&&設(shè)置第50行至100行的高度10.在第18行之前插入分頁符oExcel.Worksheets("Sheet1").Rows(18).PageBreak=111.在第4列之前刪除分頁符oExcel.ActiveSheet.Columns(4).PageBreak=012.指定邊框線寬度(Borders參數(shù)如下)ole.ActiveSheet.Range("b3:d3").Borders(2).Weight=313.設(shè)置四個邊框線條的類型oExcel.ActiveSheet.Range("b3:d3").Borders(2).LineStyle=1(其中Borders參數(shù):1-左、2-右、3-頂、4-底、5-斜、6-斜/;LineStyle值:1與7-細(xì)實(shí)、2-細(xì)虛、4-點(diǎn)虛、9-雙細(xì)實(shí)線)14.設(shè)置頁眉o(jì)Excel.ActiveSheet.PageSetup.CenterHeader="報表1"14.設(shè)置頁眉(字體大小)oExcel.ActiveSheet.PageSetup.CenterHeader="&50報表1"&&'&'后面的50可以自定義,表示字體的大小15.設(shè)置頁腳oExcel.ActiveSheet.PageSetup.CenterFooter="第&P頁"15.設(shè)置頁腳(字體大小)oExcel.ActiveSheet.PageSetup.CenterFooter="&28第&P頁"&&'&'后面的28可以自定義,表示字體的大小16.設(shè)置頁眉到頂端邊距為2厘米o(hù)Excel.ActiveSheet.PageSetup.HeaderMargin=2/0.03517.設(shè)置頁腳到底邊距為3厘米o(hù)Excel.ActiveSheet.PageSetup.FooterMargin=3/0.03518.設(shè)置頂邊距為2厘米o(hù)Excel.ActiveSheet.PageSetup.TopMargin=2/0.03519.設(shè)置底邊距為4厘米o(hù)Excel.ActiveSheet.PageSetup.BottomMargin=4/0.03520.設(shè)置左邊距為2厘米o(hù)Excel.ActiveSheet.PageSetup.LeftMargin=2/0.03521.設(shè)置右邊距為2厘米o(hù)Excel.ActiveSheet.PageSetup.RightMargin=2/0.03522.設(shè)置頁面水平居中oExcel.ActiveSheet.PageSetup.CenterHorizontally=.t.23.設(shè)置頁面垂直居中oExcel.ActiveSheet.PageSetup.CenterVertically=.t.24.設(shè)置頁面紙張大小(1-窄行851139-寬行14119:A4)oExcel.ActiveSheet.PageSetup.PaperSize=125.打印單元格網(wǎng)線oExcel.ActiveSheet.PageSetup.PrintGridlines=.t.26.拷貝整個工作表oExcel.ActiveSheet.UsedRange.Copy27.拷貝指定區(qū)域oExcel.ActiveSheet.Range("A1:E2").Copy28.粘貼oExcel.WorkSheet("Sheet2").Range("A1").PasteSpecial29.在第2行之前插入一行oExcel.ActiveSheet.Rows(2).Insert30.在第2列之前插入一列oExcel.ActiveSheet.Columns(2).Insert31.設(shè)置字體oExcel.ActiveSheet.Cells(2,1).Font.Name="黑體"32.設(shè)置字體大小oExcel.ActiveSheet.Cells(1,1).Font.Size=2533.設(shè)置字體為斜體oExcel.ActiveSheet.Cells(1,1).Font.Italic=.t.34.設(shè)置整列字體為粗體oExcel.ActiveSheet.Columns(1).Font.Bold=.t.35.清除單元格公式oExcel.ActiveSheet.Cells(1,4).ClearContents36.打印預(yù)覽工作表oExcel.ActiveSheet.PrintPreview37.打印輸出工作表oExcel.ActiveSheet.PrintOut38.oExcel.CommandBars(1).Controls(1).accChild(18).Execute&&打?。ú藛涡蛱?8為Excel2003的‘打印’項(xiàng))&&不同版本Excel的菜單序號可以通過以下程序取得*(需要在VFP7.0以上運(yùn)行)oXls=GETOBJECT("","excel.sheet")XlApp=oXLS.APPLICATIONXlSheet=XlApp.ActiveSheetbars=xlapp.CommandBars.COUNTSTR=''FORi=1TObarsSTR=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).accChildCountFORj=1TObars2TRYobj=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.accChildCountTRYIFNOTEMPTY(obj.CONTROLS(k).accname)STR=STR+CHR(13)+''+ALLTRIM(STR(k))+'、'+obj.CONTROLS(k).accName+'(ID:'+ALLTRIM(STR(obj.CONTROLS(k).ID))+')'ENDIFCATCHEXITENDTRYENDFORCATCHEXITENDTRYENDFORWAITWINDOWSALLTRIM(STR(i))+'/'+ALLTRIM(STR(bars))+''+STR(i/bars*100,10,2)+'%'NOWAITENDFORSAVETOXLS.txtALLLIKESTRMODIFYCOMMANDXLS.txtRETURN39.工作表另存為oExcel.ActiveWorkbook.SaveAs("c:\temp\22.xls")檢測當(dāng)前目錄是否有同名的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)IFFILE(lcFileName)DELETEFILE(lcFileName)ENDIFoExcel.ActiveWorkbook.SaveAs(lcFileName)ENDIFENDIF40.放棄存盤&&避免出現(xiàn)保存對話框oExcel.ActiveWorkbook.saved=.t.41.存盤oExcel.ActiveWorkbook.save42.關(guān)閉工作簿oExcel.Workbooks.close43.退出ExceloExcel.quitRELEASEoExcel&&只有釋放對象變量,EXCEL進(jìn)程才會完全關(guān)閉44.合并單元格oExcel.ActiveSheet.Range("A4:B5").MergeCells=.t.45.下列設(shè)置大家自己理解Withcrfole.ActiveSheet.PageSetup.LeftHeader=chr(13)+"左頁眉".CenterHeader="中頁眉".RightHeader="右頁眉".LeftFooter="左頁腳".CenterFooter="中頁腳".RightFooter="右頁腳".orientation=1&&1豎排,2橫排EndWithWithcrfole.Range("A4:C4").MergeCells=.t..WrapText=.f..Orientation=0.AddIndent=.f..ShrinkToFit=.f.EndWith46.文本對齊oExcel.range("A4:c4").HorizontalAlignment=1&&水平(1-默認(rèn)、2-靠左、3-居中、4-靠右、5-填充、6=兩端對齊、7=跨列居中、8=分散對齊)oExcel.range("A4:c4").VerticalAlignment=2&&垂直(1=靠上、2=居中、3=靠下、4=兩端對齊、5=分散對齊)47.拷貝整個工作表(含格式)oExcel.activesheet.cells.copyoExcel.sheets(1).select&&拷貝&&選擇第一工作表&&粘貼oExcel.ActiveSheet.PasteoExcel.ActiveSheet.Cells(3,4).value&&ActiveSheet為當(dāng)前的Sheet工作薄名字,Cells(3,4).value為第3行第4列的值以上控制調(diào)用語句在中文VFP5.0企業(yè)版下運(yùn)行通過,運(yùn)行環(huán)境為Excel97及中文Windows9848.顯示某個單元格的批注內(nèi)容oExcel=CREATEOBJECT("Excel.application")oExcel.Workbooks.OPEN("d:\TEST\testa.xls")oExcel.VISIBLE=.T.?oExcel.Range("B5").Comment.Text&&顯示B5單元格的批注內(nèi)容oExcel.Workbooks.CLOSEoExcel.QUITRELEASEoExcel49.oExcel.ActiveSheet.PageSetup.PrintTitleRows="$1:$1"&&每頁都打印行標(biāo)頭(每頁頂部出現(xiàn)的單元格的行)50.保護(hù)工作表:oExcel.ActiveSheet.PROTECT('密碼',.T.,.T.,.T.,.T.,.T.,.T.,.T.,.T.,.T.,.T.,.T.,.T.,.T.,.T.,.T.)51.保護(hù)工作薄oExcel.ActiveWorkbook.PROTECT('密碼',.T.,.T.)第一個.T.:保護(hù)工作簿結(jié)構(gòu)第二個.T.:保護(hù)工作簿窗口52.設(shè)置允許用戶編輯區(qū)域oExcel.ActiveSheet.Protection.AllowEditRanges.Add("區(qū)域3",oExcel.ActiveSheet.Range("A2:D5"))53.如果不想在宏運(yùn)行時被無窮無盡的提示和警告消息所困擾,就將本屬性設(shè)置為.F.oExcel.DisplayAlerts=.F.如果不想在宏運(yùn)行時被無窮無盡的提示和警告消息所困擾,就將本屬性設(shè)置為False;這樣每次出現(xiàn)需用戶應(yīng)答的消息時,MicrosoftExcel將選擇默認(rèn)應(yīng)答。如果將本屬性設(shè)置為False,那么宏運(yùn)行結(jié)束后,MicrosoftExcel并不自動將其設(shè)置回True。故當(dāng)宏運(yùn)行結(jié)束后,都應(yīng)將本屬性設(shè)置回True值。54.將當(dāng)前工作表中的已用區(qū)域(只讀)存入數(shù)組。strPath='D:\TEST\123.xls'LOCALoExceloExcel=CREATEOBJECT("Excel.Application")oExcel.WorkBooks.OPEN(strPath)arrTableInfo=oExcel.ActiveSheet.UsedRange.VALUE&&將當(dāng)前工作表中的已用區(qū)域(只讀)存入數(shù)組。oExcel.QUITRELEASEoExcelINSERTINTO表名FROMarrTableInfo55.設(shè)置excel批注的字體(excel2000實(shí)現(xiàn)了,如下:)ole.Range("a3").Comment.Shape.Select&&此命令要求批注的Visible=.t.ole.selection.Font.size=9ole.selection.F="黑體"ole.selection.Font.bold=.f.注:該組命令要求先選中批注框,否則寫成ole.Range("a3").Comment.Shape.Font.size=9則出錯,不知為何!如何取得當(dāng)前EXCEL表中工作表的數(shù)目及各工作表的名稱?CLEARLOCALlnSheetCountoExcel=CREATEOBJECT("EXCEL.APPLICATION")&&創(chuàng)建Excel對象oExcel.WORKBOOKS.OPEN("c:\111\321.xls")&&打開指定工作簿W(wǎng)ITHoExcellnSheetCount=.WorkBooks(1).Sheets.Count&&統(tǒng)計(jì)工作表數(shù)量ENDWITH?'當(dāng)前EXCEL表中工作表的數(shù)目為:'+ALLTRIM(STR(lnSheetCount))FOREACHoMyVarINoExcel.sheets?'當(dāng)前EXCEL表中工作表的名稱分別為'+oMyV&&顯示Excel表中所有工作表NEXToMyVaroExcel.WORKBOOKS.CLOSE&&關(guān)閉工作簿oExcel.QUIT&&退出Excel獲取工作表名稱在以下示例中,創(chuàng)建了一個microsoftexcel實(shí)例,添加了一個新的工作簿。使用foreach語句顯示工作簿中每個工作表的名稱。此示例要求在運(yùn)行示例的機(jī)器上正確安裝microsoftexcel。oExcel=CREATE("Excel.Application")oExcel.Workbooks.ADDFOREACHoMyVarINoExcel.sheets?oMyVNEXToMyVarExcel報表巧生成巧讓FoxPro數(shù)據(jù)生成Excel報表VisualFoxPro是應(yīng)用廣泛的前臺數(shù)據(jù)庫開發(fā)平臺之一,因此在我們?nèi)粘9ぷ髦袝r常會遇到DBF數(shù)據(jù)文件。然而隨著辦公自動化的普及,越來越多的時候需要將DBF文件轉(zhuǎn)化為Excel電子文檔。常用轉(zhuǎn)化方法是在FoxPro中用Copy命令進(jìn)行格式轉(zhuǎn)化或直接用Excel打開DBF文件。這兩種方式雖然都能達(dá)到目的,卻不能得到格式規(guī)范、可以直接打印輸出的報表,且輸出的Excel文件中,無法對數(shù)據(jù)類型進(jìn)行有效轉(zhuǎn)換,極易出現(xiàn)數(shù)據(jù)統(tǒng)計(jì)錯誤。有沒有更好的方法呢?這里有一個更加通用的方法,在VFP中調(diào)用Excel,可以由DBF文件直接生成格式如下圖所示一樣復(fù)雜的Excel報表(如圖1)。Excel報表具體過程如下:編輯推薦文章●新鮮接觸Excel2000XP●Excel2000公式應(yīng)用的幾條經(jīng)驗(yàn)●Excel2000函數(shù)應(yīng)用之信息函數(shù)假設(shè)我們要將表Agcallop.dbf文件輸出為Excel格式文檔,報表形如圖1所示。為使通用性更強(qiáng),頁面采用A4紙橫向輸出,默認(rèn)字體為宋體10號,頁腳處添加頁號。部分程序代碼如下:m.outfilename=putfile('輸出結(jié)果','agcallop','xls')&&取導(dǎo)出文件名稱ef=CREATEOBJECT('Excel.application')&&調(diào)用Excel程序ef.Workbooks.add&&添加工作簿ef.Worksheets("sheet1").Activate&&激活第一個工作表ef.visible=.t.&&顯示Excel界面ef.Cells.Select&&選擇整張表ef.Selection.Font.Size=10&&設(shè)置整表默認(rèn)字體大小為10select0useagcallop&&選擇被導(dǎo)出的表num=reccount()&&求導(dǎo)出總記錄數(shù)gotopi=5ef.range("F1:K1").Select&&選擇標(biāo)題欄所在單元格ef.Selection.Merge&&合并單元格withef.range("F1")&&設(shè)置標(biāo)題及字體屬性.value='客戶服務(wù)部業(yè)務(wù)代表工作量情況統(tǒng)計(jì)表'.Font.Name="黑體".Font.size=18endwithef.Rows(2).RowHeight=1/0.035&&設(shè)置第二行高度為1cmef.range("H2:O2").Select&&選定統(tǒng)計(jì)條件欄所在單元格ef.Selection.Merge&&合并單元格ef.range("H2").Font.size=10ef.range("H2").HorizontalAlignment=4&&設(shè)置內(nèi)容對齊方式為右對齊,3為居中,4為右對齊ef.range("H2").value='統(tǒng)計(jì)時間:'+dtoc(date())+'打印日期:'+dtoc(date())ef.Rows("3:4").Selectwithef.Selection.HorizontalAlignment=3&&設(shè)置3、4行為水平對齊.VerticalAlignment=2&&垂直居中.NumberFormatLocal="@"&&設(shè)置3、4行為字符型內(nèi)容endwithef.Range("A3:A4").Selectef.Selection.Merge&&縱向合并第一列3、4行ef.Range("A3").value='工號'&&設(shè)置第一列標(biāo)題內(nèi)容ef.Columns("A").Select&&整列選擇ef.Selection.HorizontalAlignment=3&&水平居中ef.Columns("A:B").Selectef.Selection.NumberFormatLocal="@"&&設(shè)置A、B列為字符型內(nèi)容ef.Range("B3:B4").Selectef.Selection.Merge&&縱向合并第二列3、4行ef.Range("B3").value='姓名'&&設(shè)置第二列標(biāo)題內(nèi)容ef.Columns("B").Select&&整列選擇ef.Selection.HorizontalAlignment=3&&水平居中ef.Range("C3:E3").Select&&橫向合并第三行C-E列ef.Selection.Mergeef.Range("C3").value='話務(wù)總量'&&第三行大標(biāo)題為“話務(wù)總量”的列ef.Range("C4").value='電話呼入量'&&“話務(wù)總量”下第1個小標(biāo)題“電話呼入量”ef.Range("D4").value='電話呼出量'&&“話務(wù)總量”下第2個小標(biāo)題“電話呼出量”ef.Range("E4").value='合計(jì)'&&“話務(wù)總量”下第3個小標(biāo)題“合計(jì)”ef.Range("F3:H3").Selectef.Selection.Mergeef.Range("F3").value='話務(wù)總時間'ef.Range("F4").value='呼入時間'ef.Range("G4").value='呼出時間'ef.Range("H4").value='合計(jì)'ef.Range("I3:K3").Selectef.Selection.Mergeef.Range("I3").value='單個話務(wù)平均時間'ef.Range("I4").value='呼入時間'ef.Range("J4").value='呼出時間'ef.Range("K4").value='合計(jì)'ef.Range("L3:L4").Selectef.Selection.Mergeef.Range("L3").value='累計(jì)工作時間'ef.Range("M3:M4").Selectef.Selection.Mergeef.Range("M3").value='無效時間'ef.Range("N3:N4").Selectef.Selection.Mergeef.Range("N3").value='錄入量'ef.Range("O3:O4").Selectef.Selection.Mergeef.Range("O3").value='有效時間比'接下來通過scan語句,依次為每一行每一列單元格賦值。為了獲得更好的打印效果,還需進(jìn)行頁面設(shè)置,如標(biāo)題行、頁面居中、橫向排版等,還可以加邊框線。以上程序在VFP6+Excel2000+Windows2000下調(diào)試通過。實(shí)際應(yīng)用中可根據(jù)需要對各項(xiàng)參數(shù)設(shè)置進(jìn)行相應(yīng)調(diào)整。VFP控制EXCL文件另存為DBF(EXCEL后臺運(yùn)行)fil=Thisform.List1.Value&&其值為一個包含路徑的文件名oExcel=CREATEOBJECT('Excel.application')oExcel.Workbooks.Open(fil)&&打開文件oExcel.Selection.AutoFilter&&關(guān)閉(如果無則打開)自動篩選oExcel.Range("A1:F1000").Select&&選中從第1行到1000行的前6列數(shù)據(jù)(另存后只有這些數(shù)據(jù))asfil=STRTRAN(UPPER(STRTRAN(fil,SUBSTR(fil,1,RAT('\',fil)),'c:\windows\desktop\cphz\')),'.XLS','.dbf')&&要保存的文件名IFFILE(asfil)DELETEFILE&asfilENDIFoExcel.ActiveWorkbook.SaveAs(asfil,8)&&另存為DBFoExcel.ActiveWorkbook.saved=.t.&&不保存當(dāng)前EXCEL表oExcel.Workbooks.close&&關(guān)閉表oExcel.quit&&退出EXCELRELEASEoExcel&&釋放變量*************例子******************lcFileName='D:\TEST.XLS'oExcel=CREATEOBJECT('Excel.application')oExcel.Workbooks.Open('&lcFileName')&&打開文件R=oExcel.SHEETS(1).UsedRange.ROWS.COUNT&&有數(shù)據(jù)的總行數(shù)C=oExcel.SHEETS(1).UsedRange.COLUMNS.COUNT&&有數(shù)據(jù)的總列數(shù)oExcel.Cells(R,C).Select&&選中數(shù)據(jù)oExcel.Columns.AutoFit&&讓所有的列寬都自動調(diào)整oExcel.DisplayAlerts=.F.oExcel.ActiveWorkbook.SaveAs('D:\TEST.DBF',8)&&另存為DBFoExcel.ActiveWorkbook.saved=.t.&&不保存當(dāng)前EXCEL表oExcel.Workbooks.close&&關(guān)閉表oExcel.quit&&退出EXCELRELEASEoExcel&&釋放變量MESSAGEBOX('Excel文件:D:\TEST.XLS另存為D:\TEST.DBF完成!',64,'信息提示')***********************************雖然用APPENDFROMtx.xlsTYPEXL8可以更簡單的追加數(shù)據(jù),但有時會導(dǎo)致程序非法錯誤退出(除非先另存為Excel5.0)'以下我做的一個簡單例子,你參考一下'功能:VB調(diào)用Excel,將一個Excel文件另存為Dbf。'前提:要安裝ExcelDimoExcelAsObjectlcSFileName="D:\test.xls"'源Excel文件名lcDFileName="D:\test1.dbf"'目標(biāo)Dbf文件名SetoExcel=CreateObject("Excel.Application")'創(chuàng)建Excel對象oExcel.Workbooks.Open(lcSFileName)'打開Excel表R=oExcel.SHEETS(1).UsedRange.ROWS.Count'有數(shù)據(jù)的總行數(shù)C=oExcel.SHEETS(1).UsedRange.Columns.Count'有數(shù)據(jù)的總列數(shù)oExcel.Cells(R,C).Select'選中數(shù)據(jù)oExcel.Columns.AutoFit'讓所有的列寬都自動調(diào)整oExcel.DisplayAlerts=Flase'不顯示提示框oExcel.ActiveWorkbook.SaveAsFileName:=lcDFileName,FileFormat:=8oExcel.ActiveWorkbook.saved=Ture'不保存當(dāng)前EXCEL表oExcel.Workbooks.Close'關(guān)閉表oExcel.quit'退出EXCELSetoExcel=Nothing'釋放對象MsgBox("Excel文件:"&lcSFileName&"另存為"&lcDFileName&"完成!")實(shí)用的VFP與EXCEL交互編程摘要:本文介紹了幾種實(shí)用的VFP與EXCEL交互編程的方法與實(shí)例,將VFP強(qiáng)大的數(shù)據(jù)處理功能與EXCEL優(yōu)異的制表功能有機(jī)地結(jié)合起來,大大增強(qiáng)了軟件的應(yīng)用效果。關(guān)鍵詞:VFP、EXCEL、DDE、OLE、交互編程。SomeCross_ProgrammingMethodsBetweenVFPandEXCELZouyiming(GansuLanzhouSectionofInstrumentsLanzhouPetrochemicalStaffCollege)Abstract:Theauthorintroducesusinthispapersomepracticalmethodsandinstanceofcross_programmingbetweenVFPandEXCEL.ItextremelyimprovestheirperformancesbycombiningVFP'sdataprocessingfunctionswithEXCEL'sexcellenttabulationfunctions.KeyWords:VFP、EXCEL、OLE、DDE、Cross-ProgrammingVFP(VisualFoxpro)是一種關(guān)系型數(shù)據(jù)庫管理系統(tǒng),由于其強(qiáng)大的數(shù)據(jù)處理能力及良好的兼容性,使其成為數(shù)據(jù)庫應(yīng)用程序開發(fā)人員的強(qiáng)有力工具,而EXECL則是一種優(yōu)秀的電子表格處理軟件,在兼容性、操作界面、公式運(yùn)算、圖表等方面有著獨(dú)到的優(yōu)勢。上述兩種軟件在各自的應(yīng)用領(lǐng)域均得到廣泛的應(yīng)用,同時上述兩種軟件還具有良好的交互編程能力,為兩者相輔相成、取長補(bǔ)短奠定了良好的基礎(chǔ)。本文將結(jié)合具體實(shí)例介紹幾種VFP與EXCEL交互編程的方法,每種方法雖然實(shí)現(xiàn)手段各異,但功能相仿。其功能可簡述如下:VFP數(shù)據(jù)表“學(xué)生成績表.DBF”中含“學(xué)生姓名”、“語文”、“數(shù)學(xué)”......等字段,示例程序?qū)腅XCEL工作簿“VFP交互.XLS”之工作表“查詢”中用書簽“課程名”指定的單元取得欲查詢的課程名稱,然后在數(shù)據(jù)表“學(xué)生成績表.DBF”中自動搜索,以找到該門課程不及格的同學(xué)名單,最后傳送至原EXCEL工作薄形成新的工作表單,同時,新工作表還將以該課程名命名。下列程序均在VFP5.0與EXCEL97中調(diào)試通過。因篇幅所限,程序中的錯誤處理部分略去。一、EXECL驅(qū)動VFPEXECL內(nèi)置的VBA語言(VisualBasicForApplication)為EXECL功能的擴(kuò)展提供了便利的手段,用戶可使用該語言直接驅(qū)動VFP完成數(shù)據(jù)檢索等功能。程序首先生成一個VFP對象,然后用VFP的DoCmd方法執(zhí)行VFP摸索命令串,其摸索結(jié)果再借助于VFP的DateToClip方法拷貝至剪切板,最后VBA將其粘貼至工作表的正確位置。SubFoxTest()DimoFoxAsObjectDimSLessonAsStringDimSCommandAsStringSetoFox=CreateObject("VisualFoxPro.Application")'啟動VFP,生成VFP對象Sheets("查詢").SelectSLesson=Range("課程名")'在名為“課程名”的單元格中得到欲查詢的課程名稱Sheets.Add'產(chǎn)生新的工作表單ActiveSheet.Name=Slesson'指定工作表單的名稱與課程名稱相同SCommand="SELECT學(xué)號,語文,數(shù)學(xué)FROMd:\vfp\學(xué)生成績表WHERE"+SLesson+"<60INTOCURSORTEMP"'形成VFP查詢命令串oFox.DoCmdScommand'執(zhí)行VFP命令串oFox.DataToClip"temp",,3'將搜索結(jié)果以文本方式拷貝至剪切板Range("a1:a1").Select'指向拷貝目標(biāo)區(qū)域左上角單元ActiveSheet.Paste'粘貼搜索結(jié)果EndSub為便于使用,作者在EXECL中自制了一名為“搜索”的工具欄及一名為“開始搜索”的按鈕,并將上述宏程序段與自制按鈕相關(guān)聯(lián),按下此按鈕即可運(yùn)行程序并在EXCEL中得到要求的數(shù)據(jù)。制作工具欄及按鈕的方法如下:1.選“工具”/“自定義”菜單,出現(xiàn)自定義對話框;2.選擇“工具欄”頁框,然后按下“新建”按鈕;3.在工具欄對話框中輸入“搜索”作為新建工具欄的名稱;4.選擇“命令”頁框,在“類別”列表中選“宏”,在“命令”列表中選“自定義按鈕”并將其拖放至新建的“搜索”工具欄;5.按下“更新所選內(nèi)容”按鈕,首先在“命名”欄中填入按鈕名稱“開始搜索”,然后選擇“指定宏”,在隨后出現(xiàn)的“指定宏”列表中選擇上述宏程序FoxTest()即可實(shí)現(xiàn)為該宏指定一個工具欄按鈕。二、VFP使用OLE功能驅(qū)動EXECLOLE(ObjectLinkingandEmbedding)對象鏈接與嵌入,是WINDOWS應(yīng)用程序間相互傳遞和共享數(shù)據(jù)的一種有效方法。VFP借助于OLE不僅可共享其它應(yīng)用程序的數(shù)據(jù),而且還能以對象方式直接控制其它應(yīng)用程序的運(yùn)行,從而進(jìn)一步擴(kuò)展VFP的功能。VFP支持直接在程序中創(chuàng)建、使用和控制OLE對象,實(shí)現(xiàn)OLE自動化。作為OLE客戶VFP與作為OLE服務(wù)器的EXCEL具有良好的編程接口,下述程序段用OLE方式實(shí)現(xiàn)所要求的功能。程序首先生成一個EXCEL的OLE對象OleApp以便對其進(jìn)行操作,然后利用OLE功能從EXCEL表單中獲取欲查詢的課程名,并控制EXCEL生成新的工作表,VFP的查詢結(jié)果仍然使用剪切板的方式傳遞至EXCEL工作表。OleApp=CREATEOBJECT("Excel.Application")&&打開EXCEL,產(chǎn)生OLE對象OleApp.Application.Caption="VFP交互編程"&&指定標(biāo)題欄名稱OleApp.Application.Visible=.T.&&置EXCEL可見OleApp.Application.WorkBooks.Open("d:\vfp\VFP交互.xls")&&打開EXCEL工作簿DOWHILE.T.WITHOleApp.ApplicationnAnswer=MESSAGEBOX("開始搜索?",32+4,"搜索指定數(shù)據(jù)")&&產(chǎn)生信息框IF(.NOT.(nAnswer=6))&&如按下“Yes"按鈕,則開始搜索,反之退出EXITENDIF.Sheets("查詢").Select&&選擇“查詢”工作表單SLesson=OleApp.Application.Range("課程名").Value&&得到欲查詢的課程名稱.Sheets.Add&&新建一工作表單.ActiveSheet.Name=Slesson&&指定工作表單的名稱SCommand="SELECT學(xué)號,語文,數(shù)學(xué)FROMd:\vfp\學(xué)生成績表WHERE"+ALLTrim(SLesson)+"<60INTOCURSORTEMP"&&形成VFP查詢命令串&Scommand&&執(zhí)行VFP命令串_VFP.DataToClip("TEMP",,3)&&將搜索結(jié)果以文本方式拷貝至剪切板.Range("a1:a1").Select&&指向拷貝目標(biāo)區(qū)域左上角單元.ActiveSheet.Paste&&粘貼搜索結(jié)果ENDWITHENDDOOleApp.Quit&&關(guān)閉EXCEL,保存更新后的工作簿文件****************************************objexcel.activeworkbook.close(.f.)那個是關(guān)閉excel啊~~不是存盤~關(guān)閉了就不能存盤了設(shè)置打印參數(shù):問:用Excel做報表,可打印時怎么選擇打印機(jī),即.ActiveWindow.SelectedSheets.PrintOut的參數(shù)有哪些?答:expression.PrintOut(From,To,Copies,Preview,ActivePrinter,PrintToFile,Collate,PrToFileName)expression必選。該表達(dá)式返回“應(yīng)用于”列表中的某個對象。FromVariant類型,可選。打印的開始頁號。如果省略該參數(shù),將從起始位置開始打印。ToVariant類型,可選。打印的終止頁號。如果省略該參數(shù),將打印至最后一頁。CopiesVariant類型,可選。要打印的份數(shù)。如果省略該參數(shù),將只打印一份。PreviewVariant類型,可選。如果為True則MicrosoftExcel打印指定對象之前進(jìn)行打印預(yù)覽。如果為False,或者省略此參數(shù)則立即打印該對象。ActivePrinterVariant類型,可選。設(shè)置活動打印機(jī)的名稱。PrintToFileVariant類型,可選。如果為True則打印輸出到文件。如果沒有指定PrToFileName,則MicrosoftExcel將提示用戶輸入要輸出文件的文件名。CollateVariant類型,可選。如果為True則逐份打印每份副本。PrToFileName可選,Variant類型。如果將PrintToFile設(shè)置為True,則本參數(shù)指定要打印到的文件名。說明From參數(shù)和To參數(shù)所描述的“頁”指的是要打印的頁,并非指定工作表或工作簿中的全部頁。如何用編程的方法打開有密碼的Excel文件?問題:Excel文件加了密碼,如何在VFP中用編程的方式把密碼輸入,使Excel文件打開如:oExcel=CREATEOBJECT('Excel.application')oExcel.Workbooks.Open("d:\22.xls")這樣還有一個密碼的對話框出來,需要輸入密碼才能打開文件。如何用編程的方法直接打開有密碼的Excel文件?答:oEle.Workbooks.Open("d:\22.xls",.f.,.f.,,"123","456")"123"表示打開權(quán)限的密碼,"456"表示修改權(quán)限的密碼.問題一:如何將一個已知路徑的圖片插入到excel中.答:oexcel1.ActiveSheet.Pictures.Insert("圖片文件名")問題二:能不能指定在某一位置或區(qū)域放置圖片并控制圖片顯示大小呢?答:OLEAPP.SHEETS(1).SELECToleapp.Range("位置").Selectoleapp.ActiveSheet.Pictures.Insert("圖片文件名")).Selectoleapp.Selection.ShapeRange.LockAspectRatio=.T.oleapp.Selection.ShapeRange.Height=57問題:類型為字符型的字段輸出到excel中,前面的零被自動去掉,例如“009877”變?yōu)椤?877”,怎么解決?答:1.在字符串前面加半角單引號“'”,例如:o.Cells(1,1).Value="'0123"或用變量cString="'"+"0123"&&其中0123可以取自表中一個字段o.Cells(1,1).value=cString&&o.Range("A1:A1").value=cString2.oExcel.CELLS(1,1).Select&&或eole.Range("A1:E1").SelectoExcel.Selection.NumberFormatLocal="@"&&把被選定的單元格設(shè)為文本格式oExcel.Cells(1,1).Value="0123"&&給所選單元格覆值在Excel中插入行和列:objExcel.Rows(1).Insert()&&在第一行前面插入一行objExcel.Columns(2).Insert()&&在第二列前面插入一列獲取Excel記錄數(shù)loXls=CREATEOBJECT("excel.application")bookExcel=loXls.APPLICATION.Workbooks.OPEN("f:\pz.xls")nrows=bookExcel.Worksheets('pz')UsedRange=nrows.UsedRanger=UsedRange.ROWS.COUNT&&有數(shù)據(jù)的總行數(shù)c=UsedRange.COLUMNS.COUNT&&有數(shù)據(jù)的總列數(shù)loXls.Workbooks.closeloXls.quit問:在EXCEL中如何在打開文件的同時自動執(zhí)行一個宏命令。答:只要將宏的命名為AUTO_OPEN即可。如果要在文件關(guān)閉時運(yùn)行,則命名為auto_close。問:在VFP中可以執(zhí)行EXCEL的選擇性粘貼嗎?.Range("A2").PasteSpecial("xlPasteValues")&&會出錯.Range("A2").PasteSpecial(3).Range("A2").PasteSpecial如何才能只粘貼值呢?答:&&也會出錯&&只好這樣了xlPasteValues=-4163oExcel.Range("A1").SelectoExcel.Selection.copyoExcel.Range("B1")._PasteSpecial(xlPasteValues)注意:在Excel中,"xlPasteValues"是一個常量,它的值是一個數(shù)值型的:-4163oExcel.Range("A1").CopyoExcel.Range("B3").PasteSpecial(8)&&粘貼行、列寬oExcel.Range("B3").PasteSpecial(-4122)&&粘貼格式如何從excel讀取數(shù)據(jù)*******建立一個excel對象*******LOCALhb1asexcel.applicationcsheetname=TRIM(thisform.text2.value)&&讀取用戶要讀取excel的sheet名***讀取數(shù)據(jù)源所在的EXCEL文件名****IFEMPTY(TRIM(thisformset.filepath))MESSAGEBOX("請先選擇要導(dǎo)入的excel文件!",0,"提示")RETURNENDIFIFEMPTY(TRIM(csheetname))MESSAGEBOX("請先選擇要導(dǎo)入的工作表sheet名稱!",0,"提示")RETURNENDIFtryhb1=createobject("excel.application")catchmessagebox("請檢查你是否已安裝microsoftexcel應(yīng)用程序!",0,"提示")endtry***打開EXCEL對象,開始讀取數(shù)據(jù)********HB1.workbooks.open(TRIM(thisformset.filepath))hb1.Sheets(csheetname).selectselestore&&這是要讀取的數(shù)據(jù)存放的表zapisend=.f.&&用于判斷是否記錄已到底i=1DOWHILEisend=.f.APPENDBLANKcrq=DTOC(drq)cdh=hb1.Cells(i,1).ValueIFISNULL(cdh)cdh=""ENDIF**用于判斷數(shù)據(jù)類型,數(shù)據(jù)類型一定要判斷是否為NULL,****然后如果不是指定的類型,還要進(jìn)行轉(zhuǎn)換*************IFTYPE("cdh")<>'C'cdh=ALLTRIM(STR(cdh))endifcdwmc=TRIM(hb1.Cells(i,2).Value)IFISNULL(cdwmc)cdwmc=""endifcgg=hb1.Cells(i,3).ValueIFISNULL(cgg)cgg=""ELSEIFTYPE("cgg")<>'C'cgg=ALLTRIM(STR(cgg))ENDIFendifcjldw=hb1.Cells(i,4).ValueIFISNULL(cjldw)cjldw=""endifcjldw=IIF(TYPE("jldw")<>"C",ALLTRIM(STR(cjldw)),ALLTRIM(cjldw))nsl=hb1.Cells(i,5).ValueIFISNULL(nsl)nsl=0endifcch=TRIM(hb1.Cells(i,6).Value)IFISNULL(cch)cch=''endifcxh=hb1.Cells(i,8).ValueIFISNULL(cxh)cxh=""ELSEIFTYPE("cxh")<>'C'cxh=TRIM(STR(cxh))ELSEcxh=TRIM(cxh)endifENDIFccpmc=hb1.Cells(i,9).ValueIFISNULL(ccpmc)ccpmc=''endifIFTYPE("ccpmc")<>'C'ccpmc=ALLTRIM(STR(ccpmc))ELSEccpmc=TRIM(ccpmc)ENDIFSELECTstoreREPLACErqWITHcrq,dhWITHcdh,dwmcWITHcdwmc,ggWITHcgg,jldwWITHcjldw,slWITHnsl,chWITHcch,cpbhWITHcxh,cpmcWITHccpmci=i+1&&如果一行全為空,記作記錄到底,如果中間存在多行的問題,我沒有做考慮****IFEMPTY(cxh)ANDnsl=0ANDEMPTY(cch)ANDEMPTY(cjldw)ANDEMPTY(cdh)ANDEMPTY(cgg)isend=.t.ENDIFENDDOdele&&最后一行為空行,刪除WAIT"共轉(zhuǎn)換得到"+ALLTRIM(STR(RECCOUNT()))+"條記錄!"WINDOWTIMEOUT2hb1.quit***********************************************本程序通過將原dbf表拷成excel格式,然后導(dǎo)入并*設(shè)置報表格式**********************************************paratablenameLOCALhb1asexcel.applicationWAIT"正在導(dǎo)出數(shù)據(jù),請稍侯……"WINDOWAT20,30TIMEOUT1bhaveerror=.f.&&定義一個變量判斷是否發(fā)生錯誤tryhb1=createobject("excel.application")catchmessagebox("請檢查你是否已安裝microsoftexcel應(yīng)用程序!",0,"提示")bhaveerror=.t.endtryifbhaveerror=.t.returnendififright(curr_path,1)<>'\'curr_path=curr_path+"\"endifctablename=tablename+"_excel"filepath=curr_path+"temp\sheet1.xls"*filepath="temp\sheet1.xls"if!file(filepath)messagebox("數(shù)據(jù)源的excel文件未生成,報表生成被終止!")returnendifHB1.workbooks.open(filepath)HB1.SHEETS("sheet1").selecthb1.sheets(1).rows(1).entirerow.inserthb1.sheets(1).rows(1).entirerow.insertsele(ctablename)nfieldcount=fcount()nreccount=reccount()hbdygs="A1:"+chr(nfieldcount+64)+"2"HB1.range(hbdygs).select****合并兩行作為報表標(biāo)題*************HB1.selection.HorizontalAlignment=3&&水平方向2左對齊,3居中,4右對齊HB1.selection.VerticalAlignment=2&&垂直方向1靠上,2居中,3靠下HB1.selection.WrapText=.f.HB1.selection.orientation=0HB1.selection.AddIndent=.f.HB1.selection.ShrinkToFit=.f.HB1.selection.MergeCells=.t.&&??&&??&&??&&??&&??HB1.range(hbdygs).FormulaR1C1="請輸入報表標(biāo)題"HB1.range(hbdygs).C="隸書"HB1.range(hbdygs).Characters.font.FontStyle="常規(guī)"HB1.range(hbdygs).Characters.font.ColorIndex=1&&字符顏色***根據(jù)數(shù)據(jù)源表結(jié)構(gòu)的寬度設(shè)置列的寬度********copystruextetotemp\term_strusele0usetemp\term_strusele(ctablename)fori=1tonfieldcountcvalue=allt(field(i))seleterm_strulocaforlower(allt(field_name))==cvalueiffound()columnname=chr(i+64)+":"+chr(i+64)hb1.columns(columnname).columnwidth=field_lenelseendifsele(ctablename)endforseleterm_struuseactivecellname=chr(nfieldcount+64)+allt(str(nreccount+3))*************設(shè)置數(shù)據(jù)區(qū)域的字體格式***************HB1.range("A3:"+activecellname).C="宋體"HB1.range("A3:"+activecellname).Characters.font.size=9HB1.range("A3:"+activecellname).selecthb1.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&&自動保存數(shù)據(jù)*HB1.ACTIVEWORKBOOK.CLOSE&&關(guān)閉當(dāng)前工作簿*HB1.QUIT*如何修改sheet工作表名:EFILENAME='D:\TEST\TEMPA.XLS'oExcel=CREATEOBJECT("Excel.application")oExcel.Workbooks.OPEN("&EFILENAME")oExcel.VISIBLE=.T.oExcel.Worksheets("Sheet2").SelectoExcel.Worksheets("Sheet2").Name='NewSheet'&&這里的NewSheet為新的名字。*復(fù)制Sheet工作表EFILENAME='D:\你的Excel表名.XLS'oExcel=CREATEOBJECT("Excel.application")oExcel.Workbooks.OPEN("&EFILENAME")oExcel.VISIBLE=.T.oExcel.SHEETS(1).SELECToExcel.SHEETS(1).COPY(NULL,oExcel.SHEETS(1))&&&&把第1個工作表復(fù)制到第1個工作表之后oExcel.SHEETS(2).NAME='NewSheetName'&&設(shè)置第2個工作表名稱*!*oExcel.SHEETS(1).COPY(oExcel.SHEETS(1),NULL)&&&&把第1個工作表復(fù)制到第1個工作表之前*!*oExcel.SHEETS(1).NAME='NewSheetName'&&設(shè)置第1個工作表名稱*如何將DBF中內(nèi)容COPY到EXCEL的指定區(qū)域例如我有一個DBF:Name_FSl_fMikekyle546200想將這個內(nèi)容轉(zhuǎn)到EXCEL里面的E1:F2區(qū)域!*******USE表名_VFP.DataToClip('表名',RECCOUNT(),3)&&將一組記錄作為文本復(fù)制到剪貼板上,3使用制表符分隔字段。oexl=createobject('excel.application')&&創(chuàng)建電子表格oexl.visible=.t.&&使電子表格可見oexl.workbooks.add&&創(chuàng)建工作簿withoexl.range("E1:F2").select&&根據(jù)你的表中的記錄數(shù)和字段數(shù)調(diào)整此項(xiàng)中的'F2'.ActiveSheet.PasteENDWITH*VFP調(diào)用EXCEL查詢打印示例EFILENAME='查詢打印.XLS'*LOCALoExceloExcel=CREATEOBJECT("Excel.application")oExcel.Workbooks.OPEN("&EFILENAME")oExcel.CAPTION="VFP應(yīng)用程序調(diào)用MicrosoftExcel"oExcel.Worksheets("查詢打印").ACTIVATEoExcel.VISIBLE=.T.nRows=oExcel.Worksheets('查詢打印').UsedRange.ROWS.COUNTnColumns=oExcel.Worksheets('查詢打印').UsedRange.COLUMNS.COUNToExcel.RANGE(oExcel.Cells(1,1),oExcel.Cells(nRows,nColumns)).BORDERS.LineStyle=1oExcel.RANGE(oExcel.Cells(1,1),oExcel.Cells(nRows,nColumns)).HorizontalAlignment=3&&水平(1-默認(rèn)、2-靠左、3-居中、4-靠右、5-填充、6=兩端對齊、7=跨列居中、8=分散對齊)oExcel.RANGE(oExcel.Cells(1,1),oExcel.Cells(nRows,nColumns)).VerticalAlignment=2&&垂直(1=靠上、2=居中、3=靠下、4=兩端對齊、5=分散對齊)oExcel.ActiveSheet.PageSetup.RightFooter="第&P頁/共&N頁"oExcel.ActiveSheet.PageSetup.TopMargin=2/0.035&&設(shè)置頂邊距為2厘米o(hù)Excel.ActiveSheet.PageSetup.BottomMargin=2/0.035&&設(shè)置左邊距為2厘米o(hù)Excel.ActiveSheet.PageSetup.HeaderMargin=1/0.035&&設(shè)置頁眉到頂端邊距為1厘米o(hù)Excel.ActiveSheet.PageSetup.FooterMargin=1/0.035&&設(shè)置頁腳到底邊距為1厘米o(hù)Excel.ActiveSheet.PageSetup.LeftMargin=2/0.035&&設(shè)置左邊距為2厘米o(hù)Excel.ActiveSheet.PageSetup.RightMargin=2/0.035&&設(shè)置右邊距為2厘米o(hù)Excel.ActiveSheet.PageSetup.CenterHorizontally=.t.&&設(shè)置頁面水平居中oExcel.ActiveSheet.PageSetup.CenterVertically=.t.&&設(shè)置頁面垂直居中oExcel.Cells.SELECToExcel.Cells.EntireColumn.AUTOFIToExcel.SELECTION.AutoFilteroExcel.ActiveSheet.ROWS(1).INSERToExcel.RANGE("A2:BB2").ROWHEIGHT=37.5oExcel.RANGE("A2:BB2").WrapText=.T.oExcel.ActiveSheet.COLUMNS(1).COLUMNWIDTH=3oExcel.ActiveSheet.COLUMNS(1).COLUMNWIDTH=4oExcel.RANGE("A2:BB2").ROWHEIGHT=12.5*oExcel.RANGE("M1").VALUE='統(tǒng)計(jì)月份:'+ALLTRIM(STR(YEAR(KKS_DATE1)))+'年'+ALLTRIM(STR(MONTH(KKS_DATE1)))+'月-'+ALLTRIM(STR(YEAR(KKE_DATE1)))+'年'+ALLTRIM(STR(MONTH(KKE_DATE1)))+'月'oExcel.ActiveSheet.PageSetup.CenterHeader="&20部門出勤統(tǒng)計(jì)表"oExcel.ActiveSheet.PageSetup.CenterFooter="單位領(lǐng)導(dǎo):"oExcel.ActiveSheet.PageSetup.LeftFooter="打印時間:&D-&T"oExcel.SELECTION.AutoFilteroExcel.ActiveSheet.RANGE('B2').SELECToExcel.ActiveSheet.PageSetup.PrintTitleRows="$1:$1"oExcel.ActiveSheet.PageSetup.ORIENTATION=2&&1:縱向打印2:橫向打印oExcel.ActiveWorkbook.Save*在VFP中Disabled/EnabledEXCEL中的菜單項(xiàng)及按鈕有時需要在VFP中控制EXCEL中的按鈕及菜單項(xiàng),以達(dá)到由VFP控制XLS文檔的目的。可以控制XLS文檔不能復(fù)制、不能另存、不能打印、不能以附檔的形式發(fā)郵件。結(jié)合陸老師的在通用字段中存放文檔的思路,完全可以用VFP開發(fā)文檔發(fā)布系統(tǒng),可以發(fā)布公司的守則、公告、管理辦法、機(jī)密資料、圖片資料等而不用擔(dān)心用戶復(fù)制、打印、以郵件傳播資料。XLS中各個菜單項(xiàng)或按鈕都有唯一的ID或序號,本例是利用序號來控制的(利用ID也可以控制)。對象大多只有三層,對應(yīng)的控制方法是:對象.CommandBars(第一層序號).Controls(第二層序號).accChild(第二層序號).屬性=值本例僅列出菜單項(xiàng)的部分控制,其它菜單項(xiàng)或按鈕的序號可以用以下程序取得:*(需要在VFP7.0以上運(yùn)行)oXls=GetObject("","excel.sheet")XlApp=oXLS.applicationXlSheet=XlApp.ActiveSheetbars=xlapp.CommandBars.Countstr=''FORi=1TObarsstr=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).accChildCountFORj=1TObars2tryobj=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.accChildCounttryIFNOTEMPTY(obj.controls(k).accname)str=str+CHR(13)+''+ALLTRIM(STR(k))+'、'+obj.controls(k).accName+'(ID:'+ALLTRIM(STR(obj.controls(k).Id))+')'ENDIFCATCHEXITendtryENDFORCATCHEXITendtryENDFORWAITwindowsALLTRIM(STR(i))+'/'+ALLTRIM(STR(bars))+''+STR(i/bars*100,10,2)+'%'nowaitENDFORSAVETOxls.txtALLLIKEstrMODIFYCOMMANDxls.txtreturn*oXLS=CREATEOBJECT('excel.application')oXLS.Workbooks.AddoXLS.visible=.t.1、工作表功能表列(NAME:WorksheetMenuBarID:1)&&禁用/不可見系統(tǒng)菜單mandbars(1).enabled=.f.1、檔案(ID:30002)&&禁用菜單中的“檔案”項(xiàng)oXLS.commandbars(1).controls(1).enabled=.f.12、打印...(ID:4)&&禁用“檔案”菜單下的“打印”項(xiàng)oXLS.CommandBars(1).Controls(1).accChild(18).Enabled=.f.*以下為通過上面程序取得的Office2003菜單信息,如果Office版本不是2003,那就通過以上程序重新取得菜單信息1、工作表菜單欄(NAME:WorksheetMenuBarINDEX:1)1、文件(ID:30002)1、新建...(ID:18)2、打開...(ID:23)3、關(guān)閉(ID:106)4、更新(ID:3)5、副本另存為...(ID:748)6、另存為網(wǎng)頁...(ID:3823)7、保存工作區(qū)...(ID:846)8、文件搜索...(ID:5905)9、權(quán)限...(ID:7994)10、權(quán)限(ID:31308)11、簽出(ID:6127)12、簽入...(ID:6128)13、版本記錄...(ID:7799)14、網(wǎng)頁預(yù)覽(ID:3655)15、頁面設(shè)置...(ID:247)16、打印區(qū)域(ID:30255)17、打印預(yù)覽(ID:109)18、打印...(ID:4)19、發(fā)送(ID:30095)20、屬性(ID:750)21、1\Test\查詢打印.XLS(ID:831)22、2\慧指資料\Others\Apple\Monitor.xls(ID:831)23、3\Test\temp1.CSV(ID:831)24、4\工作\合同編號&用戶統(tǒng)計(jì)表.xls(ID:831)25、此處為最近所用文件的名稱(ID:831)26、此處為最近所用文件的名稱(ID:831)27、此處為最近所用文件的名稱(ID:831)28、此處為最近所用文件的名稱(ID:831)29、此處為最近所用文件的名稱(ID:831)30、簽出(ID:5950)31、退出(ID:752)2、編輯(ID:30003)1、無法撤消(ID:128)2、重復(fù)新建(ID:37)3、剪切(ID:21)4、復(fù)制(ID:19)5、Office剪貼板...(ID:809)6、粘貼(ID:22)7、選擇性粘貼...(ID:755)8、粘貼為超鏈接(ID:2787)9、填充(ID:30020)10、清除(ID:30021)11、刪除...(ID:478)12、刪除工作表(ID:847)13、移動或復(fù)制工作表...(ID:848)14、查找...(ID:1849)15、替換...(ID:313)16、定位...(ID:757)17、鏈接...(ID:759)18、對象(ID:961)19、對象(ID:30019)3、視圖(ID:30004)1、普通(
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 典當(dāng)房地產(chǎn)借款合同書
- 工程截樁施工合同
- 太陽能系統(tǒng)維保合同協(xié)議書
- 簽訂合同規(guī)范建議和意見
- 建筑安裝工程合同承包條例
- 聘用合同的類型包括
- 湖南勞動人事職業(yè)學(xué)院《道路工程經(jīng)濟(jì)與管理》2023-2024學(xué)年第二學(xué)期期末試卷
- 南京交通職業(yè)技術(shù)學(xué)院《區(qū)域分析與規(guī)劃》2023-2024學(xué)年第二學(xué)期期末試卷
- 皖南醫(yī)學(xué)院《火電廠燃燒優(yōu)化及系統(tǒng)節(jié)能》2023-2024學(xué)年第二學(xué)期期末試卷
- 滄州職業(yè)技術(shù)學(xué)院《基礎(chǔ)翻譯》2023-2024學(xué)年第二學(xué)期期末試卷
- 育嬰員初級培訓(xùn)
- 醫(yī)療廢物管理?xiàng)l例
- 新能源汽車三電系統(tǒng)培訓(xùn)教材
- 慢性乙型肝炎防治指南(2022年版)解讀
- DB43T 578-2016 銻冶煉砷堿渣無害化處理技術(shù)規(guī)范
- 建筑與市政工程地下水控制技術(shù)規(guī)范 JGJ111-2016 培訓(xùn)
- 2024年汽車裝調(diào)工技能競賽理論考試題庫(含答案)
- (新版)區(qū)塊鏈應(yīng)用操作員職業(yè)技能競賽理論考試題庫-上(單選題)
- 生豬屠宰獸醫(yī)衛(wèi)生檢驗(yàn)人員理論考試題庫及答案
- 高中英語課程設(shè)計(jì)目的
- 2024-2025學(xué)年北京一零一中學(xué)初三期初測試數(shù)學(xué)試題含解析
評論
0/150
提交評論