最近的30年來,宏(macros)成為了Microsoft Word的關鍵賣點。WordBASIC最初是在1989年引入的,它能夠讓受過極少培訓的打字員都能進行計算機編程,從而簡化他們的日常工作。
在那個時代,競爭非常激烈。除了Word,還有WordStar和后來居上的WordPerfect,它們都有自己的宏編程語言。隨著競爭的持續,業務用戶的需求越來越多,更新也變得非常頻繁。
在上世紀90年代末期,發生了一些有意思的事情。Microsoft創建了Visual Basic for Applications(VBA),這個語言具有(有限的)OOP能力以及與其相匹配的IDE,用以替代WordBASIC,它所創建的并不僅僅是另外一個嵌入式組件。最初的時候,Microsoft預期將這項技術用在所有的MS Office產品之中,隨后他們意識到可以對這項技術進行許可認證。很快,眾多的公司都提供了對VBA的支持,包括ArcGIS、AutoCAD、SolidWorks、CorelDraw,甚至還有WordPerfect。
在世紀之交不久,人們就看到了宏的大幅下滑。所謂的“宏病毒”造成了嚴重的破壞。因為它們隱藏在Word文檔中,所以病毒掃描器很難發現它們。
作為回應,Microsoft鎖定了VBA編程接口。它依然很強大,但是關閉了安全功能,所以使用它實際上很有挑戰性。大多數的病毒掃描器會拒絕所有通過email共享的帶有宏的文檔。
盡管它處于下滑的狀態之中,Visual Basic for Applications依然還是存在的。最新的7.1版本是在2013年發布的,并且從2010年開始它就有64位版本了。但是隨著基于Web的字處理器變得越來越流行,VBA也似乎走入了死胡同。它基于上世紀90年代的COM技術,并沒有可行的方案將其放到Web應用中。隨著人們逐漸將語言從BASIC替換為JavaScript,再創建一個“Web版本的VBA”顯得就有點不合時宜了。
.NET與Office
為了讓人們放棄過時的VBA技術,Microsoft還創建過Visual Studio Tools for Office(VSTO)。這個開發工具集和庫不僅能夠創建Office插件,還允許獨立的應用操縱Office文檔。
至少在理論上是這樣的。但實際上,在這兩方面VSTO都失敗了。
普通的程序員并不想要安裝Visual Studio并從頭開始創建Office插件。他們想要錄制一個宏,然后對其修改以滿足他們的需求。培訓學習的成本從“編輯直到可用為止”變成了完全從頭開始,這是難以承受的。
另外,還有版本的問題。VBA風格的宏會存儲為純文本,這意味著只要你不使用只有新版本才有的特性的話,你所編寫的代碼能夠用到任意版本的Office之中。而編寫VSTO插件時,你需要針對特定的Office版本進行編程。這意味著開發人員只能使用公司中最老的版本。
另一方面,專業的開發人員對插件基本上沒有太大的興趣。他們希望構建使用和/或生成文檔的服務器。VSTO基于COM的自動化,這意味著在做實際的工作之前,首先要有Word或Excel的一個副本。對于Web站點的每個用戶,都要運行一個重量級桌面應用的副本,這種做法顯然是站不住腳的。
與VBA類似,我們實際上無法在基于瀏覽器的Web處理器上使用VSTO。
使用Node構建Office的Add-In
如我們前文所述,JavaScript現在已經成了通用的編程語言。業余愛好者(以及類似的專業開發人員)不想要或不喜歡重量級的IDE,如Eclipse或Visual Studio,于是Node變成了他們的開發平臺。所以,Microsoft選擇這些工具來構建Office add-in,我們也不應該感到意外。
首先,我們需要安裝Node。然后從命令行中,運行下面的兩條命令:
npm install -g tsd bower gulp yo generator-office yo officeyeoman generator會詢問我們想要構建哪種類型的add-in(ribbon command、 task pane等)、支持哪些Office產品以及想要使用Angular還是純HTML/JavaScript進行構建。接下來需要執行的命令就是搭建本地的服務器,用來托管你的add-in。
gulp serve-static這是用于基本的冒煙測試的,對于實際環境來說,你需要在Web上運行Office。在打開一個空文檔之后,可以上傳add-in的manifest,然后查看它的實際效果。
你可能會問,既然要上傳manifest,為什么還要啟動本地服務器呢?這是因為manifest在你的電腦同時運行Office的時候,它就允許瀏覽器從電腦上加載add-in。在實踐中,這意味著你可以修改add-in,點擊瀏覽器的刷新按鈕,就能馬上看到實際的效果,不需要在每次變化之后都重新上傳add-in。
因為這是一個Web應用,所以可以使用瀏覽器內置的調試工具進行調試。
要看實際效果的話,可以觀看Harrison Shapley的Build Office Add-ins with Any Code Editor and Office Online演示。
查看英文原文:How Node Replaced Macros in Microsoft Word