Excel 中利用 WebService 函数实现多语言翻译的实战指南

概述

Excel 的 WebService 函数可以将网络上的 XML 或 JSON 数据直接导入工作表。结合免费的翻译 API(如百度翻译或 Google Apps Script),我们可以轻松实现单元格内容的批量翻译。本文将手把手教你构建翻译公式,无需编写复杂代码。

准备工作

  1. 申请 API 密钥:以百度翻译为例,前往 百度翻译开放平台 注册并申请通用翻译 API 的 APP ID 和密钥。
  2. 了解 API 请求格式:百度翻译 GET 请求示例:https://api.fanyi.baidu.com/api/trans/vip/translate?q=要翻译的文字&from=auto&to=zh&appid=你的APPID&salt=随机数&sign=签名
  3. 签名生成:用 VBA 或纯函数计算 MD5 签名,但 Excel 函数无法直接生成 MD5。推荐使用 VBA 自定义函数或直接使用无需签名的 API(如 Google Apps Script 部署的翻译接口)。

方法一:使用无需签名的 Google Apps Script 翻译

Google Apps Script 可部署为 Web 应用,返回 JSON 格式翻译结果。步骤如下:

  • 创建 Google 脚本:LanguageApp.translate(text, 'en', 'zh') 并返回 JSON。
  • 部署为 Web 应用,获取 URL。
  • Excel 公式:=WebService("https://your-script-url?text="&ENCODEURL(A1))
  • 注意:Google 脚本免费版有配额限制。

方法二:利用 VBA 调用百度翻译 API

由于签名需要 MD5,VBA 可调用外部的 MD5 函数。以下为 VBA 自定义函数示例:

Function BaiduTranslate(txt As String, fromLang As String, toLang As String) As String
    Dim appid As String, key As String, salt As String, sign As String
    appid = "your_appid"
    key = "your_secret_key"
    salt = Format(Now, "yyyymmddhhmmss")
    sign = MD5(appid & txt & salt & key)
    Dim url As String
    url = "https://api.fanyi.baidu.com/api/trans/vip/translate?q=" & txt & "&from=" & fromLang & "&to=" & toLang & "&appid=" & appid & "&salt=" & salt & "&sign=" & sign
    ' 创建 HTTP 请求并解析 JSON 响应
    Dim http As Object, response As String
    Set http = CreateObject("MSXML2.XMLHTTP")
    http.Open "GET", url, False
    http.Send
    response = http.responseText
    ' 解析 JSON(需引用 ScriptControl)
    Dim json As Object, result As String
    Set json = CreateObject("ScriptControl")
    json.Language = "JScript"
    json.Eval "var obj = " & response
    result = json.Eval("obj.trans_result[0].dst")
    BaiduTranslate = result
End Function

方法三:纯函数公式实现(有局限)

利用 WEBSERVICEFILTERXML 处理 XML 响应,但大部分翻译 API 返回 JSON,Excel 原生无法解析 JSON。若使用返回 XML 的 API(如 Microsoft 翻译文本 API 的旧版),公式如下:

=WEBSERVICE("https://api.microsofttranslator.com/v2/http.svc/Translate?appId=Bearer "&token&"&text="&ENCODEURL(A1)&"&from=en&to=zh")

但获取 token 需要额外步骤。

常见问题

  • #VALUE! 错误:通常因为请求 URL 无效或网络问题。检查 API 限额、URL 编码(使用 ENCODEURL 函数)。
  • JSON 解析困难:建议使用 VBA 或 Power Query 处理 JSON。
  • 速度慢:频繁调用 API 可能导致限速,可考虑批量处理后再查询。

总结

通过 Excel 的 WebService 函数结合翻译 API,可以高效实现工作表中的翻译需求。对于简单场景,使用 Google Apps Script 部署的接口最方便;对于正式环境,推荐使用 VBA 自定义函数调用百度翻译等稳定 API。