明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

PB通過OLEObject使用Word

[摘要]1 引言在編程的時(shí)候,常常需要訪問Word文檔。除了使用DDE之外,PowerBuilder還有一種操作Word的方式,就是通過OLEObjcet和OLEControl。OLEObject是不可視的OLE對(duì)象,而OLEControl則是可視的窗口控件。由于OLEObject較后...
1           引言
在編程的時(shí)候,常常需要訪問Word文檔。除了使用DDE之外,PowerBuilder還有一種操作Word的方式,就是通過OLEObjcet和OLEControl。

OLEObject是不可視的OLE對(duì)象,而OLEControl則是可視的窗口控件。由于OLEObject較后者更靈活方便,如果不是必須在窗口上顯示W(wǎng)ord文檔內(nèi)容,使用前者是更好的選擇。

程序開發(fā)員在使用OLE連接Word文檔的時(shí)候,常常遇到這樣兩個(gè)問題:

第一:如果某文檔已經(jīng)打開,再使用程序調(diào)用的時(shí)候,會(huì)產(chǎn)生程序運(yùn)行錯(cuò)誤;

第二:經(jīng)常發(fā)現(xiàn)創(chuàng)建的WinWord.exe進(jìn)程沒有能夠正常終止。

2           分析
下面我們來分析這兩個(gè)錯(cuò)誤產(chǎn)生的原因。

對(duì)于第一個(gè)錯(cuò)誤,往往是由于使用OLEObjectVar.ConnectToObject(“<FileName>”)的時(shí)候,<FileName>這個(gè)文件已經(jīng)打開了。此時(shí)使用ConnectToObject會(huì)造成錯(cuò)誤。

對(duì)于第二個(gè)錯(cuò)誤,一般是使用 OLEObjectVar.ConnectToNewObject (“Word. Application”) 創(chuàng)建了新的Winword.exe進(jìn)程,但是沒有執(zhí)行關(guān)閉這個(gè)新的應(yīng)用的操作。

3           解決
經(jīng)過分析,我們可以確定了如何解決PB調(diào)用Word的程序的問題。

打開文檔

首先,我們使用<OLEObjectVar>.ConnectToObject(“<WordFileName>”)來打開一個(gè)空Word文檔。打開成功后,使用<OLEObjectVar>.Application獲得對(duì)Word.Application的引用并設(shè)置Applicatin.Visible=TRUE,并關(guān)閉剛才打開的空文檔;

然后,使用Word.Application的Open方法打開要使用的文檔。

這樣的方法打開文檔,如果當(dāng)前有正在運(yùn)行的Windows.exe進(jìn)程,就不必打開新的進(jìn)程,而是使用當(dāng)前的進(jìn)程,并且可以成功地對(duì)當(dāng)前的進(jìn)程獲得引用。

關(guān)閉文檔

首先,我們關(guān)閉程序打開的使用的文檔;

然后判斷Application是否還有其他的打開的文檔。如果沒有其他打開的文檔,則調(diào)用Application的Quit方法,讓Application退出,結(jié)束Winword.exe的程序進(jìn)程。如果確定以后還經(jīng)常的調(diào)用Word,也可以不關(guān)閉Winword.exe的進(jìn)程,這樣可以每次很快的打開Word的文檔。

4           注意事項(xiàng)
由于通過OLEObject調(diào)用Word等Office有許多限制。盡管這個(gè)方法能夠解決許多問題,但是還是有許多需要特別注意的地方

第一,使用ConnectToObject連接的文檔,不能被鎖定(比如被以前的進(jìn)程打開,或者被當(dāng)作模板新建立了一個(gè)文檔,都可能鎖定),否則將會(huì)產(chǎn)生未知錯(cuò)誤(返回值-9);

第二,對(duì)Document的各種操作,要保證Word.Application.Visible=TRUE,否則調(diào)用可能會(huì)產(chǎn)生程序錯(cuò)誤。