據不徹底統計,全世界使用Excel做爲電子表格和數據處理的用戶數以十億計,這不只得益於它的使用簡便,同時還由於它內置了不少強大的函數,結合你的想象力能夠編寫出各類公式,並可快速根據數據生成圖表和透視分析等。另外一方面,Excel在整個Office家族中也是擁有開發者最多的一個組件,不論是在客戶端的VBA宏和VSTO插件開發,以及在早些年出如今SharePoint Server中的Excel Service(包括用來呈現Excel文件的Web Part,以及一套XML Web Service可供遠程調用Excel的功能,包括自定義Excel函數等。html
在Office 365的時代,SharePoint Online中已經將Excel Service的功能刪除掉了,取而代之的是2016年7月份左右揭開神祕面紗的Microsoft Graph Excel API,融入Microsoft Graph你們族的Excel Service快速迭代,目前它的功能也趨向穩定了。今天我將用一個實例來介紹一下它的奇妙設計和應用場景。前端
設想一下,你用Excel作了一份很是強大的「抵押貸款測算表」,這裏面能夠經過輸入幾個參數,使用Excel自帶的PMT函數計算每個月還款額,據此快速生成一個還款計劃,以下圖所示:git
PMT 是一個財務函數,用於根據固定付款額和固定利率計算貸款的付款額。有興趣能夠參考 https://support.office.com/zh-cn/article/PMT-%E5%87%BD%E6%95%B0-0214DA64-9A63-4996-BC20-214433FA6441 的幫助。github
與此同時,你還能夠很輕鬆地生成一個數據列表,和對應的圖表,以下圖所示api
經過改變「購買價格」、「利率」、「貸款期」、「貸款金額」等單元格的數值,Excel會自動計算其餘單元格的數值,包括自動刷新圖表。這一切對廣大的「表哥表姐」來講都是很是熟悉的體驗。瀏覽器
那麼問題來了:若是你的一個網頁中也要實現「抵押貸款測算」的功能,你是否是應該本身去實現一次PMT這種函數的功能呢?我不知道,但我以爲你讀了本文後會改變一些想法—— 咱們徹底能夠將這些計算交給Excel Service去作,前端應用直接調用便可。session
使用Microsoft Graph中的Excel API,你不只能夠訪問工做簿,工做表和單元格、表格和圖表等,修改他們的屬性和數值,甚至還能夠將圖表用圖片的形式讀取過來,一切都在你的掌握之中。接下去用一個範例代碼演示這些奇妙的場景。編輯器
Microsoft Graph Excel API的官方文檔,請參考 https://developer.microsoft.com/en-us/graph/docs/api-reference/v1.0/resources/excel函數
要使用Micrsosoft Graph Excel API,你只須要將Excel文件放到OneDrive for Business或者SharePoint Online的文檔庫中便可。例如,我將演示用的文件放在了一個目錄中:插件
你須要瞭解一些Microsoft Graph的背景知識,若是你對Microsoft Graph比較陌生,建議你參考我以前的兩篇文章
本文所採用的方式就是用Graph Explorer這種方式來操做Microsoft Graph Excel API。個人這個文件是在OneDrive for Business 的我的雲盤的根目錄下面的testgraph目錄中,文件名爲 demofile.xlsx,因此我可使用GET https://graph.microsoft.com/v1.0/me/drive/root:/testgraph/demofile.xlsx:/workbook
獲取到這個工做簿
經過 GET https://graph.microsoft.com/v1.0/me/drive/root:/testgraph/demofile.xlsx:/workbook/worksheets
能夠獲取工做簿中全部的工做表信息
經過 GET https://graph.microsoft.com/v1.0/me/drive/root:/testgraph/demofile.xlsx:/workbook/worksheets/抵押計算器/range(address='c4')
能夠獲取名稱爲「抵押計算器「的工做表中的C4單元格對象
固然,也能夠經過名稱訪問單元格對象,語法是 GET https://graph.microsoft.com/v1.0/me/drive/root:/testgraph/demofile.xlsx:/workbook/names/每個月還貸數額
這樣的
你還能夠返回多個單元格的數值,例以下面這樣的查詢 GET https://graph.microsoft.com/v1.0/me/drive/root:/testgraph/demofile.xlsx:/workbook/worksheets/抵押計算器/range(address='c4:c6')/values
上一節我用幾種不一樣的語法展現瞭如何獲取工做簿、工做表和單元格(包括直接查詢它的數值),那麼若是咱們但願能修改某個單元格的數值,應該怎麼作呢?下面的例子演示瞭如何將名稱爲「抵押計算器「的工做表中的C4的數值修改成一個新的值,例如400000.
須要注意的是,查詢數據咱們通常用的API請求方法是GET,而修改數據則須要用到的請求方法是PATCH。爲了實現上面所提到的單元格修改需求,咱們要執行的查詢是 PATCH https://graph.microsoft.com/v1.0/me/drive/root:/testgraph/demofile.xlsx:/workbook/worksheets/抵押計算器/range(address='c4')
,與此同時,還須要提供新的數值。
{
values:[[400000]]
}
PATCH方法能夠對目標對象執行局部更新。上面的代碼咱們只提供了Values這個屬性集合,但其實還能夠增長其餘的屬性,來達到一次修改多個屬性的目的。
執行成功後,你能夠發現C4的數值已經變成了400000。
這裏我埋了一個伏筆,若是你在程序中用如上的方式修改了某個單元格(A)的數值,而後去獲取另一個單元格(B)的值,假設B跟A是有公式的關係,你可能指望的是B的值也會當即刷新。但事實上,它不會。這裏涉及到一些相對複雜的概念,就是Excel API有兩種訪問的模式,咱們如今用的這種,是所謂的「非持久化會話模式」,通常用來查詢數據,或者修改後不保存,因此在下一次查詢的時候,其實你獲取的仍是舊值。 關於如何建立持久會話,而且在多個查詢中共用它,請參考 https://developer.microsoft.com/en-us/graph/docs/api-reference/v1.0/api/workbook_createsession 的詳細說明。
咱們已經知道了如何訪問工做簿的單元格,以及如何更新它們的數值,這已經可讓咱們輕鬆實現不少業務場景了:你能夠在Excel中作好不少複雜的公式,設計數據之間的關係,而後經過API修改某些單元格的值,而後去獲取其餘單元格的值,看起來你的應用具備了相似Excel那樣神奇的功能,但其實全部的事情都仍是Excel在默默地爲你服務,你所作的只是調用一兩次接口而已。
接下來還要演示一個有意思的場景是將工做表中的圖表用圖片的形式提取出來,這個場景特別適合於咱們已經通過了數據的處理,而後但願將圖表展示在前端的應用中。Excel API能夠將一個圖表以一個Base64字符串的形式返回,客戶端能夠利用這個進行圖片展示。
聽起來很玄的事情,其實也只是一個GET請求而已 GET https://graph.microsoft.com/v1.0/me/drive/root:/testgraph/demofile.xlsx:/workbook/worksheets/分期還款表格/charts/圖表 1/image
接口返回的結果是一串很長很長的字符串,你確定是看不懂的。你要作的是將這個字符串複製出來,而後隨便用一個文本編輯器,新建一個文件,而後填入以下的內容
<img src="data:image/png;base64,這裏填寫你查詢獲得的字符串"></img>;
接下來將這個保存爲一個html文件,而後在瀏覽器中打開它。你是否是以爲下面這個圖表似曾相識呢,恭喜你答對了,其實這個圖表就是以前Excel文件中的那一個呀。
我在不少場合都分享過Office 365 平臺化的能力和開發場景,Microsoft Graph在其中起到了關鍵做用,而今天給你們展現的Excel API則將這一點表現的淋漓盡致,並且毫無疑問,我這裏演示的只是一些皮毛,更多有意思的場景,還等待着你的發現呢。