Office 365 開發概覽系列教程(1)

  編者按:

  Office軟件經過不斷的發展,從本地應用變成雲端的Office 365,不僅僅是對用戶體驗的改變,Office 365的新架構也爲廣大開發者提供了全新的開放的開發平臺。開發者可以基於Office 365擴展自己個性化的需求,無論是在Word、PowerPoint、Excel、Outlook、還是Sharepoint上,都可以開發與O365合二爲一的Office 365應用程序。

  從今天開始,將陸續刊發專題系列文章《Office 365 開發概覽系列教程》,敬請關注。

  引子

  之前我在Office 365技術社羣(O萌)中跟大家提到,3月初適逢Visual Studio 2017隆重發布以及20週年紀念,我想要發起一次與Office 365開發相關的活動,一方面也是向Visual Studio致敬;另一方面,我在加入微軟之前,有相當長的一段時間都是從事與Office平臺定製和應用系統開發的工作(最早是做VBA的開發,後來有做過VSTO,以及SharePoint開發),而以微軟員工的身份跟很多客戶以及合作伙伴打交道下來,我有一個深切的體會就是說Office 365這個平臺不光是給客戶帶來了全新的體驗、也給獨立軟件開發商(ISV)和廣大的開發人員提供了前所未有的一些機會,但是這些潛力還沒有完全地開發出來,我覺得有必要也有興趣做一點這方面的分享,除了對我自己來說也是一個總結和思考的機會,如果還有幸對大家有所幫助,我將感到非常高興。

  我並不認爲Office 365的平臺就已經是完美的,事實上因爲在全球有多個版本導致有些功能或接口並不完全統一,而且由於開發的技術(Web爲主,結合了雲的架構)與傳統的Office開發有較大的差異,這些會給我們的開發人員帶來一些困擾和挑戰。我們在去年10月份的時候,在北京舉辦了第一屆Office 365技術峯會暨開發馬拉松大會,總部產品組來了將近20人的豪華團隊,與中國的開發團隊(或獨立開發個人)做了深入廣泛的交流,我們能看到大家的積極熱情,也收到了不少實際的反饋意見。

  據我所知,同類活動今年仍然將擇期舉辦,規模和深度可能都會有提升,敬請大家關注,並且可以早做些準備。

  但是,如果放長遠一些眼光來看,Office 365目前採用敏捷開發模式,產品組也更加開放,我相信它本身會越來越完善;與此同時,作爲一個全新的平臺和全新的生態,我們也希望有更多的開發人員加入,並且做出自己的貢獻。

  內容介紹

  言歸正傳,我準備用一個系列文章和配套課程(含代碼示例)的形式進行分享。

  這個系列將包括目前Office 365所支持的開發模式的全面介紹,並且通過案例帶領觀衆進行實踐。目前初步規劃將包括如下幾個內容:

  1. Office 365開發概述及生態環境介紹

  2. Office 365開發環境搭建

  3. Microsoft Graph 簡介

  4. Office 365 Add-in開發(Outlook)

  5. Office 365 Add-in開發(Word)

  6. Office 365 Add-in開發(Excel)

  7. Office 365 Add-in開發(PowerPoint)

  8. Office 365 Add-in開發(OneNote)

  9. Office 365 Add-in開發(SharePoint)

  10. SharePoint Framework開發

  11. Skype for Business開發入門

  12. PowerApps & Flow 實戰入門

  13. PowerApps & Flow 定製開發

  14. Power BI 快速入門

  15. Power BI 定製開發

  16. Teams 應用擴展(Tab,Connector,Bot)

  重要說明

  需要特別聲明一下,我將主要利用業餘的時間來分享這個系列,所以更新的週期可能不是很有規律,但我想爭取在6月底之前完整所有這個系列(包括文章和視頻),如果有合適的朋友願意參與這個系列,我非常歡迎,請私下跟我聯繫討論。

  本系列文章和課程將主要以國際版Office 365 企業版E3 作爲演示和開發環境,採用的開發工具是Visual Studio 2017 Enterprise。(如果有興趣跟隨一起做練習,請預先準備好相關環境,都可以申請試用版)。

  本系列文章將在LinkedIn和博客園、Github三個平臺同步連載,歡迎大家根據自己的喜好進行關注,並且進行交流。

  本課程將在LinkedIn Learning上面進行首發,地址請關注後期通知,並且可能會同步到有關的視頻網站。

  本系列文章和課程所涉及到的案例代碼,將全部在Github上面共享,歡迎大家參與。

  關於Office 365開發,這裏的定義並不是指開發Office 365平臺,或者接口(這兩部分由微軟數以萬計的研發工程師們在負責),而是基於Office 365平臺及其提供的接口,獨立開發商(ISV)或者有一定能力的開發人員、高級用戶針對Office 365的定製、擴展、集成等方面的開發。

  回顧過去Office開發的基本情況

  對於Office開發,我應該算起來是接觸比較早的一批中國用戶之一,所以如果大家願意聽,我很樂意分享一些Office開發的基本情況以供參考。

  從Office 97開始,我使用過後面幾乎所有的Office 版本,但是印象最深刻的有幾個版本

  1.Office XP

  這個版本沒有用年份來編號(實際上應該是Office 2002),原因估計是爲了配合Windows XP的整體市場宣傳定位。

  它的特殊之處在於有一個所謂的開發版(2000也有開發版,但在2002這個版本更加完善),有懷舊情結的同學,請移步這裏進行圍觀https://msdn.microsoft.com/en-us/library/office/aa671596.aspx

  值得一提的是,雖然同樣帶有XP的光環,但Office XP遠沒有Windows XP那麼風光(服役超過13年,甚至直到現在都還有用戶對其念念不捨),因爲它很快就被Office 2003取代了。

  2. Office 2003

  這是一個非常重要的版本,它代表中Office產品技術的一個巔峯時代——這個版本的Office功能非常強大,可以說是無所不包。我敢大膽地推測,正在看這篇文章的讀者中絕大部分的朋友都用過這個版本吧。

  如果說Office XP是我用得比較全的一個版本(除了Outlook沒有怎麼用,其他組件基本都對照幫助文檔摸了一遍,還用FrontPage做出了人生第一個奇醜無比的網站,但其實對那些所謂的開發完全是一知半解,半生不熟),那麼Office 2003是我真正意義上開始較爲深入使用的版本,尤其以Excel和Access這兩個組件,結合當時的實際工作需要,我使用VBA開發了從簡單到複雜的各種小應用。

  學習Excel的VBA,我是完全認真的,一個佐證就是我在那個年月願意花五十美金託人從國外輾轉買來下面這樣一本足有1000多頁的書過來啃,而師從Mr.Spreadsheet——John Walkenbach,也算系出名門了。這本書以及John本人對我影響之大,很難用一兩句講清楚——在那個相對單純的年代,我一頭扎進Excel VBA的世界裏,收穫的可不僅僅是寫代碼帶來的樂趣,還有在微軟技術社區(那會兒叫新聞組)中認識的一大批朋友。

  事到如今,如果說我有什麼遺憾的話,一是還沒有見過John的真人,另外一個就是我雖然有心想把這本書傳承給一位有緣人,但一直沒有找到——它太厚了。

  3.Office 2007

  前面提到Office 2003是一個巔峯之作,那麼Office 2007毫無疑問就是一個轉型精品。表面上看,2007帶來了全新的UI風格——Ribbon,這是一次大膽地嘗試,因爲誰都知道2003的菜單已經非常多了,以至於對於不少新手來說,經常發生找不到功能所在的位置。這種界面的創新帶有一定的冒險(顛覆自己成熟的產品確實需要勇氣),但事實證明是非常成功的。

  除了界面上看到的變化,其實Office 2007的另外一個重要創新,是重新定義Office文檔的格式——除了繼續支持Office 2003及早期版本的二進制文件格式之外,還有一種全新的基於XML的文件格式(通常在默認的文件擴展名後面添加一個x以示區分,如Word 2003的格式是doc,而Word 2007雖然依然支持doc,但更推薦用戶使用docx文件格式)。這個後來被正式命名爲OpenXML的技術,微軟在經過實踐後將其貢獻給ECMA,並被ISO和IEC等組織認定爲開發文檔格式的國際標準。如果對OpenXML的標準感興趣,請參考https://en.wikipedia.org/wiki/Office_Open_XML 。

  在開發的層面,Office 2007也有新的變化。首先,它當然繼續支持VBA,但卻規定所有包含代碼的文件,與不包含代碼的文件,從文件格式上就明確有所區分。

  例如,Excel 2007的標準文件格式爲xlsx,而包含VBA代碼的文件則必須重命名爲xlsm(這裏的m是指macro的意思,我後續會介紹這個概念)。其次,它開始支持使用Visual Studio 2005以及.NET Framework對其進行開發定製,這就引出了一個全新的開發工具VSTO——Visual Studio Tools for Office,這個傳統也一直沿用至今。

  針對.NET開發人員,微軟還專門提供了OpenXML SDK,支持從自定義程序中通過OpenXML的標準操作Office文檔(不要求本地安裝有Office)。

  4.Office 2013

  Office 2010相較2007來說,我感覺主要是一些界面細節的優化。但Office 2013是一個向雲而生的版本,它有很多重要的創新,例如增強了與雲端服務整合的能力、跨平臺和設備的能力、協同編輯的能力等,還有一條對開發人員來說至關重要——它帶來了一個所謂的App開發模式,而且這個模式是涵蓋到了客戶端和服務器端以及雲端完整的產品線的。首先,這從根本上解決了開發人員部署應用程序的困擾,其次,它將通過Office Store建立一個全新的生態環境。

  毫無疑問,我接下來要談的將是Office 365。

  這樣說,其實並不是說Office 2016不重要,雖然未來還將有Office 20xx這樣按照年份編號的版本(我們稱爲本地版本),但Office 365將代表着微軟對於廣大Office用戶的最終承諾,它已經有並且還將不斷有各種創新,用技術的變革來推動生產力的進步。但在展開Office 365之前,請讓我對此前的兩種開發技術/模式——VBA和VSTO——進行一個歸納,向經典致敬。

  1.VBA

  VBA的全稱是Microsoft Visual Basic for Applications。

  在多個Office客戶端應用程序中都一直保留對這個編程方式的支持。Visual Basic,這個由微軟公司於1991年推出的開發語言,直到現在都仍然保持着強大的活力,除了它本身的易用性之外,我覺得它在Office產品家族中的嵌入式編程支持是非常關鍵的一個原因。由於VBA的巨大成功,甚至一些非微軟產品(例如AutoCAD)中也支持VBA。

  雖然理論上說VBA可以做很多事情,但它主要擅長的是對應用程序內部操作的自動化。例如,我需要根據Excel一個表格的數據,每一行生成一個表單,然後發送到打印機去打印出來。

  你現在能找到的任何一個Office版本,你打開某個應用(例如Excel)後,按下ALT+F11鍵即可進入VBA的編輯器界面。

  絕大部分應用程序的VBA編輯器都支持三類模塊:首先是該應用本身的對象模塊(通常跟該應用程序的行爲——主要體現爲事件——密切相關),然後是Forms(這是Visual Basic這個名稱中Visual的意思,即可視化的編程),然後就是類模塊。

  由於之前提到VBA主要是對Office的自動化,所以相當一部分VBA程序代碼都集中在應用本身的對象模塊中,而某些標準化較高的通用組件(例如我的偶像John的不朽傑作——Power Pack),則有大量代碼在類模塊或者Forms中。

  我是工作之後才真正學習計算機編程的,所以實際上可以說,是VB/VBA帶我進入了面向對象編程的大門。多少個抽着劣質香菸熬着的夜晚,我都是在跟下面這樣的錯誤提示消息作戰,直到多年以後的技術有了一定的提高,我也終於真正意義上找到了對象。

  學習VBA的首要工作就是要比較清楚地瞭解應用程序的對象模型,嚴格來說,這個並不難,微軟提供了相當豐富詳細的幫助文檔(例如Excel的不完全對象模型如下),但是熟才能生巧,只有大量的實踐纔可能真正地得心應手。

  但是,一個好消息是,在Office應用程序中,都提供了錄製宏的功能,也就是說,你可以先按照想法進行操作,然後錄製工具會把相應的代碼記錄下來,通常這些代碼直接就可以運行,但是理想情況下應該是略加修改才真正有實用價值。毫不避諱地說,這是我早年學習VBA的一個重要法寶。編程工具能做到這個層面,不光是業界良心,而且從技術上面說也是相當先進的。

  宏——macro——是VBA中的一個重要概念,通常可以簡單理解爲一組代碼。

  VBA代碼的部署一般分爲兩種,它可以作爲Office文檔的一部分存在(例如只是某個文件的特定功能的話),也可以單獨存在(假定是一個通用的功能,尤其是希望在應用程序啓動的時候就自動加載的話)。前者不消多說,現在一般就是通過帶有m後綴的文件名保存即可(例如xlsm, docm等),後者有一個更加專用的格式(例如xlam)和叫法(加載宏)。

  2.VSTO

  VSTO的全稱是Visual Studio Tools for Office,最早的版本出現在Visual Studio .NET 2003裏面,但真正引起開發人員興趣是在Visual Studio 2005,對應的Office版本是2007。

  爲什麼會推出VSTO這套工具呢?我個人覺得一方面是因爲Visual Studio 及.NET自身發展的需要,另一方面是Office及開發人員的需要。VBA很好,但它的侷限性也比較明顯——它主要適合做應用程序內部的自動化,很難便捷地跟外界系統或網絡資源打交道,同時對於新版本Office的一些特殊功能(例如Ribbon或者Task Pane等)也缺乏支持。

  最新版本的Visual Studio 2017中,採用了模塊化的安裝體驗,如果選擇了Office 開發這個模塊,那麼就可以在項目模板中看到一大堆VSTO的模板(針對不同的應用程序,還會有不同的模板),如下圖所示:

  我選擇了Excel Add-in這個模板,點擊“Ok”後,會自動生成如下的代碼:

  這裏就是我們熟悉的.NET編程的體驗,可以用到幾乎所有.NET Framework的功能,目前VSTO支持的開發語言除了VB.NET,還有C#。

  需要注意的是,VSTO相比VBA來說,在部署方面會更加複雜。首先,它要求目標運行的環境,不光是Office版本要一致(通常高版本可以向下兼容),而且必須有對應的.NET運行環境。

  這種版本和運行環境的依賴性在某種程度上對VSTO的應用起到了一定的制約,尤其在雲優先以及移動爲先的時代,它與VBA在這方面的侷限性進一步放大,考慮到需要進一步簡化部署,更重要的是希望在不同的平臺以及移動設備上面都能得到一致性的體驗,從Office 2013開始,及至現在的Office 365家族,以Web技術爲基礎、以App爲模型,微軟爲廣大的開發人員提供了全新的開發支持,打開了一個新的視野。此爲後話,且按住不表。

  必須提出的是,微軟對於VBA和VSTO的支持將繼續保留,它們有自己的優勢,尤其是對於Office 應用程序自有功能的自動化、快速開發、在本地使用的場景。如果大家有興趣對VBA或者VSTO進行學習和交流,我推薦大家關注ExcelHome(http://www.excelhome.net),相信我,這是一個神奇的網站——“Excel教程下載和軟件下載中心,Microsoft技術社區聯盟成員,全球領先的Excel門戶,Office技術培訓的最佳社區”。

  本文將同時在 微軟中國Office 365官方微信號連載,歡迎關注“mschinaoffice365",每週都會收到各種新功能介紹和實用技巧。

  本文未完待續,請感興趣的朋友們繼續關注如下兩個話題

  談談現在的Office 365開發能力

  展望Office 365的生態環境和未來發展

  大連人流醫院××× http://www.dlwtrlyy.com/

  大連領先婦科醫師在線諮詢 http://www.62671288.com/

  大連割包皮醫院_ http://www.39836828.com/


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章