--<2回目の回答>--
当初提示いただいたスクリプトは、勤務日に'年'や'月'が含まれている記述式の回答を前提としていましたが、
追加していただいた画像にあるように、日付、時刻として回答を得ているということですね。
そうであれば、もう少し簡単になります。
まず、重ねて発生しているエラーを防止するために、
スクリプトの冒頭に次のコードを追加します。
js
1function createEvent(e) {
2 //エラー防止のため、以下の5行を追加
3 if (e === undefined) {
4 console.log('このスクリプトは、エディタから実行できません。');
5 console.log('フォームに回答してみてください。');
6 return;
7 }
次に、日付と時刻の処理を次のようにします。
js
1 // let hoursS = Number(time1.split(':')[0]);
2 // let minutesS = Number(time1.split(':')[1]);
3 // let hoursE = Number(time2.split(':')[0]);
4 // let minutesE = Number(time2.split(':')[1]);
5 // let startTime = new Date(y, m, d, hoursS, minutesS);
6 // let endTime = new Date(y, m, d, hoursE, minutesE);
7 let startTime = new Date(date + ' ' + time1);//' 'の中は、半角スペース
8 let endTime = new Date(date + ' ' + time2);
最後に、カレンダーへの反映の変数名を再修正します。
js
1 // Calendar.createEvent(title, startTime, endTime);
2 calendar.createEvent(title, startTime, endTime);
なお、フォームの送信から起動するスクリプトは、時々送信時の値を取得できないことが
ありますので、カレンダーに反映されていないときは、時間をおいて再度お試しください。
エディタの実行数からトリガー実行に失敗したログをクリックすると
エラーメッセージにもそのように記載されています。
Exception: Failed to retrieve form data. Please wait and try again.
--<最初の回答>--
勤務日、開始時間、終了時間共に記述式で、年は2023年4月12日、時間は9:30と入力するのですね。
修正が必要なところがいくつかあります。
なお、このスクリプトはフォームの送信をトリガーにして起動するものなので、
エディタから実行すると e の値が undefined なのでエラーになります。
できるだけ元のスクリプトに沿った形で修正する場合の例です。
回答の内容を得るには、質問が勤務日、開始時間、終了時間の3つの場合、
js
1 // let [timestamp, date, time1, time2] = e.values;
2 const items = [];
3 const itemResponses = e.response.getItemResponses();
4 for (const itemResponse of itemResponses) {
5 items.push(itemResponse.getResponse());
6 }
7 let [date, time1, time2] = items;
のようにします。timestampは取得できませんし使っていません。
時間の取得も開始時間、終了時間をそれぞれ加工するようにして、
js
1 // let hours = Number(time1, time2.split(':')[0]);
2 // let minutes = Number(time1, time2.split(':')[1]);
3 // let startTime = new Date(y, m, d, hours, minutes);
4 // let endTime = new Date(y, m, d, hours, minutes);
5 let hoursS = Number(time1.split(':')[0]);
6 let minutesS = Number(time1.split(':')[1]);
7 let hoursE = Number(time2.split(':')[0]);
8 let minutesE = Number(time2.split(':')[1]);
9 let startTime = new Date(y, m, d, hoursS, minutesS);
10 let endTime = new Date(y, m, d, hoursE, minutesE);
また、カレンダーへの反映もoptionは設定されていないのと、
CalendarAppではなく、ご自身で指定したCalendarへの反映ですから、
js
1 // CalendarApp.createEvent(title, startTime, endTime, options);
2 Calendar.createEvent(title, startTime, endTime);