有同事找我处理Excel中译英,本来Excel有自带的翻译工具,无奈公司限制太多,这些东西都用不了。想了一下,试试调用百度翻译API来做一个翻译。
由于限制太多,确定使用Excel VBA + VBS的模式去处理这个问题。
根据文档要求先去获取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,正则表达式写错了不出结果。之后有时间在修整把代码备注和文档还有图补上。
网友评论