Excel VBA调用百度翻译API

有同事找我处理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)