現状
AppSheetとGASを利用して家事管理アプリを作成しています。
AppSheetでは1つのテーブル(≒スプレッドシート)につき1つしかカレンダー表示ができないため、GASを使って2つのスプレッドシート(家事ログ&買い物ログ)をひとつのGoogleカレンダーに集約し、そのカレンダーをAppSheetのアプリ上に表示する方法をとっています。
問題
自動でスプレッドシートに追加された行をGoogleカレンダーに反映させるところまでは上手くいったのですが、既に追加された予定についてスプレッドシートに変更を加えても当然ですがGoogleカレンダーには反映されません。
質問
スプレッドシート上で日時を変更した際にGoogleカレンダーの予定も変更できるようにしたいのですが、何か良い方法はありますでしょうか?
以下、該当箇所のGASのコードとスプレッドシートです。
家事ログスプレッドシート
家事ログID | 家事ID | 家事名 | 日時 | カレンダーID |
---|---|---|---|---|
***** | ****** | 洗濯 | 2022/03/19 16:00 | ***@gmail.com |
買い物ログスプレッドシート
買い物ログID | 商品ID | 商品名 | 購入日 | カレンダーID |
---|---|---|---|---|
***** | ****** | 醤油 | 2022/03/19 00:00 | ***@gmail.com |
GASコード
Javascript
1function registerCalendar1() { 2 var calendar = CalendarApp.getCalendarById(`**********@group.calendar.google.com`); 3 var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); 4 var sheet = spreadsheet.getSheetByName(`買い物ログ`); 5 var lastRow = sheet.getLastRow(); 6 var contents = sheet.getRange(`C2:E${lastRow}`).getValues() 7 8 for(var i=0; i < contents.length; i++){ 9 var[title, day, status] = contents[i]; 10 if(status == ""){ 11 var date = new Date(day) 12 var category = "買い物"; 13 var event = calendar.createAllDayEvent(title,date,{description:category}); 14 var eventId = event.getId(); 15 sheet.getRange(`E${i + 2}`).setValue(eventId); 16 } 17 } 18} 19 20function registerCalendar2() { 21 var calender = CalendarApp.getCalendarById(`**********@group.calendar.google.com`); 22 var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); 23 var sheet = spreadsheet.getSheetByName(`家事ログ`); 24 var lastRow = sheet.getLastRow(); 25 var contents = sheet.getRange(`C2:E${lastRow}`).getValues() 26 27 for(var i=0; i < contents.length; i++){ 28 var[title, daytime, id] = contents[i]; 29 if(id == ""){ 30 var datetime = new Date(daytime) 31 var category = "家事"; 32 var event = calender.createEvent(title,datetime,datetime,{description:category}); 33 var eventId = event.getId(); 34 sheet.getRange(`E${i + 2}`).setValue(eventId); 35 } 36 } 37}
回答2件
あなたの回答
tips
プレビュー