相信Office办公软件每个人都会用到,其中可能Excel有部分朋友用得比较多,那么小弟用Excel VBA写了个调用E5 API的东东,供各位大佬试试,在微软自己的开发环境下调用API,是否能为E5续订助力呢?
注意,不保证一定能续订
注意,不保证一定能续订
注意,不保证一定能续订
好了,废话不多说,先上效果图【第1版】:
首先,感谢这个博客主的教程:https://blog.432100.xyz/index.php/archives/50/
大家请按这个博客教程创建自己的应用程序,然后开启如下权限:
Files.Read.All Files.ReadWrite.All Sites.Read.All Sites.ReadWrite.All
User.Read.All User.ReadWrite.All Directory.Read.Al Directory.ReadWrite.All
Mail.Read Mail.ReadWrite MailboxSettings.Read MailboxSettings.ReadWrite
然后按博客教程里的操作,用 rclone 获取 access_token ,注意,是:access_token,不是:refresh_token,可以看下图(红箭头位置):
然后新建一个 Excel 工作表,打开工作表,什么都不用填先,先另存为 .xlsm 格式的文件,名字随便,因为只有 .xlsm 格式的 Excel 文件才能保存 Excel VBA 代码,打开你另存的 .xlsm 文件,里面只会有一个 Sheet1 工作表,把上一步得到得 access_token 复制到 A1 单元格中,注意一定是复制到 A1 单元格中,然后按 Alt+F11 组合键,进入 Excel VBA 编辑器窗口,然后点:插入–>模块,在左边工程资源管理器窗口里就会新建一格”模块1“,
然后将下面所有代码复制到”模块1“中:
Private Flag As Long Private Count As Long Public Sub MainProgram() Dim accessToken As String accessToken = Worksheets("sheet1").Range("A1").Value Dim url(1 To 10) As String url(1) = "https://graph.microsoft.com/v1.0/me/drive/root" url(2) = "https://graph.microsoft.com/v1.0/me/drive" url(3) = "https://graph.microsoft.com/v1.0/users" url(4) = "https://graph.microsoft.com/v1.0/me/messages" url(5) = "https://graph.microsoft.com/v1.0/me/mailFolders/inbox/messageRules" url(6) = "https://graph.microsoft.com/v1.0/me/drive/root/children" url(7) = "https://graph.microsoft.com/v1.0/me/mailboxSettings" url(8) = "https://graph.microsoft.com/v1.0/me/mailFolders" url(9) = "https://graph.microsoft.com/v1.0/me/outlook/masterCategories" url(10) = "https://graph.microsoft.com/v1.0/sites/root/drives" Dim http As Object Set http = CreateObject("MSXML2.XMLHTTP") Dim i As Long For i = 1 To 10 Step 1 On Error GoTo a http.Open "GET", url(i), False http.setRequestHeader "Content-Type", "application/json" http.setRequestHeader "Authorization", accessToken http.Send Do While http.ReadyState <> 4 DoEvents Loop If http.Status = 200 Then Worksheets("sheet1").Range("A11").Select Selection.EntireRow.Insert , CopyOrigin:=xlFormatFromLeftOrAbove ActiveCell.FormulaR1C1 = "成功调用第【" & i & "】个API,第【" & Count & "】次," & "调用时间:" & Now() Worksheets("sheet1").Range("A10").Select Else a: Worksheets("sheet1").Range("A11").Select Selection.EntireRow.Insert , CopyOrigin:=xlFormatFromLeftOrAbove ActiveCell.FormulaR1C1 = "第【" & i & "】个API调用失败!" & "出错时间:" & Now() Worksheets("sheet1").Range("A10").Select End If Next Count = Count + 1 Call ExecProgram End Sub Public Sub ExecProgram() If Flag = 1 Then Application.OnTime Now() + TimeValue("00:00:10"), "MainProgram" '这里修改API调用时间间隔,默认为每隔10秒调用一次,格式为:时:分:秒 Else Exit Sub End If End Sub Public Sub Run() Flag = 1 Count = 1 Call ExecProgram MsgBox "开始调用API!" End Sub Public Sub Shutdown() Flag = 0 MsgBox "关闭调用程序!" End Sub
然后切换回到 Sheet1 工作表界面,选择:开发工具–>插入 ,选择”表单控件“中第1格”按钮控件“,如图
按照这个步骤建2个”按钮控件“,然后右键点第1个”按钮控件“,选择”指定宏“,然后在弹出得对话框中选择” run “这个宏,然后点确定,然后再次右键点这个“按钮控件”,选择“编辑文字”,为这个控件命名为“启动”,重复这一步骤,设置第2个”按钮控件“,选择” Shutdown “这个宏,然后点确定,最后也是右键点击,可以更改控件名称为“关闭”,然后你单击“启动”按钮,就开始调用E5 API了。我默认设置为10秒间隔,你可以自己修改时间间隔。
另外要说明一下:
1、好处是无需VPS,可随时打开运行
2、不足之处在于需要重新验证 access_token
2.1、关机重启后,需要重新用 rclone 获取 access_token 更换 A1 单元格之前得 access_token 才能再次正常运行
2.2、程序隔得太久不运行后,需要重新用 rclone 获取 access_token 更换 A1 单元格之前得 access_token 才能再次正常运行
其实已经写好了第2个版本,第2个版本是支持设置指定时间区间内随机调用API,但是办法比较笨拙,所有就先没有放出来给大家,有没有哪位大佬能做下随机调用的修改,麻烦弄弄,造福各位mjj,谢谢
最后,祝大家在piao E5的道路上越走越远~~
原文地址:https://www.hostloc.com/thread-674020-1-2.html