TOP

LibreOffice Calc の Google 翻訳

LibreOffice Calc プログラムの標準機能には、テキストを他の言語に翻訳する機能は含まれていません。ただし、どのユーザーでもそのような関数を独自に作成できます。

この記事では、ワークシートのセル内のテキストを直接翻訳できるようにするカスタム関数 GoogleTranslate_YouLibreCalc() について説明します。

テキストの翻訳には、この関数は「Google Translator」Web サイトを使用し、任意の数式で単独で使用することも、他の標準関数と組み合わせて使用​​することもできます。



Google 翻訳機能の BASIC コード

Google 翻訳機能を追加するには、メニュー Tools - Macros - Edit Macros... を開き、Module1 を選択して、次のテキストをモジュールにコピーします。

Option VBASupport 1

Function GoogleTranslate_YouLibreCalc(TextToTranslate As String, SrcLang As String, TrgLang As String)
  'moonexcel.com.ua
  Dim FCalc      As Object
  Dim WebsiteURL As String  
  Dim XMLHTTP    As Object
  Dim oHTML      As Object
  Dim HTMLDoc    As HTMLDocument
  Dim ObjClass   As Object
    
  FCalc = CreateUnoService("com.sun.star.sheet.FunctionAccess") 
  TextToTranslate =  FCalc.callFunction("ENCODEURL", Array(TextToTranslate))
  
  SrcLang = LCase(SrcLang)
  TrgLang = LCase(TrgLang)
  
  IF SrcLang = "zh-cn" Then SrcLang = "zh-CN"
  IF SrcLang = "zh-tw" Then SrcLang = "zh-TW"
  
  IF TrgLang = "zh-cn" Then TrgLang = "zh-CN"
  IF TrgLang = "zh-tw" Then TrgLang = "zh-TW" 
    
  WebsiteURL = "https://translate.google.com/m?sl=" + SrcLang + "&tl=" + TrgLang + "&hl=en&q=" + TextToTranslate
    
  'AJAX リクエストを使用して Web サーバーへの API 呼び出しを実行します。
  Set XMLHTTP = CreateObject("MSXML2.ServerXMLHTTP")
 
  XMLHTTP.Open "GET", WebsiteURL, False  
  XMLHTTP.Send
 
  'AJAX リクエストの応答テキストを使用して HTML ドキュメントを作成します
  Set oHTML = CreateObject("HTMLFile")
  With oHTML
        .Open
        .Write XMLHTTP.responseText
        .Close
  End With
  
  'Web 要素のライブラリ Microsoft HTML Object Library を使用して、HTML テキストをオブジェクト モデルに変換します。
  Set HTMLDoc = oHTML  
  
  Set ObjClass = HTMLDoc.getElementsByClassName("result-container").Item(0)
  If Not ObjClass Is Nothing Then
    GoogleTranslate_YouLibreCalc = ObjClass.innerText    
  End If 
 
  'メモリを解放します
  Set ObjClass = Nothing
  Set oHTML    = Nothing
  Set XMLHTTP  = Nothing  
End Function

次に、Macro Editor を閉じて、LibreOffice Calc ワークシートに戻り、任意のセルを選択して、新しい GoogleTranslate_YouLibreCalc() 関数を使用します。