VFP與Excel交互編程.doc_第1頁(yè)
VFP與Excel交互編程.doc_第2頁(yè)
VFP與Excel交互編程.doc_第3頁(yè)
VFP與Excel交互編程.doc_第4頁(yè)
VFP與Excel交互編程.doc_第5頁(yè)
已閱讀5頁(yè),還剩17頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

VFP與Excel交互編程 VFP(Visual Foxpro)是一種關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),由于其強(qiáng)大的數(shù)據(jù)處理能力及良好的兼容性,使其成為數(shù)據(jù)庫(kù)應(yīng)用程序開發(fā)人員強(qiáng)有力的工具而廣為使用; 而Excel則是一個(gè)優(yōu)秀的電子表格處理軟件,在兼容性、操作界面、公式運(yùn)算、圖表等方面有著獨(dú)到的優(yōu)勢(shì),成為廣大辦公應(yīng)用人員必備的首選軟件。上述兩種軟件在各自的應(yīng)用領(lǐng)域均得到了廣泛的應(yīng)用,同時(shí)上述兩種軟件還具有良好的交互編程能力,為兩者相輔相成、取長(zhǎng)補(bǔ)短奠定了良好的基礎(chǔ)。 本文將結(jié)合實(shí)例介紹VFP與Excel交互編程的方法,在VFP中除了使用OLE技術(shù)外,還可使用DDE技術(shù)與外部服務(wù)器進(jìn)行數(shù)據(jù)交換,本文主要講解VFP中使用OLE技術(shù)與Excel交換數(shù)據(jù),Excel中借助內(nèi)置的VBA使用VFP提供的Application對(duì)象來調(diào)用VFP中的一些功能。其功能可簡(jiǎn)述如下:VFP數(shù)據(jù)表“學(xué)生成績(jī).DBF”中含“學(xué)號(hào)、姓名、語(yǔ)文、數(shù)學(xué)”等字段,示例程序?qū)腅xcel工作簿“VFP交互.XLS”的工作表“查詢”中用“條件”區(qū)域(一般為一個(gè)矩形區(qū)中的數(shù)據(jù),該區(qū)域名稱指定為“條件”,數(shù)據(jù)形如“語(yǔ)文60”、“數(shù)學(xué)90”等)中的數(shù)據(jù)作為查詢的條件,用“連接條件”區(qū)域(一般為一個(gè)單元格,其值為“or”或者“and”)來獲取組合“條件”的邏輯連接,并將該連接信息的內(nèi)容以工作表的形式顯示出來,然后調(diào)用VFP中針對(duì)給定表的SQL查詢來找出給定條件的記錄并顯示到Excel中。下列程序均在VFP 6.0與Excel 2000中調(diào)試通過。 Excel驅(qū)動(dòng)VFP Excel內(nèi)置的VBA語(yǔ)言(Visual Basic For Application)為Excel功能的擴(kuò)展提供了便利的手段,用戶可使用該語(yǔ)言直接驅(qū)動(dòng)VFP完成數(shù)據(jù)檢索等功能。程序首先生成一個(gè)VFP對(duì)象,然后用VFP的DoCmd方法執(zhí)行VFP搜索命令串,其搜索結(jié)果再借助于VFP的DataToClip方法拷貝至剪切板,最后VBA將其粘貼至工作表的正確位置,為了每次運(yùn)行時(shí)能將結(jié)果插入到工作表中,依次對(duì)操作的工作表以“搜索結(jié)果”、“搜索結(jié)果1”等進(jìn)行編號(hào)。 Sub exceluseFox () Dim oFox As Object 聲明oFox為一個(gè)對(duì)象 Dim SCommand As String SQL對(duì)應(yīng)的命令串變量 Dim cell As Variant Dim choice As String Dim join As String Dim first As Boolean Dim found As Boolean 搜索結(jié)果標(biāo)志,若表單中有搜索結(jié)果,則為真 Set oFox = CreateObject(“VisualFoxPro .Application”) 啟動(dòng)VFP,生成VFP對(duì)象 Sheets(“查詢”).Select 選擇對(duì)應(yīng)的工作表“查詢” join = Range(“連接條件”) 在單一表格中的一個(gè)元素,其值為and或者or choice = “” 置連接串初值為空 first = True 一般情況下連接串后需要加上邏輯連接符and 或 or,首次例外 For Each cell In Range(“條件”) 產(chǎn)生連接條件,形成where語(yǔ)句的連接邏輯串 If first Then choice = choice + cell 形成第一次出現(xiàn)的where子句后的字符串 first = False 修改首次進(jìn)入標(biāo)志,以后的連接均需要加上邏輯連接符 Else choice = choice + “ ” + join + “ ” + cell join的值是and或者是or End If Next cell Sheets.Add 產(chǎn)生新的工作表單 找一個(gè)不重復(fù)的工作表名 found = False 工作表名中前四個(gè)漢字有沒有“搜索結(jié)果”的標(biāo)志變量 n = 1 For Each cell In Worksheets If InStr(1, cell.Name, “搜索結(jié)果”) 0 Then found = True 找到對(duì)應(yīng)的工作表 If n 名稱-定義”來完成對(duì)給定區(qū)域名稱的設(shè)定,這個(gè)名稱可以在VBA中訪問,如前述中的“條件”和“連接條件”。 VFP使用Excel OLE(Object Linking and Embedding)對(duì)象鏈接與嵌入,是Windows應(yīng)用程序間相互傳遞和共享數(shù)據(jù)的一種有效方法。VFP借助于OLE不僅可共享其他應(yīng)用程序的數(shù)據(jù),而且還能以對(duì)象方式直接控制其他應(yīng)用程序的運(yùn)行,從而進(jìn)一步擴(kuò)展VFP的功能。VFP支持直接在程序中創(chuàng)建、使用和控制OLE對(duì)象,實(shí)現(xiàn)OLE自動(dòng)化。作為OLE客戶,VFP與作為OLE服務(wù)器的Excel具有良好的編程接口,下述程序段用OLE方式實(shí)現(xiàn)所要求的功能。程序首先生成一個(gè)Excel的OLE對(duì)象OleApp以便對(duì)其進(jìn)行操作,然后利用OLE功能從Excel表單中獲取欲查詢的條件,并控制Excel生成新的唯一的工作表,通過找尋當(dāng)前操作的所有工作表達(dá)到名稱的唯一,VFP的查詢結(jié)果仍然使用剪切板的方式傳遞至Excel工作表中。 local condition,where1,first,scommand,cell,newsheet,found1,n OleApp=CreateObject(“Excel.Application”) & 打開Excel,產(chǎn)生OLE對(duì)象 OleApp.Application.Caption=“VFP交互編程” & 指定標(biāo)題欄名稱 OleApp.Application.Visible=.T. & 置Excel可見 OleApp.Application.WorkBooks.Open(“d:vfpVFP交互.xls”) & 打開Excel工作簿,用戶也可以修改連接條件或者查詢條件 where1=“” &保存SQL中where子句的變量 first=.t. &置首次進(jìn)入“查詢”工作表中“條件”區(qū)域標(biāo)志 found1=.f. n=1 DO WHILE .T. WITH OleApp.Application nAnswer = MessageBox(“開始搜索?”, 32+4, “搜索指定數(shù)據(jù)”) &顯示搜索信息 IF (.NOT. (nAnswer=6) & 如按下“Yes”按鈕,則開始搜索,反之退出 EXIT ENDIF .Sheets(“查詢”).Select & 選取示例中的對(duì)應(yīng)工作表 condition=.range(“連接條件”).value &得到“連接條件”區(qū)域中的邏輯連接符 for each cell in .range(“條件”).value &將表單區(qū)域內(nèi)所有單元的數(shù)據(jù)拼接以形成where的連接邏輯串 If first Then Where1 = Where1 + cell &首次進(jìn)入時(shí)where子句中串前不需要邏輯連接符 first = .f. &置非首次進(jìn)入標(biāo)志 Else Where1=Where1 +“ ”+condition +“ ”+ cell &這里condition的值取and或者or EndIf next for .Sheets.Add & 新建一工作表單 &下面的for each子句是用于找尋有否對(duì)應(yīng)的工作表,若有則在搜索結(jié)果1、搜索結(jié)果2搜索結(jié)果n中得到最大的n值以便產(chǎn)生下一個(gè)比n大1的新工作表“搜索結(jié)果&(n+1)” for each newsheet in .worksheets if “搜索結(jié)果”$ n=max(val(subset(space(2),9,2),n) &得到最大的n值 found1=.t. &置找到工作表中前四個(gè)漢字是“搜索結(jié)果”的工作表 endif next for if not found1 .ActiveSheet.Name =“搜索結(jié)果1” & 指定工作表單的名稱 else .=“搜索結(jié)果”+str(n+1,2) &得到唯一的工作表 endif SCommand = “SELECT * FROM d:vfp學(xué)生成績(jī)表 WHERE ”+ALLTrim(where1) + “INTO CURSOR TEMP” & 形成VFP查詢命令串 &Scommand & 執(zhí)行VFP命令串 _VFP.DataToClip(“TEMP”, , 3) & 將搜索結(jié)果以文本方式拷貝至剪切板 .Range(“a1: a1”).Select & 指向拷貝目標(biāo)區(qū)域左上角單元 .ActiveSheet.Paste & 粘貼搜索結(jié)果 ENDWITH ENDDO OleApp.Quit & 關(guān)閉Excel,保存更新后的工作簿文件 結(jié)束語(yǔ) VFP與Excel的交互能力是很強(qiáng)的,用戶可以使用VFP處理數(shù)據(jù)庫(kù)的一些運(yùn)算,如插入、排序、合并、選擇等,將結(jié)果交由Excel中進(jìn)行一些后期的處理,甚至可以將一些抽取數(shù)據(jù)的條件直接加入到Excel的條件區(qū)域中,由VFP來讀取條件區(qū)域進(jìn)行數(shù)據(jù)的篩選??傊灰艹浞掷煤酶髯缘膬?yōu)點(diǎn),理解交互的接口方法,就一定能夠編寫出較適用的程序,滿足實(shí)際工作的需要。VFP調(diào)用EXCEL的補(bǔ)充方法 下面是我使用 VFP CALL EXCEL的部分例子: 這是本人從書本上抄的片斷和我的小小經(jīng)驗(yàn),可以讓你很方便的在 VFP 中調(diào)用 EXCEL,所有的例程我都試驗(yàn)過。用Visual Foxpro 設(shè)計(jì)用Excel表格的程序 利用OLE Automation 設(shè)計(jì)Excel 應(yīng)用程序 Excel支持的對(duì)象說明: (a) VBA 對(duì)象: 對(duì)象名稱 意義 Application Excel應(yīng)用程序?qū)ο?WorkBooks Excel活頁(yè)薄對(duì)象 (b)所使用的Method 對(duì)象名稱 Method 執(zhí)行意義 Application Cells 設(shè)定或傳回來某個(gè)網(wǎng)格的內(nèi)容 Range 傳回或設(shè)定某一個(gè)范圍的網(wǎng)格 Charts 傳回或設(shè)定活頁(yè)簿的單一統(tǒng)計(jì)表 Quit 結(jié)束 Excel Application Save 激活存儲(chǔ)文件對(duì)話框 WorkBooks Add 新增一個(gè)工作簿 Charts Add 新增一個(gè)統(tǒng)計(jì)圖 (c)所使用的Property 對(duì)象名稱 Property 設(shè)定意義 Application Visible 是否現(xiàn)實(shí)再 SCREEN上 .T. , .F. Value 傳回或者設(shè)定存儲(chǔ)文件的內(nèi)容 ActiveSheet 回應(yīng)Excel Application 執(zhí)行工作表對(duì)象 實(shí)例說明: 啟動(dòng)Excel: MyExcel=CreateObject(Excel.Application) &建立Excel對(duì)象 MyExcel.Visible=.T. &讓Excel對(duì)象再屏幕上顯示出來 如何增加工作簿: MyExcel.WorkBooks.Add &在Excel對(duì)象中增加一份工作簿(WorkBook) 如何在工作簿中增加Sheet(工作表) MyExcel.Sheets.Add &增加工作表(在當(dāng)前工作簿中) 如何刪除工作表 MyExcel.ActiveWorkBooks.Sheets(1).Delete &把工作簿中的BOOK(1) 刪除向指定的工作簿中的工作表(Sheet)中存儲(chǔ)數(shù)據(jù) *Excel.application Object *Excel.application.ActiveWorkBook Property *WorkBOoks Object *WorkBOoks Object的Add Method.*Sheets對(duì)象*Sheets(Index)對(duì)象指定索引工作表*Excel.Application對(duì)象的Cells Method結(jié)合Value屬性Example:CLEAR ALLSET PATH TO SYS(2004)+SAMPLESDATEUSE CUSTOMERMYEXCEL=CREATEOBJEXT(EXCEL.APPLICATION)MYEXCEL.VISIBLE=.T.MYEXCEL.WORKBOOKS.ADDMYEXCEL.ACTIVEWORKBOOK.SHEETS(1).CELLS(1,1).VALUE=客戶編號(hào)MYEXCEL.ACTIVEWORKBOOK.SHEETS(1).CELLS(1,2).VALUE=公司行號(hào)SELECT CUSTOMERR=2C=1 GOTO TOP FOR I=1 TO 20 MYEXCEL.ACTIVEWORKBOOK.SHEETS(1).CELLS(R,C).VALUE=CUSTOMER.CUST_ID MYEXCEL.ACTIVEWORKBOOK.SHEETS(1).CELLS(R,C+1).VALUE=CUSTOMER.COMPANY R=R+1 SKIP ENDFOR調(diào)整單元格寬度:MYEXCEL.ACTIVEWORKBOOK.SHEETS(1).CELLS(1,1).columnwidth=30調(diào)整單元格對(duì)齊方式:MYEXCEL.ACTIVEWORKBOOK.SHEETS(1).CELLS(1,1).horizontalalig=11為默認(rèn)方式,2為左對(duì)齊,3為中對(duì)齊,4為右對(duì)齊。如何將數(shù)據(jù)存儲(chǔ): MYEXCEL.SAVE() 注:可以用Save(FileName)指定預(yù)存儲(chǔ)文件名, 則可不用激活SAVE AS 窗口 如何打印表格: MYEXCEL.ActiveWorkBook.PrintOut &默認(rèn)打印增個(gè)Sheet如何指定打印表格: MYEXCEL.ActiveWorkBook.PrintOut(1,1,1,.T.) &默認(rèn)打印增個(gè)SheetPrintOut有四個(gè)參數(shù) A. 數(shù)值:,表示指定的工作簿中進(jìn)行打印的Sheet 的開始編號(hào) B. 數(shù)值:,表示指定的工作簿中進(jìn)行打印的Sheet 的結(jié)束編號(hào) C.打印分?jǐn)?shù). D.是否進(jìn)行 Preview, .T.,預(yù)覽, .F.打印 如何產(chǎn)生統(tǒng)計(jì)圖 CURROW=MYEXCEL.ACTIVESHEET.ROWS.COUNT RANGESTRING=A1:+B+ALLTRIM(STR(CURROW) MYEXCEL.RANGE(RANGESTRING).SELECT MYEXCEL.CHARTS.ADD 結(jié)束EXCEL MYEXCEL.QUIT EXCEL.ActiveWindow.SelectedSheets.PrintPreview &預(yù)覽打印EXCEL.ActiveWorkbook.SaveAs(C:My DocumentsBook1.xls) &另存為EXCEL.ActiveWorkbook.Close &關(guān)閉一個(gè)工作表,如果有修改則提示 EXCEL.ActiveWorkbook.Close(.t.) &提示另存為 EXCEL.ActiveWorkbook.Close(.f.) &關(guān)閉一個(gè)工作表不用提示是否存盤VFP全面控制EXCEL VFP和Excel都可以用來進(jìn)行處理數(shù)據(jù)庫(kù)表格,如果巧妙地將二者的優(yōu)點(diǎn)結(jié)合起來,將會(huì)大大方便我們的工作。比如我們可以利用VFP進(jìn)行處理數(shù)據(jù),而利用Excel的預(yù)覽打印功能進(jìn)行報(bào)表打印。這就需要我們?cè)赩FP中直接來控制Excel。下面就在開發(fā)VFP應(yīng)用項(xiàng)目時(shí)對(duì)Excel的控制作一下介紹:1創(chuàng)建Excel對(duì)象eole=CREATEOBJECT(Excel.application)2添加新工作簿eole.Workbooks.add3設(shè)置第3個(gè)工作表為激活工作表eole.Worksheets(sheet3).Activate4打開指定工作簿eole.Workbooks.Open(c:templl.xls)5顯示Excel窗口eole.visible=.t.6更改Excel標(biāo)題欄eole.Caption=VFP應(yīng)用程序調(diào)用Microsoft Excel7給單元格賦值eole.cells(1,4).value=XM(XM為數(shù)據(jù)庫(kù)字段名)8設(shè)置指定列的寬度(單位:字符個(gè)數(shù))eole.ActiveSheet.Columns(1).ColumnWidth=59設(shè)置指定行的高度(單位:磅)eole.ActiveSheet.Rows(1).RowHeight=1/0.035(設(shè)定行高為1厘米,1磅=0.035厘米)10在第18行之前插入分頁(yè)符eole.Worksheets(Sheet1).Rows(18).PageBreak=111在第4列之前刪除分頁(yè)符eole.ActiveSheet.Columns(4).PageBreak=012指定邊框線寬度(Borders參數(shù)如下)ole.ActiveSheet.Range(b3:d3).Borders(2).Weight=313設(shè)置四個(gè)邊框線條的類型eole.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è)置頁(yè)眉eole.ActiveSheet.PageSetup.CenterHeader=報(bào)表115設(shè)置頁(yè)腳eole.ActiveSheet.PageSetup.CenterFooter=第P頁(yè)16設(shè)置頁(yè)眉到頂端邊距為2厘米eole.ActiveSheet.PageSetup.HeaderMargin=2/0.03517設(shè)置頁(yè)腳到底邊距為3厘米eole.ActiveSheet.PageSetup.FooterMargin=3/0.03518設(shè)置頂邊距為2厘米eole.ActiveSheet.PageSetup.TopMargin=2/0.03519設(shè)置底邊距為4厘米eole.ActiveSheet.PageSetup.BottomMargin=4/0.03520設(shè)置左邊距為2厘米veole.ActiveSheet.PageSetup.LeftMargin=2/0.03521設(shè)置右邊距為2厘米eole.ActiveSheet.PageSetup.RightMargin=2/0.03522設(shè)置頁(yè)面水平居中eole.ActiveSheet.PageSetup.CenterHorizontally=.t.23設(shè)置

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論