Excel上使用VBA的WebBrowser控件实现单点登录(SSO)

需求

Excel 上可以做出很多漂亮的报表, 产品经理希望能够在Excel上弹出登录页面,实现单点登录,
登录完成后,从服务器端取回模板列表,选择其中一个模板,插入到Excel中。

设计

  1. 登录界面可用前端技术实现,比如Angular与VUE
  2. VBA中自带的WebBrowser控件可以作为加载Web登录页面的“壳”。
  3. VBA不断尝试获取页面上的cookie,直到取到cookie,并且cookie中包含token。
  4. 使用URLDecode解码cookie,获取token。
  5. 使用该token发出rest api请求获取模板列表。

部分实现

从WebBrowser获取cookie

Public Function GetCookieFromBrowser(serverIP As String)
    Dim url As String
    Dim encodedCookie As String
    
    encodedCookie = ""
    url = "https://" + serverIP + "/test/login/" + "?refresh=" + Guid()

    FLoginWeb.FWebBrowser.Silent = True
    FLoginWeb.FWebBrowser.Navigate url
    FLoginWeb.Show vbModeless
    
    Do Until InStr(FLoginWeb.FWebBrowser.Document.cookie, "token") > 0: DoEvents: Loop
    
    If FLoginWeb.FWebBrowser.Document.cookie <> "" Then
        encodedCookie = FLoginWeb.FWebBrowser.Document.cookie
        FLoginWeb.Hide        
    End If
    GetEncodedCookieFromWebBrowser = encodedCookie
End Function

注意

  1. 由于VBA的WebBrowser是IE内核,而微软官方已经宣布放弃支持IE,因此随着Angular、VUE等版本的升级,可能会出现WebBrowser无法正常加载网页的情况,需要多做测试。
  2. WebBrowser默认使用的版本是IE7的兼容模式,为了得到更好的体验,可以修改注册表改为支持IE11,方法如下:
Public Sub SetWebBrowserIE11()
    Dim fso
    Dim RegKey_User_IE As String
    Dim oWshell
    Dim excelKey As String
    
    On Error Resume Next
    Set fso = CreateObject("Scripting.FileSystemObject")
    RegKey_User_IE = "HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION\excel.exe"
    Set oWshell = CreateObject("WScript.Shell")
    excelKey = oWshell.RegRead(RegKey_User_IE)
    If excelKey = "" Then
        oWshell.RegWrite RegKey_User_IE, "11000", "REG_DWORD"
    End If
    Set oWshell = Nothing
End Sub
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值