下面这一篇,是Excel使用中技术含量极高,能解决很多工作中痛点的技术文章。
首先,我们来试想一下,你每天下班,总有一大堆各种报表、汇报要逐一地用微信发给各位领导,于是乎,你就得逐一去编辑、发送。这个其实已经不算麻烦的了,你仅只是发送小部分,并且不太复杂。但如果你面对的是广大的客户、供应商、员工,那么这个体量就太大了,要逐一去发送,那还不疯了。
如果可以,使用Excel将数据批量推送至每个人微信上,那么这个操作是不是可以解决很多问题呢。
当然,这是有前提的,你首先得注册有企业微信号,相关人员都已经加入了注册的企业微信。否则,你根本没有可能使用第三方直接给微信推送消息。因为,隐私政策,个人微信是不直接向第三方开放的。至于如何注册企业微信,就不在本文中阐述了。
话不多说,直接上代码:
- 定义全局变量
Public Const CorpID As String = “你的企业ID”
Public Const SecretStr As String = “你的应用程序secret” 'Agentid=0 范围全局
‘定义传输部分的内容模板,格式为json
Public Const SendText As String = "{""touser"": ""成员ID"",""toparty"": ""部门ID"",""totag"": ""标签ID"",""msgtype"": ""消息类型"",""agentid"": 企业应用id,""text"": {""content"": ""消息内容""},""safe"":0}"
Public Const ErrCode As String = """errcode"":0,""errmsg"":""ok"""
Public Const SendUrl As String = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token="
2. 定义获取token的函数
Function get_token(Secret As String) As String
Dim http
Set http = CreateObject("MSXML2.ServerXMLHTTP")
Url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=" & CorpID & "&corpsecret=" & Secret
http.Open "POST", Url, False
http.send ""
If http.Status = 200 Then
Token = http.responseText
End If
'解析token字符串
If InStr(Token, "access_token") > 1 Then
Token = Split(Token, ",")(2)
Token = Split(Token, ":")(1)
Token = Replace(Token, """", "")
Else
Token = ""
End If
End Function
3. 定义发送信息处理以及发送过程控制的函数
Function SendMSG(uid As String, Msg As String) As String
'uid 也可以多人发送中间用竖线“|”隔开
Dim http
On Error Resume Next
Set http = CreateObject("MSXML2.ServerXMLHTTP")
'调用自定义函数获取token令牌
Url = SendUrl & get_token(SecretStr)
Str1 = SendText
'替换模板参数值
Str1 = Replace(Str1, "成员ID", uid)
Str1 = Replace(Str1, "消息内容", Msg)
Str1 = Replace(Str1, "企业应用id", "1000007")
Str1 = Replace(Str1, "消息类型", "text")
'备用
Str1 = Replace(Str1, "部门ID", "")
Str1 = Replace(Str1, "标签ID", "")
Msg = Str1
'使用HTTP方法发送消息
http.Open "POST", Url, False
http.send Msg
If http.Status = 200 Then
Str1 = http.responseText
End If
'提取无效人员,发送失败时,提取失败信息
If InStr(Str1, "errcode"":0") > 0 Then
SendMS = "成功"
Str1 = Split(Str1, "invaliduser")(1)
Str1 = Split(Str1, """")(2)
Else
SendMSG = Str1
End If
End Function
4. 子程序代码,供工作簿按钮使用
Sub cmd_send()
Dim uid As String
Dim uname As String
Dim amount As Double
Dim i As Integer
Dim msg_text As String
i = ActiveCell.Row
uid = Cells(i, 1)
uname = Cells(i, 2)
sup_amount = Application.WorksheetFunction.Text(Cells(i, 3), "#,##0.00")
paid_amount = Application.WorksheetFunction.Text(Cells(i, 4), "#,##0.00")
unpaid_amount = Application.WorksheetFunction.Text(Cells(i, 5), "#,##0.00")
‘信息推送模板定义
msg_text = "尊敬的供应商:n" _
& Space(4) & uname & "n" _
& "n" _
& " 截至本日,您的结算情况如下:n" _
& " 1.供货金额为:n" _
& Space(4) & sup_amount & "n" _
& " 2.累计已支付金额为:n" _
& Space(4) & paid_amount & "n" _
& " 3.尚未支付金额为:n" _
& Space(4) & unpaid_amount & "n" _
& "n" _
& " 如有任何疑问,请致电至我公司财务。"
MsgBox SendMSG(uid, msg_text)
End Sub
在工作表上面放置一个窗体按钮,再给这个按钮指定宏,这里宏选择子函数sendMSG
点击发送成功后,可以看到微信已经收到该条信息了。
掌握了这个办法后,那么就可以做很多事了,移动办公、协同办公、办公自动化都可以实现。当然了,对于企业微信的操作不仅仅就推送消息这么简单,还有很多可以做,毕竟是交互嘛,比如,获取微信人员信息、获取组织机构信息、连接外部客户、供应商、连接第三方开放平台等等。这里就不一一赘述了,如果感兴趣,可以自己研究企业微信的开发文档,里面有详细的API开发说明。