Google Apps Script 入門
(業務で使えるサンプルを日本語で解説)
Google Apps は 『Gmail』 と 『Googleカレンダー』 だけではありません!
「そんな事はよく分かってる。でも、どこから手をつけたらよいかが分からない。」という方や、
「Google Apps Script を覚えて Google Apps をもっと使い倒したい!」という方におススメです。
2011年11月26日土曜日
2011年9月30日金曜日
【業務で使える】今日の予定通知ツール(4)スクリプトの改良
残念ながら、昨日の終日イベントも入ってしまう事が判明しました。
よって、終日イベントに関しては (終了時刻の日付>今日) になっているモノのみ対象とする判定ロジックを入れ、以下のように改良しました。
function mySendEventsToday() {
var cal = CalendarApp.getDefaultCalendar();
var ev = cal.getEventsForDay(new Date()); // 残念ながら昨日の終日イベントも入ってしまう
var mail_to = "zzz@xxxx.xx.xx";
var today = Utilities.formatDate(new Date(), "JST", "yyyy/MM/dd");
var subject ="【今日の予定:" + today + "】";
var body = subject + "\n";
body = body + "◆終日イベント\n";
for (var i = 0; i < ev.length; i++) {
// 終日イベントは (終了時刻の日付 > 今日) になっているモノのみ対象
if (ev[i].isAllDayEvent() && (Utilities.formatDate(ev[i].getEndTime(), "JST", "yyyy/MM/dd") > today)) {
body = body + "・";
body = body + ev[i].getTitle();
body = body + "\n";
}
}
body = body + "◆時間イベント\n";
for (var i = 0; i < ev.length; i++) {
// 終日イベントでないもの(時間イベント)は全て対象
if (!ev[i].isAllDayEvent()) {
body = body + "・";
body = body + Utilities.formatDate(ev[i].getStartTime(), "JST", "HH:mm");
body = body + " - ";
body = body + Utilities.formatDate(ev[i].getEndTime(), "JST", "HH:mm");
body = body + " ";
body = body + ev[i].getTitle();
body = body + "\n";
}
}
MailApp.sendEmail(mail_to, subject, body);
}
以上です。
2011年8月16日火曜日
【業務で使える】今日の予定通知ツール(3)イベントの作成
トリガーを作成し、今日の予定メールが夜間に自動的に送られるように設定します。
スクリプト エディタの「トリガー」メニューから「現在のプロジェクトのトリガー...」を選択します。
「トリガーが設定されていません。今すぐ追加するにはここをクリックしてください。」の部分をクリックします。
「実行」に「MySendEventsToday」、「イベント」に「時間主導型」「日タイマー」「午前 0 時~1 時」を選択して「保存」ボタンをクリックします。
通常は、ここで承認画面が表示されるのですが、前節で既に承認していますので表示されません。×ボタンを押してスクリプトエディタを閉じます。
スプレッドシートにも名前を付けて保存しておきましょう。Googleドキュメントでは、明示的に保存操作を行わなくても、ある程度の時間が経つと「無題スプレッドシート」という名前で自動保存されます。そのような場合は、スプレッドシート名をクリックして名前を変更しておきましょう。
ちなみに、今回の例では、0時57分に以下のメールが届きました。
以上です。
スクリプト エディタの「トリガー」メニューから「現在のプロジェクトのトリガー...」を選択します。
「トリガーが設定されていません。今すぐ追加するにはここをクリックしてください。」の部分をクリックします。
「実行」に「MySendEventsToday」、「イベント」に「時間主導型」「日タイマー」「午前 0 時~1 時」を選択して「保存」ボタンをクリックします。
通常は、ここで承認画面が表示されるのですが、前節で既に承認していますので表示されません。×ボタンを押してスクリプトエディタを閉じます。
スプレッドシートにも名前を付けて保存しておきましょう。Googleドキュメントでは、明示的に保存操作を行わなくても、ある程度の時間が経つと「無題スプレッドシート」という名前で自動保存されます。そのような場合は、スプレッドシート名をクリックして名前を変更しておきましょう。
ちなみに、今回の例では、0時57分に以下のメールが届きました。
以上です。
【業務で使える】今日の予定通知ツール(2)スクリプトの作成
Googleドキュメントの「新規作成」メニューから「スプレッドシート」を選択します。
新規のスプレッドシートが開いたら「ツール」メニューから「スクリプト エディタ...」を選択します。
スクリプト エディタに、以下のスクリプトを入力します。
(コピー&ペーストした方が楽です。)
「zzzz@xxxx.xx.xx」にはご自分のメールアドレスを設定して下さい。
フロッピーディスクのマークをした「保存」ボタンを押し、名前を付けて保存します。
ちゃんと動くかどうか試してみましょう。三角印の「選択した関数を実行」ボタンを押してスクリプトを実行します。
メールを送信したり、カレンダーを読み取るスクリプトの実行には承認が必要ですので「承認」ボタンを押します。
また、スクリプトからGoogleカレンダーにアクセスするためには、カレンダーを読まれるアカウントでの許可が必要です。今回は、既にログインしているユーザー自身のカレンダー読み取りですので、そのまま「アクセスを許可」ボタンを押します。
承認や許可を行った時は、スクリプトは実行されませんので、もう一度、三角印の「選択した関数を実行」ボタンを押してスクリプトを実行します。
Googleカレンダーに登録したイベントが以下のようなメールとして届けば、スクリプトは正常に動作しています。
【参考にしたサイト】
Calendar Services > Class CalendarApp > method getEvents(startDate, endDate, optStatus)
http://code.google.com/intl/ja/googleapps/appsscript/class_calendarapp.html#getEvents
Calendar Services > Class CalendarApp > method getEventsForDay(date)
http://code.google.com/intl/ja/googleapps/appsscript/class_calendarapp.html#getEventsForDay
Utilities Services > Class Utilities > method formatDate(date, timeZone, format)
http://code.google.com/intl/ja/googleapps/appsscript/class_utilities.html#formatDate
【ハマった個所】
Googleのサイトの例は、以下の通りでした。
Utilities.formatDate(new Date(), "GMT", "yyyy-MM-dd'T'HH:mm:ss'Z'");
上記から分かることは、グリニッジ標準時に変換するのであれば、GMT(Greenwich Mean Time)を指定しなさいという事。では、日本時間に変換したい場合はどうすればいいのでしょうか。参考にしてサイトでは一切触れていません。こんな時は、調べるよりも試してみる方が早いですね。一般に、日本標準時は世界標準時より9時間進んでいるため「+0900(JST)」のように表示されます。JSTとは Japan Standard Time の略。そこで、GMT の部分をとりあえず JST に変更して試してみたら見事に日本時間に変換されました。
新規のスプレッドシートが開いたら「ツール」メニューから「スクリプト エディタ...」を選択します。
スクリプト エディタに、以下のスクリプトを入力します。
(コピー&ペーストした方が楽です。)
function mySendEventsToday() {
var cal = CalendarApp.getDefaultCalendar();
var events = cal.getEventsForDay(new Date());
var mail_to = "zzz@xxxx.xx.xx";
var today = Utilities.formatDate(new Date(), "JST", "yyyy/MM/dd");
var subject ="【今日の予定:" + today + "】";
var body = subject + "\n";
for (var i = 0; i < events.length; i++) {
body = body + "・";
body = body + Utilities.formatDate(events[i].getStartTime(), "JST", "HH:mm");
body = body + " - ";
body = body + Utilities.formatDate(events[i].getEndTime(), "JST", "HH:mm");
body = body + " ";
body = body + events[i].getTitle();
body = body + "\n";
}
MailApp.sendEmail(mail_to, subject, body);
}
【注意】「zzzz@xxxx.xx.xx」にはご自分のメールアドレスを設定して下さい。
フロッピーディスクのマークをした「保存」ボタンを押し、名前を付けて保存します。
ちゃんと動くかどうか試してみましょう。三角印の「選択した関数を実行」ボタンを押してスクリプトを実行します。
メールを送信したり、カレンダーを読み取るスクリプトの実行には承認が必要ですので「承認」ボタンを押します。
また、スクリプトからGoogleカレンダーにアクセスするためには、カレンダーを読まれるアカウントでの許可が必要です。今回は、既にログインしているユーザー自身のカレンダー読み取りですので、そのまま「アクセスを許可」ボタンを押します。
承認や許可を行った時は、スクリプトは実行されませんので、もう一度、三角印の「選択した関数を実行」ボタンを押してスクリプトを実行します。
Googleカレンダーに登録したイベントが以下のようなメールとして届けば、スクリプトは正常に動作しています。
【参考にしたサイト】
Calendar Services > Class CalendarApp > method getEvents(startDate, endDate, optStatus)
http://code.google.com/intl/ja/googleapps/appsscript/class_calendarapp.html#getEvents
Calendar Services > Class CalendarApp > method getEventsForDay(date)
http://code.google.com/intl/ja/googleapps/appsscript/class_calendarapp.html#getEventsForDay
Utilities Services > Class Utilities > method formatDate(date, timeZone, format)
http://code.google.com/intl/ja/googleapps/appsscript/class_utilities.html#formatDate
【ハマった個所】
Googleのサイトの例は、以下の通りでした。
Utilities.formatDate(new Date(), "GMT", "yyyy-MM-dd'T'HH:mm:ss'Z'");
上記から分かることは、グリニッジ標準時に変換するのであれば、GMT(Greenwich Mean Time)を指定しなさいという事。では、日本時間に変換したい場合はどうすればいいのでしょうか。参考にしてサイトでは一切触れていません。こんな時は、調べるよりも試してみる方が早いですね。一般に、日本標準時は世界標準時より9時間進んでいるため「+0900(JST)」のように表示されます。JSTとは Japan Standard Time の略。そこで、GMT の部分をとりあえず JST に変更して試してみたら見事に日本時間に変換されました。
【業務で使える】今日の予定通知ツール(1)ツールの概要
今日の予定通知ツールは以下のような構成になっています。
トリガーによって、毎晩、スクリプトが実行され、Googleカレンダーに登録された今日の予定を読み取ってメール送信します。
このツールは以下の手順で作成します。
1.スクリプトの作成
2.トリガーの作成
では、実際にスクリプトの作成から始めましょう。
トリガーによって、毎晩、スクリプトが実行され、Googleカレンダーに登録された今日の予定を読み取ってメール送信します。
このツールは以下の手順で作成します。
1.スクリプトの作成
2.トリガーの作成
では、実際にスクリプトの作成から始めましょう。
2011年8月15日月曜日
【業務で使える】セミナー申込管理ツール(9)リマインドメール②
前節で作成したリマインドメール送信スクリプトを実行してみましょう。
スクリプトを保存した後、セミナー申込のスプレッドシートを一旦閉じてから開き直して下さい。(変更したonOpen関数を実行するためです。)
「拡張」メニューから「リマインドメール」を選択します。
申込をした方々に、以下のようなリマインドメールが送られます。
以上です。
スクリプトを保存した後、セミナー申込のスプレッドシートを一旦閉じてから開き直して下さい。(変更したonOpen関数を実行するためです。)
「拡張」メニューから「リマインドメール」を選択します。
申込をした方々に、以下のようなリマインドメールが送られます。
以上です。
【業務で使える】セミナー申込管理ツール(8)リマインドメール①
申込者全員にリマインドメールを一斉送信するスクリプトを作成します。
まず、セミナー申込のスプレッドシートを開きます。
「ツール」メニューから「スクリプト エディタ...」を選択します。
mySendRemind関数を追加入力し、onOpen関数の一部を変更します。
既に入力されているmySendReport関数とmySendMail関数には変更はありません。
報告先のメールアドレス「yyyy@xxxx.xx.xx」や、担当者のメールアドレス「xxxx@xxxx.xx.xx」には正しいものを設定して下さい。
フロッピーディスクのマークをした「保存」ボタンを押し、名前を付けて保存します。
これにて、スクリプトの作成は完了です。
ウィンドウの×ボタンを押してスクリプトエディタを閉じます。
まず、セミナー申込のスプレッドシートを開きます。
「ツール」メニューから「スクリプト エディタ...」を選択します。
mySendRemind関数を追加入力し、onOpen関数の一部を変更します。
既に入力されているmySendReport関数とmySendMail関数には変更はありません。
function onOpen() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var menuEntries = [];
menuEntries.push({name: "申込状況報告", functionName: "mySendReport"});
menuEntries.push({name: "リマインドメール", functionName: "mySendRemind"});
ss.addMenu("拡張", menuEntries);
}
function mySendRemind(e) {
var sh = SpreadsheetApp.getActiveSheet();
var mail_cc = "xxxx@xxxx.xx.xx"; // 担当者
var subject = "リマインドメール";
var body_tmp = "イベントの日が近づいて参りました。\n";
body_tmp = body_tmp + "皆様のご参加をお待ちしております。\n\n";
body_tmp = body_tmp + "日時:yyyy年mm月dd日 hh:mm~hh:mm\n";
body_tmp = body_tmp + "場所:XXXXXXXX\n\n";
body_tmp = body_tmp + "イベント事務局\n" + mail_cc;
var rg = sh.getDataRange();
var rows = rg.getLastRow(); //最終行を取得
var values = rg.getValues(); //データを配列に格納
for (var i = 1; i < rows; i++) {
var name = values[i][1];
var company = values[i][2];
var mail_to = values[i][3];
var body = company + "\n" + name + " 様\n\n" + body_tmp;
MailApp.sendEmail(mail_to, subject, body, {cc: mail_cc});
}
Browser.msgBox("メールを送信しました!");
}
function mySendReport(e) {
var sh = SpreadsheetApp.getActiveSheet();
var mail_to = "yyyy@xxxx.xx.xx"; // 報告先
var subject = "申込状況報告";
var body = Utilities.formatDate(new Date(), "JST", "yyyy/MM/dd' 'HH:mm");
body = body + " 時点の情報:\n\n";
var rg = sh.getDataRange();
var rows = rg.getLastRow(); //最終行を取得
var values = rg.getValues(); //データを配列に格納
for (var i = 1; i < rows; i++) {
body = body + i + ". " + values[i][1] + " " + values[i][2] + " " + values[i][3] + "\n" ;
}
body = body + "\n以上です。";
MailApp.sendEmail(mail_to, subject, body);
Browser.msgBox("メールを送信しました!");
}
function mySendMail(e) {
var name = e.namedValues["氏名"];
var company = e.namedValues["会社名"];
var mail_to = e.namedValues["メール"];
var mail_bcc = "xxxx@xxxx.xx.xx"; // 担当者
var subject = "申込完了のお知らせ";
var body = company + "\n" + name + " 様\n\n";
body = body + "この度は申し込みいただき、誠に";
body = body + "ありがとうございます。\n\n";
body = body + "なお、十分な座席数をご用意しておりますが、";
body = body + "お申込多数の場合、抽選とさせて\n";
body = body + "頂く場合がございます。予めご了承いただけ";
body = body + "ますようお願い申し上げます。\n\n";
body = body + "イベント事務局\n" + mail_bcc;
MailApp.sendEmail(mail_to, subject, body, {bcc: mail_bcc});
}
【注意】報告先のメールアドレス「yyyy@xxxx.xx.xx」や、担当者のメールアドレス「xxxx@xxxx.xx.xx」には正しいものを設定して下さい。
フロッピーディスクのマークをした「保存」ボタンを押し、名前を付けて保存します。
これにて、スクリプトの作成は完了です。
ウィンドウの×ボタンを押してスクリプトエディタを閉じます。
登録:
投稿 (Atom)