こんにちはWebライターのTakaです。
前回に引き続き、今回もGoogleカレンダーを利用した業務の効率化についての記事です!
前回の記事ではGASを使って、日本の祝日を自分のカレンダーに登録する方法を書きました。
今回はスプレッドシート上のイベントをカレンダーに登録する方法について書きます。
不定期に作成したいイベント、例えば会議やお盆休みなどを手作業での登録するとかなり時間が掛かると思います。
メールやSlackでの告知だけだと、見逃してしまう事もあると思います。
スプレッドシートで予定を登録し、登録しているメンバーに招待を送る方法
今回実装する事
- Google スプレッドシートからイベントのタイトル、開始日時、終了日時を取得
- 自分のカレンダーにイベントを登録する
- ゲストに招待メールを送る
いちいちゲストに追加するのめんどくさい!!!
SpreadsheetAppの実装手順
Googleカレンダーを操作するためのCalendarAppと、Googleスプレッドシートを操作するためのSpreadsheetAppがあります。CalendarAppについては前回説明したので、SpreadsheetAppについて説明します。
SpreadsheetAppがスプレッドシートのサービスを利用するためのクラスです
Spreadsheetはスプレッドシートを操作するためのクラスで
Sheetはシートの操作をするクラス、Rangeは主にセルの操作をするクラスです。
SpreadsheetApp→Spreadsheet→Sheet→Rangeでオブジェクトを呼び出します。
実装していきます。
function createEvent(title,start,end){ //シートの項目を以下変数定義 var sht, i, eventday, eventname, endEventday,mailList; mailList= {guests:"sample@gmail.com"}; var option ={ guests:mailList.guests, } //shtを定義 sht = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("スプレッドシートカレンダー登録"); //シートの2行目〜最終行まで処理を繰り返す for(i = 2; i<= sht.getLastRow(); i++) { /*--スプレッドシートの値を取得して変数へ格納--*/ //i行2列目の値(イベント日)をeventdayへ格納 eventday = sht.getRange(i, 2).getValue(); //i行3列目の値を格納 endEventday =new Date(sht.getRange(i, 3).getValue()); endEventday.setDate(endEventday.getDate() + 1); //i行1列目の値(イベントの名前)をeventnameへ格納 eventname = sht.getRange(i,1).getValue(); //i行4列目の値(イベント登録有無)をaddedへ格納 added = sht.getRange(i,4).getValue(); //addedの値が空白だったらカレンダー登録を実行 if(added == "") { Cal =CalendarApp.getDefaultCalendar(); //指定のカレンダーへインベント登録 Cal.createAllDayEvent(eventname, eventday, endEventday, option );//createEvent(タイトル、開始日時、終了日時、オプション) //カレンダー登録が終わったイベントのaddedへ「登録完了」を記入 sht.getRange(i,4).setValue("登録完了"); } //ifを閉じる } //forを閉じる } //functionを閉じる
SpreadsheetApp実装の解説
SpreadsheetApp.getActiveSpreadsheet()
で現在開いているスプレッドシートを操作する事ができます。
スプレッドシートオブジェクト.getSheetByName(name)でnameというシートオブジェクトを取得する事ができます。
今回はスプレッドシートカレンダー登録を引数に与えています。
//シートの2行目〜最終行まで処理を繰り返す
sheetオブジェクトに対してgetLastRow()メソッドで
for(i = 2; i<= sht.getLastRow(); i++)
書き込みがある最後の行を取得しています。最終行までfor文で繰り返しの処理を行います。
Sheetオブジェクト.getLastRow()で書き込みのある最終行を取得しています。
Sheetオブジェクト.getLastColumn()で最終列を取得できます。
カレンダーにイベントを登録する関数はcreateAllDayEvent(title,start,end,[option])
であり、タイトルと開始日、終了日が必要なので、
//i行2列目の値(イベント日)をeventdayへ格納
eventday = sht.getRange(i, 2).getValue();
//i行3列目の値を格納
endEventday =new Date(sht.getRange(i, 3).getValue());
endEventday.setDate(endEventday.getDate() + 1);
//i行1列目の値(イベントの名前)をeventnameへ格納
eventname = sht.getRange(i,1).getValue();
で変数に代入します。
Sheetオブジェクト.getRange(i,h)でi行h列を選択しRangeオブジェクトを作ります。
Rangeオブジェクト.getValue()で値を取得します。
ちなみに、Rangeオブジェクト.setValue(value)で値を書き込む事ができます。
getの反対はset なのでセットで覚えるといいでしょう。
if(added == "")
D列が空欄の場合に処理をします。
複数回同じイベントを処理しないための制御構造となっています。
Cal =CalendarApp.getDefaultCalendar();
で自分のカレンダーを起動し
Cal.createAllDayEvent(eventname,
前回と同じようにこの文でカレンダーを登録します。
eventday,
endEventday,
option
);/
optionについて冒頭でmailList に格納されているユーザーにメールを送る設定にしています。
“email,email,email”とコンマ区切りでメールアドレスを追加してください!
メールを送らない場合はsendInvites : false
にしてください。
//カレンダー登録が終わったイベントのaddedへ「登録完了」を記入
sht.getRange(i,4).setValue("登録完了");
登録完了とセルに書き込む事で、同じイベントを作らないように制御しています。
スプレッドシートにスクリプトを実行するボタンを作成する方法
G列上にある右の上の円を押すとスクリプトエディタを使わずに、関数を実行する事ができます。
このボタンは様々な事に応用できますので、是非使い方をマスターしてください!!
まずスプレッドシートの上の挿入タブを押してください。
挿入から図形描画を押してください。
すると図形を描画する画面が出てきます。
保存して終了を押すと、スプレッドシート上に作成した図形が出てきます。
右上に設定ボタン(グレー色の3つの丸)が出てくるのでクリックをしてスクリプトを割り当てを選択します。
そうすると最後の画像のように入力ボックスが出てくるので、関数名を入力して下さい。
OKを押すとスプレッドシートに戻ります。
あとは図形をクリックすれば、関数が実行されます!!!お疲れ様です!
以上がスプレッドシートのイベントを終日イベントとして登録する方法でした。
日時指定のイベントとして、登録するコードも合わせて利用で出来るようにしておくので、