前提・実現したいこと
Googleフォームで出席・欠席申告フォームを作成しgoogleカレンダーに反映するプログラムを作成しております。 (初心者です)
Googleフォームからgoogleカレンダーに反映することはできたのですが、
ある人が当初、出席する予定だったのを欠席に変更した場合、出席の行を削除して
欠席の情報を入れられず困っています。
どなたかご教示いただけないでしょうか?
<googleカレンダー 予定の詳細(例)>
山田 太郎 出席 車 => OK
鈴木 一郎 午前のみ参加 車 => OK
山田 太郎 欠席 車 => NG
↑ googleフォームから入力後、山田太郎さんが出席だったのを欠席にした場合、出席の行を自動で削除したい。
よろしくお願いいたします。
該当のソースコード
GAS
1var CALENDAR_ID = “xxxxxxxxxxxxxxxxxx”; 2var EVENT_TITLE = “yyyyyyy_パパ欄"; 3 4var ITEM_KEY_DATE = "予定日"; 5var ITEM_KEY_PLAYER = "パパ名"; 6var ITEM_KEY_CONTENT = "内容"; 7var ITEM_KEY_CAR = "車出し"; 8var ITEM_KEY_MEMO = "伝言"; 9 10/** 11 * カレンダーにイベントを追加する 12 * @param e 13 */ 14function addCalendar(e) { 15 // 入力項目の取得 16 var responses = e.response.getItemResponses(); 17 var messages = []; 18 var items = {}; 19 var date = null; 20 for (var i=0; i<responses.length; i++) { 21 var response = responses[i]; 22 var key = response.getItem().getTitle(); 23 var value = response.getResponse(); 24 25 if (key==ITEM_KEY_DATE) { 26 date = value.replace(/-/g, "/"); 27 items[key] = getDate(new Date(date)); 28 } else { 29 messages.push(value); 30 items[key] = value; 31 } 32 } 33 34 /// 既に予定があるかを確認する 35 var scheduled_date = new Date(date); 36 var calendar = CalendarApp.getCalendarById(CALENDAR_ID); 37 var events = calendar.getEventsForDay(scheduled_date); 38 var description = ""; 39 for (var i=0; i<events.length; i++) { 40 var event = events[i]; 41 var title = event.getTitle(); 42 //var player = ITEM_KEY_PLAYER 43 if (title == EVENT_TITLE) { 44 45 description = event.getDescription() + "\n" + messages.join(" "); 46 event.setDescription(description); 47 48 49 break; 50 } 51 } 52 53 //予定が無い場合は新規作成 54 if (!description) { 55 calendar.createAllDayEvent(EVENT_TITLE, scheduled_date, {description:messages.join(" ")}).setGuestsCanSeeGuests(false); 56 } 57 58} 59 60function getDate(date) { 61 var d = []; 62 d.push(date.getFullYear()); 63 d.push(date.getMonth()+1); 64 d.push(date.getDate()); 65 return d.join('/'); 66} 67
試したこと
/// 既に予定があるかを確認するの行の
description = event.getDescription() + "\n" + messages.join(" ");の下に
以下の文を入れて見たのですが、うまく行きませんでした。
var splitText = description.split("\n"); // 改行毎に抜き出す
for (var n=0; n<splitText.length; n++) {
for (var x=1; x<splitText.length - n; x++) {
if (splitText[n].substr(1,3)== splitText[n+x].substr(1,3)) {
splitText.splice(n,1); // 削除的ななにか
break; //
}
}
}
//description = splitText.replace(",","\n")
event.setDescription(splitText);
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/03/28 05:14
2021/03/28 06:15
2021/03/28 06:59