追記
2022/08/31 スクリプトのバグ修正しました。
概要
あ、ゴミ出し忘れた!を解消していきます。
GASによるカレンダー操作をするための準備
まずは、GASによりカレンダー操作を行うための事前準備をしていきます。
カレンダーIDの取得
自分のGoogleカレンダーのカレンダーIDを取得します。
※ 操作を行いたいカレンダーが、Googleアカントに紐づく自分のカレンダーだった場合は
カレンダーIDはgmailのメールアドレスとなります。
- Google Calendarを開く
- 左パネルより、操作を行いたいカレンダーを選択
- 「設定と共有」を選択
- 「カレンダーの統合」を選択
- 「カレンダー ID」の項目がカレンダーIDとなりますので控えておいてください。
スクリプトを作成する
- Google スプレッドシートを開く
- 新規のファイルを作成
- 拡張機能 > Apps Scriptを選択
- 下記のコードを入力
const CALENDAR_ID = '{取得したカレンダーID}';
function getCalendarEvents() {
const calendar = CalendarApp.getCalendarById(CALENDAR_ID);
console.log(calendar.getName());
}
実行すると、カレンダー名がコンソールに表示されます。
これで、「GASによるカレンダー操作をするための準備」は終了です。
ゴミの日を登録するスクリプトを作成する
第N曜日に予定のゴミの日を登録するスクリプトを作成しました。
1行目のCALENDAR_IDの記述は残して、下記をコピペしてください。
const CALENDAR_ID = XXXX; //カレンダーID
const calendar = CalendarApp.getCalendarById(CALENDAR_ID);
// var year = 2022
// var month = 2
var today = new Date();
var year = today.getFullYear();
var month = today.getMonth();
var firstDay = new Date(year, month, 1); // 月初日
// console.log(year);
// console.log(month);
// console.log(firstDay);
var firstDays = getWeekFirstDays(firstDay.getDay());
/**
* main
*/
function main() {
// 瓶、缶ゴミ 第2, 第4水曜日
setSchedule("瓶、缶ゴミ", 3, 2);
setSchedule("瓶、缶ゴミ", 3, 4);
// 不燃ゴミ 第2, 第4木曜日
setSchedule("不燃ゴミ", 4, 2);
setSchedule("不燃ゴミ", 4, 4);
// ダンボール回収 第1, 第3木曜日
setSchedule("ダンボール回収", 4, 1);
setSchedule("ダンボール回収", 4, 3);
}
/**
* 各曜日の最初の日を取得
* @param {number} _firstWeek - 初月日の週(getDayで取得)
* @return {Array} 各曜日の最初の日
*/
function getWeekFirstDays(_firstWeek) {
let firstDays = []; // 各曜日の最初の日
for (var i = 0; i < 7; i++) {
if (i < _firstWeek) {
day = 7 - _firstWeek + 1 + i;
} else {
day = 1 - _firstWeek + i;
}
firstDays.push(new Date(year, month, day));
}
console.log(firstDays);
return firstDays;
}
/**
* 各曜日の最初の日を取得
* @param {Date} _date - 加算対象の日付
* @param {number} _day - 加算する日にち
* @return {Date} 加算後の日付
*/
function addDay(_date, _day)
{
var res = new Date();
res.setDate(_date.getDate() + _day);
return res;
}
/**
* スケジュールを追加する
* @param {String} _name - スケジュール名
* @param {number} _weekday - 登録する曜日(0:日曜, 1:月曜 ... 6:土曜)
* @param {number} _count - 第N曜日のN
* @return void
*/
function setSchedule(_name, _weekday, _count)
{
console.log("[INFO]追加する予定: " + _name);
console.log("[INFO]追加する日付: " + addDay(firstDays[_weekday], 7 * (_count - 1)));
calendar
.createAllDayEvent(
_name
, addDay(firstDays[_weekday] , 7 * (_count - 1))
)
}
その後、処理を開始する関数を「main」に設定してください。
実行を押下して、Googleカレンダーを確認すると、
第2, 第4水曜日と木曜日にそれぞれスケジュールが追加されているはずです。
追加するスケジュールはコード内の18~24行目で設定しています。
// 瓶、缶ゴミ 第2, 第4水曜日
setSchedule("瓶、缶ゴミ", 3, 2);
setSchedule("瓶、缶ゴミ", 3, 4);
// 不燃ゴミ 第2, 第4木曜日
setSchedule("不燃ゴミ", 4, 2);
setSchedule("不燃ゴミ", 4, 4);
こちらを設定したいスケジュールに合わせて変更してください。
設定する引数の値はsetScheduleのアノテーションをご確認ください。
設定例
第2日曜日に「資源ごみ」を追加する場合
setSchedule("資源ごみ", 0, 2);
第3金曜に「お茶」を追加する場合
setSchedule("お茶", 5, 3);
毎月1日に実行するように設定する
GASのトリガー機能より、毎月1日に実行されるように設定を行います。
左パネルよりトリガーを選択
右下の「トリガーを追加」を選択
下記の値を参考に設定を行えば、月初1日にカレンダーの登録が行われます。
参考にした記事
Google Apps Scriptで特定月のカレンダーのイベント情報を取得する
以上
コメント