国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設計 > 正文

在VB中操縱OLE服務器應用程序

2019-11-18 17:45:24
字體:
來源:轉載
供稿:網(wǎng)友
OLE自動化是不同應用程序之間進行通訊的一個標準。OLE自動化的工作方式是:通訊被動方(OLE服務器)應用程序向通訊主動方(OLE客戶機)應用程序提供一個以上可供其調用的OLE自動化對象類型,OLE客戶機通過引用這些對象實現(xiàn)對OLE服務器的調用,然后通過設置對象的屬性和使用對象的方法操縱OLE服務器應用程序,完成兩者之間的通訊。

VisualBasic是一個完全支持OLE自動化的應用程序開發(fā)工具。使用VB,既可以編制做為OLE服務器的應用程序,也可以編制作為OLE客戶機的應用程序。MSWord6.0是一個不完全支持OLE自動化的應用軟件,它只能作為OLE服務器供其它應用程序調用。本文將以一個VB應用程序通過OLE自動化操縱MSWord6.0的實例,具體描述在VB中操縱OLE服務器應用程序的方法。

在VB代碼中調用OLE服務器的方法如下:控件類型屬性屬性值DataControlDataBaseNameNameC:/VB/BIBLIO.MDBData1RecordSourceAuthorsDBGridControlCommandButtonControlDataSourceData1NamecmdReportCaption生成報表CommandButtonControlNamecmdExitCaption退出

⑴聲明一個對象變量。如:DimMS—WORDAsObject

⑵根據(jù)OLE服務器提供的對象類型,使用CreateObject函數(shù)創(chuàng)建一個對象,并由Set語句將該對象賦予對象變量。

CreateObject函數(shù)的語法如下:

CreateObject(class)

函數(shù)參數(shù)class的格式為:appname.objecttype

appname是提供對象的應用程序的名稱,如:Word

objecttype是欲創(chuàng)建的對象的類,如:Basic

MSWord6.0為OLE客戶機應用程序提供了一個類型為“basic”的對象,VB可以使用該對象類型,實現(xiàn)對Word的調用。具體語句如下:

SetMS—WORD=CreateObject(″Word.Basic″)

⑶通過設置對象的屬性和使用對象的方法,實現(xiàn)對OLE服務器的操縱。

對象類型“basic”采用Word宏語言WordBasic的大多數(shù)語句和函數(shù)作為它的方法。也就是說,一旦在VB中創(chuàng)建了一個“basic”對象,就可以通過該對象使用大多數(shù)WordBasic語句或函數(shù),從而可以近乎完美地操縱Word或Word文檔。例如,下列語句在VB代碼中使用WordBasic的FileNewDefault語句創(chuàng)建一個Word新文檔:

MS—WORD.FileNewDefault

⑷調用結束后,使用關鍵字Nothing,釋放該變量占用的資源。如:SetMS—WORD=Nothing

實例

本例將使用VB編寫一個簡單的數(shù)據(jù)庫應用程序。該程序從數(shù)據(jù)庫中取出數(shù)據(jù),然后通過OLE自動化將這些數(shù)據(jù)輸入至Word,并按照Word的排版格式編排成一個表格。例中使用的數(shù)據(jù)庫是VB自含的BILIO.MDB數(shù)據(jù)庫,數(shù)據(jù)檢索結果取自Authors數(shù)據(jù)表。本例稍加改動,即可作為數(shù)據(jù)庫應用程序的報表生成功能模塊使用。

首先,創(chuàng)建一個名為Form1的窗體,設置其Caption屬性為“OLE自動化演示”。然后在該窗體中加入四個控件并設置有關屬性,具體如下:

完成上述工作后,按F5運行的屏幕布局應如下圖示。

接著需要編寫VB代碼來實現(xiàn)與Word的連接。本實例的代碼清單如下(注:代碼中的斜體部分是WordBasic宏語言的語句,這些語句的使用方法請參閱WordBasic宏語言有關資料):

⑴在Form1的GeneralDeclarations部分聲明窗體級全局變量和常量。

DimMS—WORDAsObject'聲明一個對象變量

ConstMaxCols=5'聲明一個用于標明當前數(shù)據(jù)記錄集中字段個數(shù)的常量。在本例中字段個數(shù)為5

⑵創(chuàng)建一個子例程InsertTableIntoMS—Word(),該子例程使用WordBasic宏語言在Word6.0中制作一個表格,并將當前數(shù)據(jù)記錄集中的數(shù)據(jù)依次插入表格單元。

SubInsertTableIntoMS—Word()

DimIAsInteger,jAsInteger,ColAsInteger,RowAsInteger

DimCellContentAsString

Me.Hide

Col=MaxCols

Row=Data1.Recordset.RecordCount

MS—WORD.FileNewDefault

MS—WORD.MsgBox″正在建立報表,請稍候…″,″″,-1

MS—WORD.LeftPara

MS—WORD.ScreenUpdating0

MS—WORD.TableInsertTable,Col,Row,,,16,167

MS—WORD.StartOfDocument

Data1.Recordset.MoveFirst

ForI=1ToMaxCols

CellContent$=Data1.Recordset.Fields(I-1).Name

MS—WORD.InsertCellContent$

MS—WORD.NextCell

NextI

Do

ForI=1ToMaxCols

IfIsNull(Data1.Recordset.Fields(I-1).Value)Then

CellContent$=″″

Else

CellContent$=Data1.Recordset.Fields(I-1).Value

EndIf

MS—WORD.InsertCellContent$

MS—WORD.NextCell

NextI

Data1.Recordset.MoveNext

LoopUntilData1.Recordset.EOF=True

MS—WORD.TableDeleteRow

MS—WORD.StartOfDocument

MS—WORD.TableSelectRow

MS—WORD.TableHeadings1

MS—WORD.CenterPara

MS—WORD.StartOfDocument

MS—WORD.ScreenRefresh

MS—WORD.ScreenUpdating1

MS—WORD.MsgBox″結束″,″″,-1

Me.Show

EndSub

⑶命令按鈕控件cmdReport的鼠標單擊事件代碼

PRivateSubcmdReport—Click()

DimResponse

Screen.MousePointer=11

SetMS—WORD=CreateObject(″Word.Basic″)

MS—WORD.AppActivate″MicrosoftWord″,1

CallInsertTableIntoMS—Word

Screen.MousePointer=0

EndSub

⑷命令按鈕控件cmdExit的鼠標單擊事件代碼

PrivateSubcmdExit—Click()

SetMS—WORD=Nothing

UnloadMe

EndSub

幾點說明

①在本程序運行之前,Word6.0必須已經成功安裝,否則系統(tǒng)將產生一個VB可捕獲的錯誤。Word6.0的表格列不能超過31列,否則系統(tǒng)將產生一個VB可捕獲的錯誤。讀者可以在代碼中加入錯誤處理代碼以處理這些錯誤。

②若本程序運行時Word尚未運行,OLE自動化將試圖啟動它。因此程序代碼中不必包括一條分開的指令來啟動Word。若Word是由VB應用程序啟動的,那么程序結束時Word將自動關閉;否則,Word將繼續(xù)運行。

③本實例使用的大部分WordBasic語句都與Word文檔的插入點有關,如果在本程序運行過程中人為地移動了插入點,則有可能導致表格的混亂和錯誤。為了避免這種情況發(fā)生,本程序在執(zhí)行插入操作之前使用ScreenUpdating語句將Word屏幕更新關閉,使用戶在執(zhí)行插入操作時不能移動插入點。

從上述實例可以看到,通過OLE自動化,使我們在開發(fā)新的應用程序時可以“借用”現(xiàn)成的應用程序的部分或全部功能,從而大大地減輕開發(fā)的工作量,縮短開發(fā)周期,使開發(fā)工作事半功倍。這就是OLE自動化帶給開發(fā)人員的好處。->


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 崇义县| 娄烦县| 长治县| 绿春县| 阜平县| 涞源县| 牡丹江市| 来安县| 汾西县| 郑州市| 丹江口市| 子洲县| 光山县| 大港区| 绍兴县| 梁山县| 阳东县| 清河县| 林周县| 渝北区| 华池县| 林甸县| 普安县| 澳门| 石泉县| 谷城县| 贺州市| 天祝| 定远县| 垣曲县| 简阳市| 长沙市| 资溪县| 金坛市| 苏尼特左旗| 赤壁市| 武威市| 平陆县| 沁水县| 侯马市| 龙陵县|