GoogleSpreadsheetで多言語対応の翻訳ツールを作ってみる


翻訳ツールが必要だ…

最近仕事で海外のエンジニアとやり取りしてるんだけど、先人達が残していったエクセル資産を有効活用できないのがつらい。Google翻訳で都度翻訳すればいいんだけど毎回やってるとキリがない…
それならドキュメント見るよりソースコードから仕様を読み解くぜって話になるんだけど思わぬ齟齬が起きたりしてやっぱり不便、ということで簡単に翻訳できるツールを自作してみる。

GASで作ってみる

いろいろ調べたがExcelからいきなり翻訳するのはちょっとハードルが高そう…一方でSpreadsheetを使えばGoogletrancelate関数が使えるのでかなりハードルが低そう。Google翻訳のエンジンも使えるし翻訳の品質も(とりあえずは)文句なし。。。
Excel->SSに乗せ換えるのはやや面倒だが、Gdriveに放り込んでSSで開けば勝手に変換してくれるし…都度翻訳する手間に比べれば何でもない!!!
というわけでGoogleAppsScriptで書いてみた。

function SheetTrancelate() {
  var TargetID = 'xxxxx';                                             //翻訳するSSのIDを取得
  var sourceLng = 'ja';                                               //翻訳前の言語コード
  var TranceLng = 'en';                                               //翻訳後の言語コード

  var ssTargetSheet = SpreadsheetApp.openById(TargetID);              //翻訳するSSを取得
  var sheets = ssTargetSheet.getSheets();                             //シート取得

  for(var i = 0; i < sheets.length; i++){                              //全シート分ループする
    var srcSheetName =  sheets[i].getName();                           //シート名取得
    var copiedSheet =sheets[i].copyTo(ssTargetSheet);                  //シートをコピー(翻訳後のシート)
    copiedSheet.setName(srcSheetName + '_' + TranceLng);               //翻訳後のシート名を変更

    for(var row = 1; row <= copiedSheet.getLastRow(); row++) {
      for (var column = 1; column <= copiedSheet.getLastColumn(); column++) {  //すべてのセルに対して翻訳を行う
        var range = copiedSheet.getRange(row, column);                  //セルを取得
        var stCellValue = range.getValue();                             //セルの値を取得
        if (stCellValue != '' && isNaN(stCellValue)){                   //セルが空白の場合と、数値のみの場合は翻訳しない
            range.setValue(LanguageApp.translate(stCellValue, sourceLng,TranceLng)) //翻訳実行
        }
      }
    }
  }
}

めちゃくちゃ簡単だ…

今回、GASを書いたのは初めてだったけどJavascriptの要領で書けたしSheetの操作自体もめちゃくちゃ簡単。困ったらググればサンプルコードがわんさかあるし…
ほかにもGdriveとかDocumentとか、いわゆるGsuiteのアプリはGASで一通り自動化できるっぽいのでまた何か思いついたら自動化したい。。