去年底老闆臨時交給乙個任務,為乙個試驗資料管理系統編寫乙個電子報告生成程式。因為老闆也不怎麼重視這個專案(錢少啊,呵呵),所以這個任務只好落在我這種小碩身上了。我也是兩眼瞎,萬事從頭幹。三個月的苦鬥,還算圓滿交差。用vc進行office自動化開發,網上有很多文章,我本不想在此畫蛇添足。只是感於自己查資料時的苦痛,所以就厚著臉皮把一些心得拿出來見見陽光,有一些技術還是自己摸索出來的。最後,office自動化開發與我專業無丁點關係,希望此文不至於太班門弄斧讓你看得難堪,如果尚有所幫助,那真是不勝榮幸(本文只涉及如何解決問題,沒有原理,所以,don』t ask me why)
1 前話
本文中,只講述如何使用vc++(就是mfc)進行word、excel自動化開發。有幾個問題先交待於此。
(1) office開發之vc與vb實現之比較。事實上,mfc實在不適合進行office自動化開發。相對vb而言,c++是一種強調型別的語言,這使得在實際程式設計時通常搞得你非常煩躁,不停地返回一些毫無意義的物件或指標(雞肋啊!),而且整個程式會顯得非常冗長。vb這種屬性化的程式語言則非常適於自動化開發。
(2)office版本。在你提交幫助文件的時候,一定要說明你是針對哪個office版本開發的,否則不同的office版本可能會導致程式無法正常執行,因為不同版本的office提供的介面函式可能是不同的(特別是使用vc開發這個問題就比較明顯,不知vb是否有同樣的問題)。本文中所述的是office20003版本。
(3)兩個重要的學習**。初學office開發,兩個不可忽視的學習**是:word本身的vba巨集**和微軟官方**。錄製的vba巨集**可以給我們提供非常有用的思路,而且通過除錯可以獲得很多所需的引數值(因為mfc通常並不支援很多vba巨集)。微軟官方網提供了許多非常實用的技術文獻(本文涉及的一些技術就來自於msdn),如果英文基礎還可以的話,建議到英文msdn上去看看,那裡的資料要比中國msdn多。
(4)由於所有權的一些問題,所以不能提供源**,也許會給閱讀帶來一些不便,這點希望諒解(而且那**確實太臭,被我們的大師兄客氣地批評得體無完膚,也就不敢拿出來獻醜了)
2 自動化技術簡述
自動化(以前稱為 ole 自動化)是一種允許您利用現有程式的功能並將其合併到您自己的應用程式中的技術。自動化是建立在元件物件模型 (com) 的基礎上。idipatch是自動化技術的核心。
variant是另乙個重要的概念。variant結構是乙個通用的資料型別,idipatch利用它來傳遞引數和返回值。mfc小組建立了乙個colevariant類將variant結構包裝起來,並被很好地用於自動化客戶和元件。需要注意的是colevariant通常只支援short, long,float等數字型別,不支援int型別,使用時請注意強制轉換。關於colevariant類的更多資訊可以參看msdn。
關於com技術和自動化技術更多資訊請參看一些公開出版的書籍及微軟官方**資料。
另外提前交待的是:
(1)在進行自動化開發前,必須首先初始化com庫。通常一種便利的方法是在應用程式類的initinstance()函式裡新增以下語句:
if(!afxoleinit())
(2)在自動化開發中,微軟還提供了乙個方便的colevariant型別的數值,colevariant((long)disp_e_paramnotfound,vt_error)。通常,如果我們不清楚引數含義,均可用此值進行代替,系統會自動選擇預設值傳遞給引數。以下行文中,我們以varopt代替這個colevariant物件。
前端自動化開發之grunt
上篇文章介紹了前端模組化開發工具seajs,利用seajs我們可以輕鬆實現前端的模組化程式設計,參見 一 準備工作 再使用grunt之前,我們先要安裝node.js,利用node的包管理工具npm來安裝grunt 關於如何安裝及配置node不屬於本文涉及範疇,所以在這裡不做介紹,需要檢視的童鞋可以參...
Python自動化開發03
1 去重 list 1 set 1,2,3,4,0,7,4,8 list2 set 99,34,6,8,3 list3 set 0,4,8 list4 set 84,45,49 print list 1 2 交集 list 1 list2 print list 1.intersection list...
Python自動化開發學習1
一 開篇的大段毒雞湯真是夠補。正好在外面旅遊,一路上帶著耳機就全部聽完了。二 進入正題,結果還是介紹。說下版本問題,盡量還是用python3。三 hello world。就是個儀式感,別的沒啥 print 你好 四 變數。雖然駝峰規則也行,但是python推薦用 下劃線,那就用下劃線把。變數名全大寫...