背景
私の研究室では、毎週ミーティングがあり各々が1つのGoogleドキュメントに進捗報告を書いていきます。
毎週新たにドキュメントを作成&共有URLを取得し、それをメールで流す作業があるのですが、
毎回忘れてしまい、そして面倒なので自動化しました。
前提
- Google Driveで共有フォルダを作成している
- 共有フォルダにテンプレートのドキュメントを作ってある
以上を前提に進めます。
目標
以下の手順で行っている作業を自動化します。
- 日付をタイトルにしたドキュメントを作成
- URLを取得
- メール送信
手順
初期準備
- Google拡張機能でGoogleAppsScriptを追加
- 共有フォルダIDを取得
共有フォルダのURLの一番後ろの塊です。
https://drive.google.com/drive/u/0/folders/<ここ>
- コードの
targetFolderId
になります
- コードの
- テンプレートドキュメントのIDを取得
URLの後ろの部分です。
https://docs.google.com/document/d/<ここ>/edit
- コードの
fileId
になります
- コードの
スクリプト作成
- GoogleDriveの
新規
→その他
→Google Apps Script
から新規スクリプトを作成 - コードを書く(JavaScript)
- エディター上から実行できます
- 左上側の
関数を選択
で実行する関数を選択してからその2つ左の実行▲ボタン
- 左上側の
コード
// 共有フォルダのID
var targetFolderId = '<共有フォルダのID>'
/**
* copy docs
*/
function createCopy() {
//コピー元となるドキュメントファイルのIDを取得
var fileId = '<テンプレートドキュメントのID>'
//ファイル名の日付部分作成
var date = new Date();
date.setDate(date.getDate() + 1); // 火曜に作成して日付は水曜にするので1日ずらす
var formattedDate = Utilities.formatDate(date, "JST", "yyyy/MM/dd");
//コピー元のファイルを開く
var file = DriveApp.getFileById(fileId);
//コピーを作成。作成したコピーを参照。
var newFile = file.makeCopy(formattedDate);
return newFile;
}
/**
* send a mail to member
* こっちを実行する。本番はsendEmailの引数がtoになっていることを確認。
*/
function sendMail() {
// 複数宛先
var to = ['hogehoge@gmail.com',
'fugafuga@gmail.com'];
// 件名
var subject = '件名'
// 本文
var body = '本文'
// 新規作成ファイルのID
var newFileId = createCopy().getId(); //ここでコピーが生成されるのでsenMail関数のみ実行すればよい
// docsのリンク
var link = 'https://docs.google.com/document/d/'+newFileId
//メール本文の最後に作成されたドキュメントのURLを足してメール送信
MailApp.sendEmail(to, subject, body+link);
}
実行スケジュール設定
-
編集
→現在のプロジェクトのトリガー
へ行き、トリガーを追加
する - 実行したい関数と実行スケジュールを選択
今回は毎週火曜の午前中に実行したいので、- イベントのソースを選択:
時間主導型
- 時間ベースのトリガーのタイプを選択:
週ベースタイマー
- 曜日を選択:
毎週火曜日
- 時刻を選択:
午前10時~11時
- イベントのソースを選択: