質問: "済"; } sheet.getRange(1, 1, dat.length, dat[0].length).setValues(dat); }
回答: フォームの説明を読む限り、スプレッドシートにはあるがカレンダーには無いケース(間違えて送信したためカレンダーから削除した場合)があるようなので、重複はカレンダーをチェックすればよいかと思います。 以下サンプルですが、未検証なので調整が必要かも。 ``` /** * カレンダーに重複するイベントが登録済みか調べる。 * * @param {GoogleAppsScript.Calendar.Calendar} calendar 重複チェックするカレンダー * @param {string} title イベントタイトル * @param {Date} startDate 開始日 * @param {Date} endDate 終了日 * @param {string} description 説明 * @returns {boolean} 重複する場合は true を、それ以外の場合は false を返す。 */ function isDuplicated(calendar, title, startDate, endDate, description) { const startTime = startDate.getTime(); const endTime = endDate.getTime(); return calendar.getEventsForDay(startDate).some(event => { if (event.getTitle() !== title) return false; if (event.getStartTime().getTime() !== startTime) return false; if (event.getEndTime().getTime() !== endTime) return false; if (event.getDescription() !== description) return false; return true; }); } ``` 使い方は、こんな感じで。 ``` if(isDuplicated(myCal, title, startDate, endDate, options.description)) { GmailApp.sendEmail(email, "タイトル", "本文"); dat[i][1] = "済"; continue; } ```