Googleドキュメントで長文の英語を日本語に翻訳したいときがあります。
しかし英語が不得意だと、以下のような厄介(やっかい)さがあります。
・Googleドキュメントの文章をコピーしてGoogle翻訳に貼り付けると時間がかかる
・翻訳したい文章が多いと、コピペが何回も必要になる
・翻訳を外注すると、時間とお金がかかる
そこで、Googleドキュメントの英文を一発で日本語へ翻訳するGASプログラムについて紹介していきます。
・無料で翻訳
・ボタンを押して待つだけで作業完了
・パラグラフごとに翻訳された日本語を出力
画像や動画を使いながら解説していますので、ご自身のPCで試しながらご覧ください。
目次
- 1 Googleドキュメントの文章を自動翻訳する仕組みの使用手順
- 2 Googleドキュメントの文章を自動翻訳する仕組みの作成手順
- 3 プログラムよりショートカットキー
- 4 GASの自動翻訳プログラムの詳細を解説
- 4.1 プログラム0|プログラム名
- 4.2 プログラム1|スプレッドシートの情報を取得
- 4.3 プログラム2|ポップアップの表示
- 4.4 プログラム3|翻訳したいGoogleドキュメントのURLを取得
- 4.5 プログラム4|翻訳したいGoogleドキュメントのファイルIDを取得
- 4.6 プログラム5|翻訳用Googleドキュメントをコピーして作成
- 4.7 プログラム6|コピーファイルの文章をパラグラフごとに取得
- 4.8 プログラム7|パラグラフごとに処理を実行
- 4.9 プログラム8|翻訳用GoogleドキュメントのURLを取得
- 4.10 プログラム9|翻訳用GoogleドキュメントのURLのリンクをメッセージ表示
- 5 Google Apps Script(GAS)について詳しく理解したいなら
- 6 Googleスプレッドシートを効率的に操作したいなら
Googleドキュメントの文章を自動翻訳する仕組みの使用手順
使用手順2|スプレッドシートのボタンをクリック
使用手順3|翻訳完了後にリンクをクリック
使用手順4|翻訳されたGoogleドキュメントを表示
以下で一つずつ解説していきます。
使用手順1|翻訳したいGoogleドキュメントのURLをセルB1にコピペ
セルB1に翻訳したいGoogleドキュメントのURLを貼り付けする。
・翻訳したいGoogleドキュメントを準備
・翻訳したい資料がPDFやwordの場合、Googleドキュメントに貼り付ける必要あり
・英語→日本語への翻訳のみ(日本語→英語も可能。後半のプログラム解説で紹介)
使用手順2|スプレッドシートのボタンをクリック
スプレッドシート上のボタンをクリックして、翻訳を開始します。
翻訳したいGoogleドキュメントの文章が多いと、翻訳に時間がかかります。
実際に私が試したのは6ページで1分弱の翻訳時間でした。
ちなみに翻訳開始と同時に、以下のポップアップが表示されます。
使用手順3|翻訳完了後にリンクをクリック
上記のように翻訳が完了したら、メッセージとともにリンクが表示されます。
このリンクをクリックします。
使用手順4|翻訳されたGoogleドキュメントを表示
このリンクをクリックすると、新しいタブに翻訳されたGoogleドキュメントが表示されます
これで翻訳完了です。
以下で、この仕組みの作り方について紹介していきます。
Googleドキュメントの文章を自動翻訳する仕組みの作成手順
作成手順2|スプレッドシートに必要情報を入力
作成手順3|GASプログラムをコピペ
作成手順4|スプレッドシートにボタンを設置
作成手順5|ステップ5のボタンクリックでステップ4のプログラムを実行
作成手順6|動作確認
それでは、ゼロから作っていけるように作り方を順を追って説明していきます。
作成手順1|スプレッドシートを準備
空のスプレッドシートを準備します。
新しいスプレッドシートではなく、既存のスプレッドシートでも問題ありません。
ただし、シート名はシート1としておくことをオススメします。
これから紹介するプログラムをそのまま使う場合、「シート1」でないと動かないので注意が必要です。
作成手順2|スプレッドシートに必要情報を入力
2. セルB1にGoogleドキュメントのURLを入力
以下の通り、スプレッドシートに必要情報を入力していきます。
「翻訳したいドキュメントURL」と入力
(セルB1のURLが翻訳したいGoogleドキュメントのURLであると分かるようにするため)
あらかじめ準備しておいた「翻訳したいGoogleドキュメントのURL」を入力
補足|GoogleドキュメントURLのコピペはショートカットキーで!
GoogleドキュメントのURLをセルに貼り付けるときは、以下のショートカットキーを使うと操作を早くできます。
1. GoogleドキュメントのURLを選択|[Alt] + [D]
2. 選択箇所(URL)をコピー|[Ctrl] + [C]
3. タスクの切り替え(Googleドキュメント→Googleスプレッドシート)|[Alt]を押しながら[Tab]
4. スプレッドシートに貼り付け|[Ctrl] + [V]
(※Windowのパソコンに限る)
作成手順3|GASプログラムをコピペ
2. スクリプトエディタをクリック
3. GASプログラムをデフォルトの記載を削除
4. この記事で紹介しているGASプログラムをコピペ
5. ファイルをクリック
6. 保存をクリック
以下で一つずつ解説していきます。
以下の画像は、別の記事を転用しているものがあります。
操作の内容に違いがないため、画像を修正せずにそのまま使用しています。
ご了承ください。
そうすると、以下のスクリプトエディタを出現します。
ちなみに1と2の作業は以下のショートカットキーでも開くことが可能です。
1. ツールをクリック|[Alt] + [T]
2. スクリプトエディタをクリック|[E]
以下のリンク先のGASプログラムをコピーします。(リンク先は同じページ下部です)
まず、以下のスクリプトエディタを選択して、もともと記載されているプログラムを削除します。
そして、コピーしたGASプログラムソースを貼り付けます。
ここまで作業が進むと以下のようになっているはずです。
ここまで出来たら、以下のとおりファイルを保存します。
5と6の作業は、[Ctrl] + [S]のショートカットキーを使うことをオススメ
プログラミングだけでなく、パソコン仕事においてはショートカットキーを使う方が早いです。
ぜひショートカットキーでの作業をオススメします。
ちなみにプログラムエディタの背景色が黒にする方法や、正確な操作を知りたい人がいるかもしれません。
その場合は、以下の動画をご覧いただくことをオススメします。
上記の動画では、GASを使い始めるまでの操作手順を動画で解説しています。
もし動画よりテキストのほうが得意な人は、以下の記事を参考にしていただくと良いです。
作成手順4|スプレッドシートにボタンを設置
2. 図形描画をクリックする
3. 図形マークをクリックする
4. 図形をクリックする
5. 四角マークをクリックする
6. マウスドラックで四角図形を作成する
7. 四角の図形の中に「フォルダ内の情報をリスト化」と記入する([Ctrl] + [E]で中央に寄せる)
8. 「保存して終了」をクリックする
以下で一つずつ解説していきます。
以下の画像は、別の記事を転用しているものがあります。
操作の内容に違いがないため、画像を修正せずにそのまま使用しています。
ご了承ください。
上記の操作を行って、スプレッドシートにボタンを設置します。
作成手順6|ステップ5のボタンクリックでステップ4のプログラムを実行
2. 「スクリプトを割り当て」をクリックする
3. 「」と記入する(先ほどコピペしたGASプログラムの名称)
4. 「OK」ボタンをクリックする
上記の操作で、スプレッドシートのボタンをクリックすると、プログラムが起動するようにします。
作成手順7|動作確認
それでは、議事録テンプレートを呼び出す仕組みができたので、動作確認をします。
以下の手順で進めていきます。
2. ボタンをクリック
3. リンクをクリック
4. 翻訳後のGoogleドキュメントが表示
まず、セルB1を確認し、「Googleドキュメント(議事録テンプレート)のURLが貼られていること」を確かめます。
そして、ボタンをクリックします。
そうすると、以下のようなリンクが出てきます。
このリンクをクリックすると、新しいタブに「翻訳後のGoogleドキュメント」が出力されます。
よくある質問1|「承認が必要」と表示されたとき、どうする?
ボタンをクリックすると、上記のように「このドキュメントに添付されたスクリプトを実行するには、あなたの許可必要です。」という画面が表示される場合があります。
その場合は、以下のとおり対応していきます。
以下の画像は、別の記事を転用しているものがあります。
ファイル名やスプレッドシート上の情報が、この記事の内容を一致しない場合があります。
あらかじめご了承ください。
2. 許可を出したいアカウントをクリックする
3. 「詳細」をクリックする
4. 「無題のプロジェクト(安全ではないページ)に移動」をクリックする
5. 「許可」をクリックする
6. 「フォルダ作成」のボタンをクリックする
そうすると、以下のようにボタンをクリックすることで、スクリプトが動きます。
ここまで紹介した内容を実践すれば、動作チェックで上手くいくことが確認できるはずです。
よくある質問2|プログラムのエラー表示されたとき、どうする?
上記のようにエラーが表示されて、プログラムが動かないことがあります。
プログラムエラーが生じた場合は、ステップ1から内容をチェックしてみてください。
とくに以下の内容を間違えていると、上手く動きません。
対処1. セルB1にGoogleドキュメントのURLが入力されているか?
対処2. セルB1にGoogleドキュメントのURLは正しいか?
上記の内容を確認してから、再度ボタンをクリックしてみてください。
それで動かなければ、プログラムのエラー内容を確認し、Google検索で調べるなどの追加調査を行ってみることがオススメします。
プログラムよりショートカットキー
さて、ショートカットキーに自信がない人はプログラミングよりもショートカットキーから学ぶことをオススメします。
なぜなら、プログラミングよりショートカットキーで対応する仕事のほうが多いからです。
たとえば、この記事では自動翻訳のプログラムを紹介しています。
しかし、自動翻訳を使って大量に翻訳する作業はそこまで多くはないはずです。
大量の翻訳より、むしろ英語の記事や論文などで分からない部分だけをGoogle翻訳にかけることのほうが多いのではないでしょうか。
そうすると、ウェブページのショートカットキーを覚えておく方が役立ちます。
ちなみにウェブページでよく使うショートカットキーは以下の動画で解説しています。
全力で解説しているので、ぜひご覧いただきたい動画です。
GASの自動翻訳プログラムの詳細を解説
ここまでGoogleドキュメントの英文を自動翻訳する方法を紹介してきました。
今回使用しているGASプログラムはコピペで使えるようにしていますので、全てを理解する必要はありません。
しかし、中にはプログラムを理解したい人もいるはずです。
そこで、GASプログラムの詳細も紹介していきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
//プログラム0|プログラム名 function myTranslation() { //プログラム1|スプレッドシート取得 var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); //プログラム2|ポップアップの表示 spreadsheet.toast('現在翻訳中です。完了するまでしばしお待ちください。文章が長いと数分かかる場合があります。' ,'プログラム実行中',-1) //プログラム3|翻訳したいGoogleドキュメントのURLを取得 var sheet = spreadsheet.getSheetByName('シート1'); var DocumentURL = sheet.getRange('B1').getValue(); //プログラム4|翻訳したいGoogleドキュメントのファイルIDを取得 var myArray= DocumentURL.split('/'); var docid = myArray[5]; //プログラム5|翻訳用Googleドキュメントをコピーして作成 var doc = DriveApp.getFileById(docid); var copydocname = doc.getName() + '_翻訳済' var copydoc = doc.makeCopy(copydocname); var copydocurl = copydoc.getUrl(); var copydocid = copydocurl.split('/')[5]; var translatedoc = DocumentApp.openById(copydocid); //プログラム6|コピーファイルの文章をパラグラフごとに取得 var paragraphs = translatedoc.getBody().getParagraphs(); //プログラム7|パラグラフごとに処理を実行 for (var i=0; i<paragraphs.length; i++){ // プログラム7-1|パラグラフに文字があればIF文{}を実行 if (paragraphs[i].getText() !=="" ){ // プログラム7-2|パラグラフを翻訳 var translatedText = LanguageApp.translate(paragraphs[i].getText(), 'en', 'ja'); translatedText = translatedText + '\n' Utilities.sleep(1000); }else{ // プログラム7-3|翻訳後の文章を入れない var translatedText = ''; } // プログラム7-4|翻訳後の文章を挿入 translatedoc.getBody().insertParagraph(2*i+1, translatedText); } //プログラム8|翻訳用GoogleドキュメントのURLを取得 var translatedurl = translatedoc.getUrl() //プログラム9|翻訳用GoogleドキュメントのURLのリンクをメッセージ表示 var html = '<html><body><a href="'+ translatedurl +'" target="blank" onclick="google.script.host.close()" rel="noopener noreferrer">'+ copydocname +'</a></body></html>'; var ui = HtmlService.createHtmlOutput(html) SpreadsheetApp.getUi().showModelessDialog(ui, '翻訳後のGoogleドキュメントのURLリンク'); } |
以下でプログラムを解説していきます。
プログラム0|プログラム名
1 2 |
function myTranslation() { } |
・プログラム名は「myTranslation()」
・「()」に記載がないため引数はなし
プログラム1|スプレッドシートの情報を取得
1 |
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); |
・変数supreadsheetに開いているスプレッドシートを設定
プログラム2|ポップアップの表示
1 |
spreadsheet.toast('現在翻訳中です。完了するまでしばしお待ちください。文章が長いと数分かかる場合があります。' ,'プログラム実行中',-1) |
・spreadsheet.toast(メッセージ , タイトル , 表示秒数)
・メッセージ:ポップアップに表示されるメッセージ
・タイトル:ポップアップに表示されるタイトル
・表示秒数:ポップアップの表示時間(「-1」にすると、ポップアップをクリックされるまで表示)
プログラム3|翻訳したいGoogleドキュメントのURLを取得
1 2 |
var sheet = spreadsheet.getSheetByName('シート1'); var DocumentURL = sheet.getRange('B1').getValue(); |
var sheet = spreadsheet.getSheetByName(‘シート1’);
・sheetという変数に、プログラム3-1で設定したspreadsheet(アクティブなスプレッドシート)の「シート1」を設定
var DocumentURL = sheet.getRange(‘B1’).getValue();
・DocumentURLという変数に、「シート1」のセルB1の値を入れる
セルB1には、翻訳したいGoogleドキュメントのURLを入力しておきます。
そうしておくことで、DocumentURLという変数に翻訳したいGoogleドキュメントのURLを設定できます。
そのためセルB1に何も値が入っていないと、プログラムエラーとなるので注意が必要です。
プログラム4|翻訳したいGoogleドキュメントのファイルIDを取得
1 |
var docid = DocumentURL.split('/')[5]; |
var myArray= DocumentURL.split(‘/’)[5];
DocumentURLの値を「/」で区切って、配列にする
たとえば、DocumentURLの値(セルB1の情報)が「https://docs.google.com/document/d/1XmVql-sYoIK6S5bDcxufLivyVJQZ1mCzH6tnLicLIA4/edit」の場合は、以下のようになります。
DocumentURL.split(‘/’) = [ ‘https:’, ”, ‘docs.google.com’, ‘document’, ‘d’, ‘1XmVql-sYoIK6S5bDcxufLivyVJQZ1mCzH6tnLicLIA4’, ‘edit’ ]
つまり、split(‘/’)とすることで、URLの「/」で区切って、それを一つずつ配列の要素として格納していきます。
さらに詳しく言うと以下のようになります。
DocumentURL.split(‘/’)[1] = ”
DocumentURL.split(‘/’)[2] = ‘docs.google.com’
DocumentURL.split(‘/’)[3] = ‘document’
DocumentURL.split(‘/’)[4] = ‘d’
DocumentURL.split(‘/’)[5] = ‘1XmVql-sYoIK6S5bDcxufLivyVJQZ1mCzH6tnLicLIA4’
DocumentURL.split(‘/’)[6] = ‘edit’
上述のとおり、「DocumentURL.split(‘/’)[5] = ‘1XmVql-sYoIK6S5bDcxufLivyVJQZ1mCzH6tnLicLIA4’」のため、「docid = ‘1XmVql-sYoIK6S5bDcxufLivyVJQZ1mCzH6tnLicLIA4’ 」となり、ファイルIDを取得できる。
プログラム5|翻訳用Googleドキュメントをコピーして作成
1 2 3 4 5 6 |
var doc = DriveApp.getFileById(docid); var copydocname = doc.getName() + '_翻訳済' var copydoc = doc.makeCopy(copydocname); var copydocurl = copydoc.getUrl(); var copydocid = copydocurl.split('/')[5]; var translatedoc = DocumentApp.openById(copydocid); |
このプログラムの目的は、翻訳したいGoogleドキュメントに変更を加えないようするために、コピーを作成することです。
このコピーしたGoogleドキュメントに対して翻訳処理を行います。
そうすることで、何かあったときに元のGoogleドキュメントからやり直すことができます。
プログラム5-1|翻訳したいGoogleドキュメントをファイルとして取得
var doc = DriveApp.getFileById(docid);
「翻訳したいGoogleドキュメントのファイルID」であるdocid(プログラム4-2)をGoogleDriveとして取得
プログラム5-2|翻訳後のファイル名を取得
var copydocname = doc.getName() + ‘_翻訳済’
変数copydocnameを「翻訳したいGoogleドキュメントのファイル名 + _翻訳済」とする
プログラム5-3|翻訳したいGoogleドキュメントのコピーを作成
var copydoc = doc.makeCopy(copydocname);
・makeCopy(ファイル名)で、ファイルをコピー
・ファイル名:コピーしたファイルのファイル名を指定
プログラム5-4|コピーしたファイルのURLを取得
var copydocurl = copydoc.getUrl();
・プログラム5-3でコピーしたファイルのURLを取得
プログラム5-5|DocumentURLのファイルURLを「/」で区切る
var copydocid = copydocurl.split(‘/’)[5];
copydocurl(プログラム5-4)の値を「/」で区切って、配列にする
実質的には、プログラム4と同じことを行っています。
詳しい説明はプログラム4を参考にしてください。
プログラム5-6|コピーしたGoogleドキュメントのファイルIDを取得
var translatedoc = DocumentApp.openById(copydocid);
変数translatedocにcopydocid(プログラム5-5)を設定して、コピーしたGoogleドキュメントを処理できるようになる。
プログラム6|コピーファイルの文章をパラグラフごとに取得
1 |
var paragraphs = translatedoc.getBody().getParagraphs(); |
・コピーした翻訳したいGoogleドキュメント内の文章をパラグラフごとに取得
プログラム7|パラグラフごとに処理を実行
1 2 3 4 5 6 7 8 9 10 11 12 |
for (var i=0; i<paragraphs.length; i++){ if (paragraphs[i].getText() !=="" ){ var translatedText = LanguageApp.translate(paragraphs[i].getText(), 'en', 'ja'); translatedText = translatedText + '\n' Utilities.sleep(1000); }else{ var translatedText = ''; } // プログラム7-4|翻訳後の文章を挿入 translatedoc.getBody().insertParagraph(2*i+1, translatedText); } |
プログラム7-1|パラグラフごとに繰り返し処理
for (var i=0; i < paragraphs.length; i++){
}
・i=0,1,2,・・・,paragraphs.length まで加算しながら、{ } 内の処理を繰り返す
・今回はパラグラフごとに翻訳を行っていく
プログラム7-2|パラグラフに文字があればIF文{}を実行
if (paragraphs[i].getText() !==”” ){
・パラグラフに文字があればIF文{} を実行
・空白行の翻訳を除外する(文章がない行を翻訳対象にしても時間がムダになるため)
プログラム7-3|英語から日本語に翻訳
var translatedText = LanguageApp.translate(paragraphs[i].getText(), ‘en’, ‘ja’);
・パラグラフの文章を英語から日本語に翻訳
・プログラムの’en’と’ja’の場所を入れ替えると、日本語を英語に翻訳できる
プログラム7-4|パラグラフ末尾に改行を加える
translatedText = translatedText + ‘\n’
・translatedText(翻訳した文章)の末尾に改行を加える
・改行を入れている理由は、見た目を分かりやすくするため(改行は必ずしも入れる必要はない)
プログラム7-5|1秒待機
Utilities.sleep(1000);
・プログラム7-3の処理は連続して実施するとエラーが出る場合あるため、1秒待機させる
・1000はミリ秒なので、実質は1秒
プログラム7-6|パラグラフに文字がなければelse{ }を実行
else{
}
・プログラム7-2のIf文の分岐
・プログラム7-2が「パラグラフの文字があれば」なので、それ以外の場合(パラグラフに文字がなければ)、プラグラム7-7を実行
プログラム7-7|翻訳後の文章を入れない
var translatedText = ”;
・translatedTextを空欄とする(パラグラフに文字がなければ)
プログラム7-8|翻訳後の文章を挿入
translatedoc.getBody().insertParagraph(2*i+1, translatedText);
・翻訳した文章を各パラグラフの末尾に挿入する
・insertParagraph(パラグラフ番号, 挿入する文章)
・パラグラフ番号は「2*i+1」とすることで、翻訳文章の挿入箇所がズレないようにする
・挿入する文章はパラグラフ7-4もしくはパラグラフ7-7で取得したtranslatedTextを使う
プログラム8|翻訳用GoogleドキュメントのURLを取得
1 |
var translatedurl = translatedoc.getUrl() |
・プログラム9で表示するために、翻訳後のGoogleドキュメントのURLを取得
プログラム9|翻訳用GoogleドキュメントのURLのリンクをメッセージ表示
1 2 3 |
var html = '<html><body><a href="'+ translatedurl +'" target="blank" onclick="google.script.host.close()" rel="noopener noreferrer">'+ copydocname +'</a></body></html>'; var ui = HtmlService.createHtmlOutput(html); SpreadsheetApp.getUi().showModelessDialog(ui, '翻訳後のGoogleドキュメントのURLリンク'); |