GASでGoogleカレンダーのルーチン作業を自動化!②

こんにちは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実装の解説

getActiveSpreadsheetメソッド

SpreadsheetApp.getActiveSpreadsheet()
で現在開いているスプレッドシートを操作する事ができます。

getSheetByNameメソッド

スプレッドシートオブジェクト.getSheetByName(name)でnameというシートオブジェクトを取得する事ができます。

今回はスプレッドシートカレンダー登録を引数に与えています。
//シートの2行目〜最終行まで処理を繰り返す
for(i = 2; i<= sht.getLastRow(); i++)
sheetオブジェクトに対してgetLastRow()メソッドで
書き込みがある最後の行を取得しています。最終行までfor文で繰り返しの処理を行います。

getLastRowメソッド

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();
で変数に代入します。

getRangeメソッド

Sheetオブジェクト.getRange(i,h)でi行h列を選択しRangeオブジェクトを作ります。

getValueメソッド

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を押すとスプレッドシートに戻ります。
あとは図形をクリックすれば、関数が実行されます!!!お疲れ様です!

以上がスプレッドシートのイベントを終日イベントとして登録する方法でした。
日時指定のイベントとして、登録するコードも合わせて利用で出来るようにしておくので、

※下記ファイルをコピーしてお使いください。「ツール → スクリプトエディタ」でスクリプトも見れるようになります。
スプレッドシート(コピーしてお使いください)
スクリプト(コピーしてお使いください)
請求書の受け取りはsweeepで自動化

【AI請求書処理】従来の請求書OCRでは対応できない非定型帳票や

自動会計仕訳も、sweeepなら対応可能!最短で即日導入、

面倒な設定不要。手軽に導入して請求業務を効率化。