2015-08-23 5 views
0

У меня есть лист Excel с почти 30 000 слов в столбце A, и я хочу создать макрос для поиска каждого слова в Google Translate, получить их значение (или перевод), поместить meaing в столбец B (или если в столбце C, столбце D и т. д. больше значения) Поскольку у меня почти 30.000 слов, очень много времени искать каждое слово. Было бы здорово, если бы я мог сделать это с помощью макроса. Любые предложения? (Google Translate не является обязательным для меня. Если есть другой веб-сайт или какой-либо другой способ сделать это, я открыт для предложений)Excel макрос, чтобы найти слова из Google Translate

Примечание: я столкнулся с this темой, но это не как я надеялся.

+0

Поиск в Google начинается с проверки CAPTHA около 100 поисковых запросов, которые он считает роботизированными. Вы проверили, что Google Translate не делает то же самое? – Jeeped

ответ

0

Поскольку API-интерфейс Google Translate не является бесплатным сервисом, это может быть сложным для выполнения этой операции. Тем не менее, я нашел обходной путь на этой странице Translate text using vba, и я внесла некоторые изменения, чтобы он мог работать в ваших целях. Предполагая, что первоначальные слова вводятся в столбец «A» в таблице и переводы должны появляться в colums справа здесь код:

Sub test() 
Dim s As String 

Dim detailed_translation_results, basic_translation_results 
Dim cell As Range 

For Each cell In Intersect(ActiveSheet.Range("A:A"), ActiveSheet.UsedRange) 
    If cell.Value <> "" Then 
     detailed_translation_results = detailed_translation(cell.Value) 

     'Check whether detailed_translation_results is an array value. If yes, each detailed translation is entered into separate column, if not, basic translation is entered into the next column on the right 
     On Error Resume Next 
      ActiveSheet.Range(cell.Offset(0, 1), cell.Offset(0, UBound(detailed_translation_results) + 1)).Value = detailed_translation_results 

      If Err.Number <> 0 Then 
       cell.Offset(0, 1).Value = detailed_translation_results 
      End If 
     On Error GoTo 0 
    End If 
Next cell 

End Sub 

Function detailed_translation(str) 
' Tools Refrence Select Microsoft internet Control 

Dim IE As Object, i As Long, j As Long 
Dim inputstring As String, outputstring As String, text_to_convert As String, result_data As String, CLEAN_DATA 
Dim FirstTablePosition As Long, FinalTablePosition 

Set IE = CreateObject("InternetExplorer.application") 

' Choose input language - Default "auto" 

inputstring = "auto" 

' Choose input language - Default "en" 

outputstring = "en" 

text_to_convert = str 

'open website 

IE.Visible = False 
IE.navigate "http://translate.google.com/#" & inputstring & "/" & outputstring & "/" & text_to_convert 

Do Until IE.ReadyState = 4 
    DoEvents 
Loop 

Application.Wait (Now + TimeValue("0:00:5")) 

Do Until IE.ReadyState = 4 
    DoEvents 
Loop 

'Firstly, this function tries to extract detailed translation. 

Dim TempTranslation() As String, FinalTranslation() As String 

FirstTablePosition = InStr(IE.Document.getElementById("gt-lc").innerHTML, "<tbody>") 
LastTablePosition = InStr(IE.Document.getElementById("gt-lc").innerHTML, "</tbody>") 

On Error Resume Next 
TempTranslation() = Split(Mid(IE.Document.getElementById("gt-lc").innerHTML, FirstTablePosition, LastTablePosition - FirstTablePosition), "class=""gt-baf-cell gt-baf-word-clickable"">") 

ReDim FinalTranslation(0 To UBound(TempTranslation) - 1) 

For j = LBound(TempTranslation) + 1 To UBound(TempTranslation) 
    FinalTranslation(j - 1) = Left(TempTranslation(j), InStr(TempTranslation(j), "<") - 1) 
Next j 
On Error GoTo 0 

Dim CheckIfDetailed 

'Check whether there is detailed translation available. If not - this function returns a single translation 
On Error Resume Next 
    CheckIfDetailed = FinalTranslation(LBound(FinalTranslation)) 

    If Err.Number <> 0 Then 
     CLEAN_DATA = Split(Application.WorksheetFunction.Substitute(IE.Document.getElementById("result_box").innerHTML, "</SPAN>", ""), "<") 

     For j = LBound(CLEAN_DATA) To UBound(CLEAN_DATA) 

      result_data = result_data & Right(CLEAN_DATA(j), Len(CLEAN_DATA(j)) - InStr(CLEAN_DATA(j), ">")) 
     Next 

     detailed_translation = result_data 
     Exit Function 

    End If 
On Error GoTo 0 

IE.Quit 

detailed_translation = FinalTranslation() 


End Function 

Пожалуйста, обратите внимание, что код экстремально медленно (из-за анти -программы), и я не могу гарантировать, что Google не будет блокировать скрипт. Однако он должен работать.

Единственное, что вы должны сделать, это выбрать языки в местах, отмеченных соответствующим комментарием.

В качестве альтернативы, если вы ищете что-то более быстрое, вы можете манипулировать методом Application.Wait (например, установив значение 0: 00: 2 вместо 0: 00: 5) или google для Microsoft Translate.

+0

Спасибо за предложение. Но вы попробовали это? Я попробовал это с двумя словами в столбце A. Я написал «Домой» в A1 и «Test» до A2 и запустил код, который вы предоставили. Я видел, что он пытался что-то сделать, но ничего не произошло. Я попытаюсь изучить ваше предложение и код, который был в ссылке, которую вы предоставили. – Sargonnas

+0

Да, я пробовал. Пожалуйста, найдите ссылку на YT, где я покажу, как работает этот макрос. (http://youtu.be/E6zvz3o-SW4) – azera

+0

Вау, вы действительно пробовали это :) Хорошо, поэтому у меня должна быть другая проблема. Поскольку я могу запускать другие макросы, мои макросы включены. Но когда я запускаю макрос так же, как и на вашем видео (скопируйте его здесь и вставьте в свой редактор vba и запустите его), он просто ждет какое-то время, и ничего не происходит. Я думаю, что мне нужно сделать что-то еще, чтобы этот макрос работал. Во всяком случае, A для усилителя. Большое спасибо :) – Sargonnas