据不彻底统计,全世界使用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则将这一点表现的淋漓尽致,并且毫无疑问,我这里演示的只是一些皮毛,更多有意思的场景,还等待着你的发现呢。