美文网首页程序员
Excel VBA调用百度翻译API

Excel VBA调用百度翻译API

作者: whitefacez | 来源:发表于2019-10-07 18:21 被阅读0次

    有同事找我处理Excel中译英,本来Excel有自带的翻译工具,无奈公司限制太多,这些东西都用不了。想了一下,试试调用百度翻译API来做一个翻译。

    由于限制太多,确定使用Excel VBA + VBS的模式去处理这个问题。

    百度翻译API

    根据文档要求先去获取API下来的内容

    
    Public Function getHttp(q As String) As String
    
    '调用API(new)
    
    Dim HttpReq As Object
    
    Dim url As String
    
    Dim q_encode As String
    
    Dim sign As String
    
    q_encode = Application.WorksheetFunction.EncodeURL(q)
    
    sign = MD5_32(appid + q + salt + mykey)
    
    Set HttpReq = CreateObject("Microsoft.XMLHTTP") '创建XMLHTTP对象
    
    url = "http://api.fanyi.baidu.com/api/trans/vip/translate?q=" & q_encode & "&from=zh&to=en&appid=" & appid & "&salt=" & salt & "&sign=" & sign
    
    'Debug.Print (url)
    
    With HttpReq
    
            .Open "GET", url, False
    
            .setRequestHeader "content-type", "application/x-www-form-urlencoded"
    
            .SEND
    
            'Debug.Print .responsetext
    
    End With
    
    'getHttp = url
    
    getHttp = HttpReq.responsetext
    
    End Function
    
    

    获取的内容变成文本了,古老的VBA并没有直接处理Json的。有很多种方案,例如用JS去处理JSon,但是因为怕那获取公司最后又不支持,选用了VBS用正则表达式去分析下来的文本内容。

    Public Function DstToTranslate(j As String) As String
    Dim reg As Object
    Set reg = CreateObject("vbscript.regexp")
    Dim str As String
    Dim match As Object
    Dim matches As Object
    Dim k As String
    
    
    str = getHttp(j)
    
        reg.Global = True
        reg.Pattern = """dst""\:""([^""]*)"
        Set matches = reg.Execute(str)
        For Each match In matches
        k = match
        Next
    
    str = k
    reg.Pattern = """dst""\:"""
    k = reg.Replace(str, "")
    
    DstToTranslate = k
    
    End Function
    

    那么在Excel中直接调用

    DstToTranslate(string)
    就可以直接得出结果了。

    中途碰到各种小问题,例如URL的格式不对,忘了算成MD5合成sign,正则表达式写错了不出结果。之后有时间在修整把代码备注和文档还有图补上。

    相关文章

      网友评论

        本文标题:Excel VBA调用百度翻译API

        本文链接:https://www.haomeiwen.com/subject/xibmpctx.html