PB通過OLEObject使用Word
發表時間:2024-02-14 來源:明輝站整理相關軟件相關文章人氣:
[摘要]1 引言在編程的時候,常常需要訪問Word文檔。除了使用DDE之外,PowerBuilder還有一種操作Word的方式,就是通過OLEObjcet和OLEControl。OLEObject是不可視的OLE對象,而OLEControl則是可視的窗口控件。由于OLEObject較后...
1 引言
在編程的時候,常常需要訪問Word文檔。除了使用DDE之外,PowerBuilder還有一種操作Word的方式,就是通過OLEObjcet和OLEControl。
OLEObject是不可視的OLE對象,而OLEControl則是可視的窗口控件。由于OLEObject較后者更靈活方便,如果不是必須在窗口上顯示Word文檔內容,使用前者是更好的選擇。
程序開發員在使用OLE連接Word文檔的時候,常常遇到這樣兩個問題:
第一:如果某文檔已經打開,再使用程序調用的時候,會產生程序運行錯誤;
第二:經常發現創建的WinWord.exe進程沒有能夠正常終止。
2 分析
下面我們來分析這兩個錯誤產生的原因。
對于第一個錯誤,往往是由于使用OLEObjectVar.ConnectToObject(“<FileName>”)的時候,<FileName>這個文件已經打開了。此時使用ConnectToObject會造成錯誤。
對于第二個錯誤,一般是使用 OLEObjectVar.ConnectToNewObject (“Word. Application”) 創建了新的Winword.exe進程,但是沒有執行關閉這個新的應用的操作。
3 解決
經過分析,我們可以確定了如何解決PB調用Word的程序的問題。
打開文檔
首先,我們使用<OLEObjectVar>.ConnectToObject(“<WordFileName>”)來打開一個空Word文檔。打開成功后,使用<OLEObjectVar>.Application獲得對Word.Application的引用并設置Applicatin.Visible=TRUE,并關閉剛才打開的空文檔;
然后,使用Word.Application的Open方法打開要使用的文檔。
這樣的方法打開文檔,如果當前有正在運行的Windows.exe進程,就不必打開新的進程,而是使用當前的進程,并且可以成功地對當前的進程獲得引用。
關閉文檔
首先,我們關閉程序打開的使用的文檔;
然后判斷Application是否還有其他的打開的文檔。如果沒有其他打開的文檔,則調用Application的Quit方法,讓Application退出,結束Winword.exe的程序進程。如果確定以后還經常的調用Word,也可以不關閉Winword.exe的進程,這樣可以每次很快的打開Word的文檔。
4 注意事項
由于通過OLEObject調用Word等Office有許多限制。盡管這個方法能夠解決許多問題,但是還是有許多需要特別注意的地方
第一,使用ConnectToObject連接的文檔,不能被鎖定(比如被以前的進程打開,或者被當作模板新建立了一個文檔,都可能鎖定),否則將會產生未知錯誤(返回值-9);
第二,對Document的各種操作,要保證Word.Application.Visible=TRUE,否則調用可能會產生程序錯誤。