Googleドキュメントで作成したテンプレートをもとに配布文書を作り、Gmailで送信する、といった処理を自動化してみましょう。

ドキュメントを生成する

何かのイベントの案内やレポートなどを配布する場合、Gmailだけでは表現が限られてしまいます。HTMLメールで細かなデザインを作成することも可能ですが、それよりもGoogleドキュメントなどで文書を作成し、それを添付して送ったほうがはるかに楽でしょう。

Googleドキュメントを使って配布文書を作成する利点は、なんといっても「ドキュメント作成にスクリプトが使える」という点でしょう。例えば、配布文書などは、あらかじめ文面が決まっており、タイトルや名前などだけを差し替えて使う、ということもよくあります。このような場合、文書の必要な場所にテキストをはめ込んで文書を完成させるスクリプトの書き方がわかっていれば、Googleドキュメントをテンプレート的に利用できます。

実際に簡単なサンプルを作って試してみることにしましょう。新しいGoogleドキュメントを作成し、文書に以下のようなテキストを記入しておきます。

{title}
{name}
{content}

これらはそれぞれフォントサイズやスタイルなどを設定しておきます。これが文書のテンプレートとなります。

  • 文書のテンプレート。

続いて、スクリプトを用意します。文書の「ツール」メニューから「スクリプトエディタ」を選んで下さい。そして以下のスクリプトを記述しましょう。


function setPlaceholders() {
  var doc = DocumentApp.getActiveDocument()
  var body = doc.getBody();
  body.replaceText('{title}', 'サンプル文書');
  body.replaceText('{name}', 'やまだたろう');
  body.replaceText('{content}', 'これはサンプルで作成した文書です。');
}

記述できたらスクリプトを保存し、setPlaceholders関数を実行します。すると、文書の{title}、{name}、{content}の部分にそれぞれテキストがはめ込まれ、文書が完成します。

  • スクリプトを実行すると文書が完成する。

ここでは、まずDocumentAppオブジェクトのgetActiveDocumentというものでドキュメントを取得しています。DocumentAppが、Googleドキュメントのオブジェクトで、getActiveDocumentは現在開いているドキュメント(すなわち、このスクリプトが設定されているドキュメント)のオブジェクトを取得するものです。

このドキュメントから、getBodyメソッドでドキュメントの本文を取得します。そして「replaceText」メソッドを使って、そこにあるテキストの一部を別のテキストに置き換えています。replaceTextは、第1引数のテキストを第2引数のテキストに置換するメソッドです。

このreplaceTextを使って、予め用意しておいた敵数と部分に値をはめ込んでいけば、ドキュメントが完成します。ここでは単純なサンプルですが、本格的な文書の中に必要に応じて値を埋め込んでおき、置換することができるなら、文書をテンプレートとして使うことが可能になります。

テンプレートを用意する

では、実際に「ドキュメントを生成し、それを添付して送信する」というスクリプトを作ってみましょう。まずは、テンプレートとなるドキュメントファイルから作成します。

Googleドキュメントで新しいドキュメントを生成し、文書の雛形を作成しておきましょう。このとき、タイトル、予定、場所については以下の値を代りに埋め込んでおきます。

{title}
{schedule}
{place}

これらの部分に、必要に応じて値をはめ込み、それをメールに添付して送ればいいわけですね。

  • Googleドキュメントでテンプレートを作成する。

Googleドキュメントで文書が完成したら、そのIDを控えておきましょう。これはGoogleドキュメントのURL(/editの手前部分)のランダムなテキストです。よくわからなければ、 スクリプトを使って取り出しましょう。Googleドキュメントのスクリプトエディタを開き、以下の関数を記述して実行して下さい。


function getId() {
  Logger.log(DocumentApp.getActiveDocument().getId());
}

これを実行したら、「表示」メニューの「ログ」を選んでログのダイアログを呼び出して下さい。ここに、このGoogleドキュメントのIDが表示されます。このIDの値をコピーしておきましょう。後で利用します。

  • スクリプトを実行するとログ・ダイアログにIDが出力される。

文書をメールで送信する

では、作成した文書に必要な値をはめ込み、メールに添付して送信してみましょう。スクリプトエディタで以下を記述して下さい。


// ●ドキュメントID(書き換える)
var id = '……ドキュメントのID……';

// ドキュメントの差し入れデータ
var content = {
  title:'新マイナビプロジェクト',
  date:'2019年 3月 10日',
  schedule:'2019年 4月 1日 11:00AM',
  place:'マイナビ会館第2会議室'
};

// メールの送信データ(fromは自アドレスに書き換える)
var data = {
  from:'your@mail.address',
  title:'案内ドキュメントの送付'
};

// ●送信先(ダミー。書き換えて使う)
var addresses = {
  '山田太郎': 'dummy@mail.address',
  '田中花子': 'dummy@mail.address'
};

// メールの内容
var message = '様\n'
    + 'お世話になっております。\n'
    + '本日は、' + content.title + 'の件でご連絡しました。\n'
    + '詳細は、添付のドキュメントを御覧下さい。'

// ドキュメントの差し入れ処理
function setContent(newid) {
  var file = DocumentApp.openById(newid);
  var body = file.getBody();

  for(var k in content){
    body.replaceText('{' + k + '}', content[k]);
  }
  file.saveAndClose();
}

// メイン処理
function sendDoc() {
  var docfile = DriveApp.getFileById(id);
  var newfile = docfile.makeCopy('一時ファイル');

  setContent(newfile.getId());

  for (var k in addresses){
    GmailApp.sendEmail(
      addresses[k], data.title, k + message, 
      {attachments:[newfile]}
    );
  }
}

ここでは、5つのデータと2つの関数が用意されています。●マークのドキュメントIDには、それぞれのGoogleドキュメントのIDを指定して下さい。また●マークの「送信先」の部分には、送信先の名前とメールアドレスをオブジェクトとしてまとめておきます。

メインプログラムは、sendDoc関数になります。これを実行すると、Googleドキュメントをコピーし、テンプレートの{title}、{schedule}、{place}にそれぞれ値を組み込んで文書を完成させます。そして、●送信先に用意したメールアドレスに文書を添付したメールを送信します。

  • 送信されたメール。Googleドキュメントが添付されている。

  • 添付されているGoogleドキュメント。

Googleドライブでファイルを複製する

ここでは、文書をコピーして利用するようにしています。これは以下のように行っています。


var docfile = DriveApp.getFileById(id);
var newfile = docfile.makeCopy('一時ファイル');

DriveAppは、Googleドライブのオブジェクトです。そしてgetFileByIdは、引数に指定したIDのファイル・オブジェクトを取得するものです。makeCopyはファイルのオブジェクトにあるメソッドで、そのファイルを指定の名前で複製します。

ファイルの複製ができたら、setContent関数を呼び出して文書の必要な場所に値を組み込んで完成させます。後は、GmailApp.sendEmailで文書を添付したメールを送信するだけです。

文書の添付は、sendEmailの引数に{attachments:[newfile]}というように指定をして行います。attachmentsに、DriveAppで取得したファイル・オブジェクトをそのまま渡せば、その文書を添付したメールが作成されるのです。Googleドライブを使うと、ファイルの添付は以外に簡単にできるのです。