




已閱讀5頁,還剩17頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
VFP與Excel交互編程 VFP(Visual Foxpro)是一種關系型數(shù)據(jù)庫管理系統(tǒng),由于其強大的數(shù)據(jù)處理能力及良好的兼容性,使其成為數(shù)據(jù)庫應用程序開發(fā)人員強有力的工具而廣為使用; 而Excel則是一個優(yōu)秀的電子表格處理軟件,在兼容性、操作界面、公式運算、圖表等方面有著獨到的優(yōu)勢,成為廣大辦公應用人員必備的首選軟件。上述兩種軟件在各自的應用領域均得到了廣泛的應用,同時上述兩種軟件還具有良好的交互編程能力,為兩者相輔相成、取長補短奠定了良好的基礎。 本文將結合實例介紹VFP與Excel交互編程的方法,在VFP中除了使用OLE技術外,還可使用DDE技術與外部服務器進行數(shù)據(jù)交換,本文主要講解VFP中使用OLE技術與Excel交換數(shù)據(jù),Excel中借助內(nèi)置的VBA使用VFP提供的Application對象來調(diào)用VFP中的一些功能。其功能可簡述如下:VFP數(shù)據(jù)表“學生成績.DBF”中含“學號、姓名、語文、數(shù)學”等字段,示例程序?qū)腅xcel工作簿“VFP交互.XLS”的工作表“查詢”中用“條件”區(qū)域(一般為一個矩形區(qū)中的數(shù)據(jù),該區(qū)域名稱指定為“條件”,數(shù)據(jù)形如“語文60”、“數(shù)學90”等)中的數(shù)據(jù)作為查詢的條件,用“連接條件”區(qū)域(一般為一個單元格,其值為“or”或者“and”)來獲取組合“條件”的邏輯連接,并將該連接信息的內(nèi)容以工作表的形式顯示出來,然后調(diào)用VFP中針對給定表的SQL查詢來找出給定條件的記錄并顯示到Excel中。下列程序均在VFP 6.0與Excel 2000中調(diào)試通過。 Excel驅(qū)動VFP Excel內(nèi)置的VBA語言(Visual Basic For Application)為Excel功能的擴展提供了便利的手段,用戶可使用該語言直接驅(qū)動VFP完成數(shù)據(jù)檢索等功能。程序首先生成一個VFP對象,然后用VFP的DoCmd方法執(zhí)行VFP搜索命令串,其搜索結果再借助于VFP的DataToClip方法拷貝至剪切板,最后VBA將其粘貼至工作表的正確位置,為了每次運行時能將結果插入到工作表中,依次對操作的工作表以“搜索結果”、“搜索結果1”等進行編號。 Sub exceluseFox () Dim oFox As Object 聲明oFox為一個對象 Dim SCommand As String SQL對應的命令串變量 Dim cell As Variant Dim choice As String Dim join As String Dim first As Boolean Dim found As Boolean 搜索結果標志,若表單中有搜索結果,則為真 Set oFox = CreateObject(“VisualFoxPro .Application”) 啟動VFP,生成VFP對象 Sheets(“查詢”).Select 選擇對應的工作表“查詢” join = Range(“連接條件”) 在單一表格中的一個元素,其值為and或者or choice = “” 置連接串初值為空 first = True 一般情況下連接串后需要加上邏輯連接符and 或 or,首次例外 For Each cell In Range(“條件”) 產(chǎn)生連接條件,形成where語句的連接邏輯串 If first Then choice = choice + cell 形成第一次出現(xiàn)的where子句后的字符串 first = False 修改首次進入標志,以后的連接均需要加上邏輯連接符 Else choice = choice + “ ” + join + “ ” + cell join的值是and或者是or End If Next cell Sheets.Add 產(chǎn)生新的工作表單 找一個不重復的工作表名 found = False 工作表名中前四個漢字有沒有“搜索結果”的標志變量 n = 1 For Each cell In Worksheets If InStr(1, cell.Name, “搜索結果”) 0 Then found = True 找到對應的工作表 If n 名稱-定義”來完成對給定區(qū)域名稱的設定,這個名稱可以在VBA中訪問,如前述中的“條件”和“連接條件”。 VFP使用Excel OLE(Object Linking and Embedding)對象鏈接與嵌入,是Windows應用程序間相互傳遞和共享數(shù)據(jù)的一種有效方法。VFP借助于OLE不僅可共享其他應用程序的數(shù)據(jù),而且還能以對象方式直接控制其他應用程序的運行,從而進一步擴展VFP的功能。VFP支持直接在程序中創(chuàng)建、使用和控制OLE對象,實現(xiàn)OLE自動化。作為OLE客戶,VFP與作為OLE服務器的Excel具有良好的編程接口,下述程序段用OLE方式實現(xiàn)所要求的功能。程序首先生成一個Excel的OLE對象OleApp以便對其進行操作,然后利用OLE功能從Excel表單中獲取欲查詢的條件,并控制Excel生成新的唯一的工作表,通過找尋當前操作的所有工作表達到名稱的唯一,VFP的查詢結果仍然使用剪切板的方式傳遞至Excel工作表中。 local condition,where1,first,scommand,cell,newsheet,found1,n OleApp=CreateObject(“Excel.Application”) & 打開Excel,產(chǎn)生OLE對象 OleApp.Application.Caption=“VFP交互編程” & 指定標題欄名稱 OleApp.Application.Visible=.T. & 置Excel可見 OleApp.Application.WorkBooks.Open(“d:vfpVFP交互.xls”) & 打開Excel工作簿,用戶也可以修改連接條件或者查詢條件 where1=“” &保存SQL中where子句的變量 first=.t. &置首次進入“查詢”工作表中“條件”區(qū)域標志 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 & 選取示例中的對應工作表 condition=.range(“連接條件”).value &得到“連接條件”區(qū)域中的邏輯連接符 for each cell in .range(“條件”).value &將表單區(qū)域內(nèi)所有單元的數(shù)據(jù)拼接以形成where的連接邏輯串 If first Then Where1 = Where1 + cell &首次進入時where子句中串前不需要邏輯連接符 first = .f. &置非首次進入標志 Else Where1=Where1 +“ ”+condition +“ ”+ cell &這里condition的值取and或者or EndIf next for .Sheets.Add & 新建一工作表單 &下面的for each子句是用于找尋有否對應的工作表,若有則在搜索結果1、搜索結果2搜索結果n中得到最大的n值以便產(chǎn)生下一個比n大1的新工作表“搜索結果&(n+1)” for each newsheet in .worksheets if “搜索結果”$ n=max(val(subset(space(2),9,2),n) &得到最大的n值 found1=.t. &置找到工作表中前四個漢字是“搜索結果”的工作表 endif next for if not found1 .ActiveSheet.Name =“搜索結果1” & 指定工作表單的名稱 else .=“搜索結果”+str(n+1,2) &得到唯一的工作表 endif SCommand = “SELECT * FROM d:vfp學生成績表 WHERE ”+ALLTrim(where1) + “INTO CURSOR TEMP” & 形成VFP查詢命令串 &Scommand & 執(zhí)行VFP命令串 _VFP.DataToClip(“TEMP”, , 3) & 將搜索結果以文本方式拷貝至剪切板 .Range(“a1: a1”).Select & 指向拷貝目標區(qū)域左上角單元 .ActiveSheet.Paste & 粘貼搜索結果 ENDWITH ENDDO OleApp.Quit & 關閉Excel,保存更新后的工作簿文件 結束語 VFP與Excel的交互能力是很強的,用戶可以使用VFP處理數(shù)據(jù)庫的一些運算,如插入、排序、合并、選擇等,將結果交由Excel中進行一些后期的處理,甚至可以將一些抽取數(shù)據(jù)的條件直接加入到Excel的條件區(qū)域中,由VFP來讀取條件區(qū)域進行數(shù)據(jù)的篩選??傊?,只要能充分利用好各自的優(yōu)點,理解交互的接口方法,就一定能夠編寫出較適用的程序,滿足實際工作的需要。VFP調(diào)用EXCEL的補充方法 下面是我使用 VFP CALL EXCEL的部分例子: 這是本人從書本上抄的片斷和我的小小經(jīng)驗,可以讓你很方便的在 VFP 中調(diào)用 EXCEL,所有的例程我都試驗過。用Visual Foxpro 設計用Excel表格的程序 利用OLE Automation 設計Excel 應用程序 Excel支持的對象說明: (a) VBA 對象: 對象名稱 意義 Application Excel應用程序?qū)ο?WorkBooks Excel活頁薄對象 (b)所使用的Method 對象名稱 Method 執(zhí)行意義 Application Cells 設定或傳回來某個網(wǎng)格的內(nèi)容 Range 傳回或設定某一個范圍的網(wǎng)格 Charts 傳回或設定活頁簿的單一統(tǒng)計表 Quit 結束 Excel Application Save 激活存儲文件對話框 WorkBooks Add 新增一個工作簿 Charts Add 新增一個統(tǒng)計圖 (c)所使用的Property 對象名稱 Property 設定意義 Application Visible 是否現(xiàn)實再 SCREEN上 .T. , .F. Value 傳回或者設定存儲文件的內(nèi)容 ActiveSheet 回應Excel Application 執(zhí)行工作表對象 實例說明: 啟動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)中存儲數(shù)據(jù) *Excel.application Object *Excel.application.ActiveWorkBook Property *WorkBOoks Object *WorkBOoks Object的Add Method.*Sheets對象*Sheets(Index)對象指定索引工作表*Excel.Application對象的Cells Method結合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=客戶編號MYEXCEL.ACTIVEWORKBOOK.SHEETS(1).CELLS(1,2).VALUE=公司行號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)整單元格對齊方式:MYEXCEL.ACTIVEWORKBOOK.SHEETS(1).CELLS(1,1).horizontalalig=11為默認方式,2為左對齊,3為中對齊,4為右對齊。如何將數(shù)據(jù)存儲: MYEXCEL.SAVE() 注:可以用Save(FileName)指定預存儲文件名, 則可不用激活SAVE AS 窗口 如何打印表格: MYEXCEL.ActiveWorkBook.PrintOut &默認打印增個Sheet如何指定打印表格: MYEXCEL.ActiveWorkBook.PrintOut(1,1,1,.T.) &默認打印增個SheetPrintOut有四個參數(shù) A. 數(shù)值:,表示指定的工作簿中進行打印的Sheet 的開始編號 B. 數(shù)值:,表示指定的工作簿中進行打印的Sheet 的結束編號 C.打印分數(shù). D.是否進行 Preview, .T.,預覽, .F.打印 如何產(chǎn)生統(tǒng)計圖 CURROW=MYEXCEL.ACTIVESHEET.ROWS.COUNT RANGESTRING=A1:+B+ALLTRIM(STR(CURROW) MYEXCEL.RANGE(RANGESTRING).SELECT MYEXCEL.CHARTS.ADD 結束EXCEL MYEXCEL.QUIT EXCEL.ActiveWindow.SelectedSheets.PrintPreview &預覽打印EXCEL.ActiveWorkbook.SaveAs(C:My DocumentsBook1.xls) &另存為EXCEL.ActiveWorkbook.Close &關閉一個工作表,如果有修改則提示 EXCEL.ActiveWorkbook.Close(.t.) &提示另存為 EXCEL.ActiveWorkbook.Close(.f.) &關閉一個工作表不用提示是否存盤VFP全面控制EXCEL VFP和Excel都可以用來進行處理數(shù)據(jù)庫表格,如果巧妙地將二者的優(yōu)點結合起來,將會大大方便我們的工作。比如我們可以利用VFP進行處理數(shù)據(jù),而利用Excel的預覽打印功能進行報表打印。這就需要我們在VFP中直接來控制Excel。下面就在開發(fā)VFP應用項目時對Excel的控制作一下介紹:1創(chuàng)建Excel對象eole=CREATEOBJECT(Excel.application)2添加新工作簿eole.Workbooks.add3設置第3個工作表為激活工作表eole.Worksheets(sheet3).Activate4打開指定工作簿eole.Workbooks.Open(c:templl.xls)5顯示Excel窗口eole.visible=.t.6更改Excel標題欄eole.Caption=VFP應用程序調(diào)用Microsoft Excel7給單元格賦值eole.cells(1,4).value=XM(XM為數(shù)據(jù)庫字段名)8設置指定列的寬度(單位:字符個數(shù))eole.ActiveSheet.Columns(1).ColumnWidth=59設置指定行的高度(單位:磅)eole.ActiveSheet.Rows(1).RowHeight=1/0.035(設定行高為1厘米,1磅=0.035厘米)10在第18行之前插入分頁符eole.Worksheets(Sheet1).Rows(18).PageBreak=111在第4列之前刪除分頁符eole.ActiveSheet.Columns(4).PageBreak=012指定邊框線寬度(Borders參數(shù)如下)ole.ActiveSheet.Range(b3:d3).Borders(2).Weight=313設置四個邊框線條的類型eole.ActiveSheet.Range(b3:d3).Borders(2).LineStyle=1(其中Borders參數(shù):1左、2右、3頂、4底、5斜、6斜/;LineStyle值:1與7細實、2細虛、4點虛、9雙細實線)14設置頁眉eole.ActiveSheet.PageSetup.CenterHeader=報表115設置頁腳eole.ActiveSheet.PageSetup.CenterFooter=第P頁16設置頁眉到頂端邊距為2厘米eole.ActiveSheet.PageSetup.HeaderMargin=2/0.03517設置頁腳到底邊距為3厘米eole.ActiveSheet.PageSetup.FooterMargin=3/0.03518設置頂邊距為2厘米eole.ActiveSheet.PageSetup.TopMargin=2/0.03519設置底邊距為4厘米eole.ActiveSheet.PageSetup.BottomMargin=4/0.03520設置左邊距為2厘米veole.ActiveSheet.PageSetup.LeftMargin=2/0.03521設置右邊距為2厘米eole.ActiveSheet.PageSetup.RightMargin=2/0.03522設置頁面水平居中eole.ActiveSheet.PageSetup.CenterHorizontally=.t.23設置
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 國培活動總結
- 人教版小學數(shù)學六年級下冊復習課《組合圖形的面積計算》教學設計
- 寶葫蘆的秘密讀書筆記合集15篇
- 青海海北州圖書館招聘試題帶答案分析2024年
- 人教版初中地理八年級下冊《第五章中國的地理差異》三節(jié)5課時教學設計
- 2023年度“安全生產(chǎn)事故隱患排查”知識競賽考前沖刺試卷附參考答案詳解
- 建筑公司臨時用電電纜埋地標識設置規(guī)定
- 建筑公司手持電動工具絕緣檢測制度
- 重構課堂時空:小學勞動課陣地建設的因應之道
- 七上 思品 第五課 自我新期待 教學設計
- 湖南省長沙市平高教育集團六校2023-2024學年高二下學期期末聯(lián)考+化學試卷(含答案)
- 【8物(滬科版)】合肥市第四十五中學2023-2024學年八年級下學期期末物理試題
- 區(qū)域代理商合同模板
- 外科學課件換藥及拆線
- DZ/T 0462.8-2023 礦產(chǎn)資源“三率”指標要求 第8部分:硫鐵礦、磷、硼、天然堿、鈉硝石(正式版)
- 《車位租賃協(xié)議》標準版可打印
- JT-T 1495-2024 公路水運危險性較大工程專項施工方案編制審查規(guī)程
- 果農(nóng)指南:釋迦果病蟲害防治手冊
- 蘭州彤輝商貿(mào)有限公司肅南縣博懷溝一帶銅鐵礦礦產(chǎn)資源開發(fā)與恢復治理方案
- 零星維修項目服務方案
- “四不傷害”安全生產(chǎn)理念培訓課件
評論
0/150
提交評論