求适用于Excel 2019 Professional Plus的谷歌翻译VBA宏(无需API)
无需Google Translate API的Excel 2019 Professional Plus VBA谷歌翻译方案
方案一:基于XMLHTTP请求网页接口(轻量型)
该方案通过调用谷歌翻译的网页接口获取结果,无需额外控件,适合快速批量翻译。
启用必要引用
- 打开VBA编辑器(Alt+F11),点击「工具」→「引用」,勾选
Microsoft XML, v6.0,确定保存。
- 打开VBA编辑器(Alt+F11),点击「工具」→「引用」,勾选
复制以下宏代码
Function GoogleTranslate(ByVal inputText As String, Optional fromLang As String = "auto", Optional toLang As String = "zh-CN") As String Dim xmlHttp As MSXML2.XMLHTTP60 Dim htmlDoc As MSHTML.HTMLDocument Dim translateResult As Object Set xmlHttp = New MSXML2.XMLHTTP60 Set htmlDoc = New MSHTML.HTMLDocument ' 构造请求URL和参数 Dim url As String url = "https://translate.google.com/m?sl=" & fromLang & "&tl=" & toLang & "&q=" & URLEncode(inputText) With xmlHttp .Open "GET", url, False .setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36" .send End With If xmlHttp.Status = 200 Then htmlDoc.body.innerHTML = xmlHttp.responseText ' 提取翻译结果(谷歌页面结构可能更新,需根据实际调整选择器) Set translateResult = htmlDoc.querySelector("div[class*='result-container']") If Not translateResult Is Nothing Then GoogleTranslate = translateResult.innerText Else GoogleTranslate = "翻译失败:未找到结果" End If Else GoogleTranslate = "请求失败:状态码" & xmlHttp.Status End If Set xmlHttp = Nothing Set htmlDoc = Nothing Set translateResult = Nothing End Function ' 辅助函数:URL编码 Function URLEncode(ByVal str As String) As String Dim bytes() As Byte bytes = StrConv(str, vbUnicode) Dim i As Integer Dim charCode As Integer For i = 0 To UBound(bytes) Step 2 charCode = bytes(i) Select Case charCode Case 48 To 57, 65 To 90, 97 To 122, 45, 46, 95, 126 URLEncode = URLEncode & Chr(charCode) Case 32 URLEncode = URLEncode & "+" Case Else URLEncode = URLEncode & "%" & Hex(charCode) End Select Next i End Function
- 使用方法
- 在Excel单元格中输入
=GoogleTranslate(A1,"en","zh-CN"),即可将A1单元格的英文翻译成中文,参数可按需调整(fromLang为源语言代码,toLang为目标语言代码,如"en"、"ja"等)。
- 在Excel单元格中输入
方案二:基于WebBrowser控件(稳定型)
如果方案一因谷歌反爬机制失效,可使用该方案模拟浏览器操作,兼容性更强。
插入WebBrowser控件
- 打开Excel开发工具选项卡,点击「插入」→「其他控件」,找到
Microsoft Web Browser,在工作表中绘制一个控件(可调整大小或隐藏)。
- 打开Excel开发工具选项卡,点击「插入」→「其他控件」,找到
复制以下宏代码
Sub BatchTranslate() Dim ws As Worksheet Dim rng As Range Dim targetCell As Range Dim webCtrl As WebBrowser Dim htmlDoc As MSHTML.HTMLDocument Dim translateResult As Object Set ws = ActiveSheet Set rng = Application.InputBox("请选择需要翻译的单元格区域", Type:=8) Set webCtrl = ws.WebBrowser1 ' 初始化浏览器 webCtrl.Navigate "https://translate.google.com" Do While webCtrl.Busy Or webCtrl.ReadyState <> READYSTATE_COMPLETE DoEvents Loop For Each targetCell In rng If targetCell.Value <> "" Then ' 输入要翻译的文本 webCtrl.Document.getElementById("source").Value = targetCell.Value ' 等待翻译完成 Application.Wait Now + TimeValue("00:00:02") ' 提取翻译结果 Set htmlDoc = webCtrl.Document Set translateResult = htmlDoc.querySelector("span[class*='tlid-translation']") If Not translateResult Is Nothing Then targetCell.Offset(0, 1).Value = translateResult.innerText Else targetCell.Offset(0, 1).Value = "翻译失败" End If End If Next targetCell Set webCtrl = Nothing Set htmlDoc = Nothing Set translateResult = Nothing End Sub
- 使用方法
- 运行宏
BatchTranslate,按提示选择需要翻译的单元格区域,翻译结果会自动填充到选中单元格右侧的列。
- 运行宏
注意事项
- 谷歌翻译的页面结构可能随时更新,若代码失效,需调整
querySelector中的选择器(可通过浏览器开发者工具查看元素类名)。 - 需调整Excel宏安全设置:文件→选项→信任中心→信任中心设置→宏设置,选择「启用所有宏」(仅在信任的文件中使用)。
- 批量翻译时建议添加适当延迟,避免触发谷歌的反爬限制。
内容的提问来源于stack exchange,提问作者Steep Besoin
相关产品推荐
相关产品推荐

