SWT中ole/activex實踐--操作word的一個例子


http://setting.iteye.com/blog/747295

————————————————————————————————————————————————

這幾年,做了很多word/excel/ppt方面的開發,特別是office插件/vsto/oba,和各種支持activex的ole嵌入環境下的應用。

基本上,了解了office對象模型,就可以在支持ole的環境下游刃有余的使用接口進行開發了。

不過office本身是不支持ole的,一般需要一個native的“外殼”包裹住,然后再在我們開發的環境下ole這個外殼。

例如,web頁面或一般環境中,使用dsoframer。SWT中使用OleClientSite。

這里講講OleClientSite。

windows下,SWT中(OS類)封裝了絕大部分常見的win32 api。而且SWT中的組件都是系統原生的,或是組合的,

所以調用Activex的窗口並交互成為了可能(AWT可以拿到原生窗口的句柄,也能別別扭扭的實現,純swing不是原生的,所以是拿不到的),

OleClientSite封裝了調用Activex並交互的細節。

 

大概的方式是:傳給OleClientSite一個Activex的progID,初始化一個Activex,並掛接到制定的composite上,

然后根據容器對Activex調用設置大小長寬。接着,通過一個OleAutomation封裝一個Activex中的原生對象的引用指針,

然后可以用getIDsOfNames根據屬性名或是方法名獲取對應id(做過mfc/atl-activex的都知道這個在IDL文件中注冊的id)。

然后可以調用OleAutomation的 getProperty/setProperty/invoke/invokeNoReply 等方法,獲取屬性或調用相應的方法。

當然返回結果可能還是原生對象,可以繼續用OleAutomation包裝,然后重復上面的過程。

SWT還提供了一個通用的類型包裝器,用來原生的幾種常見c類型和java類型的轉換:Variant。(很像vb里的那個吧)

 

-------------------------------------  想了解的看SWT源碼和com本質論去  -----------------------------------

 

 

 附件是一個嵌入word,並定位word文檔中的字符串的例子。

 

ListOLE是傳遞一個OleAutomation,列出所有方法的工具類。源於網上。

 

txt文件夾提供了word.Application 和 word.Document對象的所有com接口方法和屬性。

 

運行Word.java,展示word文件:

 

 http://dl.iteye.com/upload/picture/pic/70372/203108bc-75d0-3460-a372-47e34ca301ab.jpg

點擊menu1,搜索定位字符串bbbbb:

http://dl.iteye.com/upload/picture/pic/70370/e61adc5c-95ed-38ea-95ea-5a5bffe88356.jpg 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM