【问题标题】:Google Translate function for Excel not workingExcel的谷歌翻译功能不起作用
【发布时间】:2020-12-22 20:06:20
【问题描述】:

我有这个功能可以用谷歌翻译翻译所有选定的单元格。

我多年来一直工作良好,但由于某种原因突然停止工作。

知道为什么吗?我正在使用 Excel 2010。

提前致谢

Sub TranslateCell()
        Dim getParam As String, trans As String, translateFrom As String, translateTo As String
        translateFrom = "en"
        translateTo = "fr"
        Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP")
        Dim r As Range, cell As Range
        Set cell = Selection
        For Each cell In Selection.Cells
            getParam = ConvertToGet(cell.Value)
            URL = "https://translate.google.fr/m?hl=" & translateFrom & "&sl=" & translateFrom & "&tl=" & translateTo & "&ie=UTF-8&prev=_m&q=" & getParam
            objHTTP.Open "GET", URL, False
            objHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
            objHTTP.send ("")
            If InStr(objHTTP.responseText, "div dir=""ltr""") > 0 Then
                trans = RegexExecute(objHTTP.responseText, "div[^""]*?""ltr"".*?>(.+?)</div>")
                cell.Value = Clean(trans)
            Else
                MsgBox ("Error")
            End If
        Next cell
    End Sub
'----Used functions----
Function ConvertToGet(val As String)
    val = Replace(val, " ", "+")
    val = Replace(val, vbNewLine, "+")
    val = Replace(val, "(", "%28")
    val = Replace(val, ")", "%29")
    ConvertToGet = val
End Function
Function Clean(val As String)
    val = Replace(val, "&quot;", """")
    val = Replace(val, "%2C", ",")
    val = Replace(val, "&#39;", "'")
    Clean = val
End Function
Public Function RegexExecute(str As String, reg As String, _
                             Optional matchIndex As Long, _
                             Optional subMatchIndex As Long) As String
    On Error GoTo ErrHandl
    Set regex = CreateObject("VBScript.RegExp"): regex.Pattern = reg
    regex.Global = Not (matchIndex = 0 And subMatchIndex = 0) 'For efficiency
    If regex.Test(str) Then
        Set matches = regex.Execute(str)
        RegexExecute = matches(matchIndex).SubMatches(subMatchIndex)
        Exit Function
    End If
ErrHandl:
    RegexExecute = CVErr(xlErrValue)
End Function

【问题讨论】:

  • 请附上ConvertToGet()RegexExecute()Clean()的代码。
  • 另外,会发生什么?你说它不起作用......但是会发生什么?它会产生错误...在哪一行?
  • 你好 Excel 英雄。我刚刚收到 Else 语句调用的错误消息。
  • 当您到达 if 语句时,您是否检查过 objHTTP.responseText 是什么?是否还包括div dir="ltr"?我猜不是,所以这意味着谷歌改变了一些你现在必须弄清楚的东西。

标签: excel vba google-translate


【解决方案1】:

我的猜测是 Google 已经更改了响应 HTML,并且您的代码正在寻找翻译的 DIV 不再是响应格式的一部分。

我跑了,得到了一个有效的响应页面。我更改了您的代码以使用此“新”响应。

试试这个:

Sub TranslateCell()
    Dim objHTTP As Object, URL$
    Dim getParam As String, trans As String, translateFrom As String, translateTo As String
    translateFrom = "en"
    translateTo = "fr"
    Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP")
    Dim r As Range, cell As Range
    Set cell = Selection
    For Each cell In Selection.Cells
        getParam = ConvertToGet(cell.Value)
        URL = "https://translate.google.fr/m?hl=" & translateFrom & "&sl=" & translateFrom & "&tl=" & translateTo & "&ie=UTF-8&prev=_m&q=" & getParam
        objHTTP.Open "GET", URL, False
        objHTTP.SetRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
        objHTTP.Send
        'If InStr(objHTTP.responseText, "div dir=""ltr""") > 0 Then
        If InStr(objHTTP.responseText, "<div class=""result-container"">") Then
            'trans = RegexExecute(objHTTP.responseText, "div[^""]*?""ltr"".*?>(.+?)</div>")
            trans = RegexExecute(objHTTP.responseText, "div[^""]*?""result-container"".*?>(.+?)<\/div>")
            cell.Value = Clean(trans)
        Else
            MsgBox "Error"
        End If
    Next cell
End Sub

【讨论】:

  • 就是这样!现在它又可以正常工作了。非常感谢,真正的 Excel 英雄 :)
  • @Marrone 我发现你的问题很有趣,并决定在此基础上创建一个用户定义的函数。我从 2013 年开始使用 UDF 回答了一个古老的问题。您可能会发现它很有用:stackoverflow.com/a/65417789/3566998
  • 很高兴听到这个消息!我也一定会好好利用它的。再次感谢:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-06
  • 1970-01-01
  • 1970-01-01
  • 2011-10-05
相关资源
最近更新 更多