前提・実現したいこと
Gasを用いて、装置の予約フォームを作製しようとしています。
フォームのスプレッドシートからカレンダーに追加という動作の中で、
カレンダーを参照→タイトルとイベントを取得→同一時刻・同一装置での予約があった場合にメールを送るという部分で手詰まっています。
発生している問題・エラーメッセージ
①「オブジェクト Calendar で関数 gettitle が見つかりません。」というメールが届きます。
② そもそもカレンダーに予定が追加されません(スプレッドシートには登録されています)
ソースコード
function sendToCalendar(e) {
try{
//Googlesプレッドシートを開く
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
//新規予約された行番号を取得
var num_row = sheet.getLastRow();
//新規予約された行から名前を取得
var nname = sheet.getRange(num_row, 3).getValue();
//メールアドレスの取得
var nmail = sheet.getRange(num_row,2).getValue();
//予約を記載するカレンダーを取得
var cals = CalendarApp.getCalendarById("aaaa-u.ac.jp-aaaaaaa.calendar.google.com");
//予約の開始時間を取得
var stime = new Date(sheet.getRange(num_row, 6).getValue());
//予約の装置名を取得
var nMachine = sheet.getRange(num_row, 4).getValue();
//予約の終了時間を取得
var etime = new Date(sheet.getRange(num_row, 7).getValue());
var ndate = new Date(sheet.getRange(num_row, 5).getValue());
var ndates= new Date(ndate.getFullYear(),ndate.getMonth(),ndate.getDate(),stime.getHours(),stime.getMinutes(),0);
var ndatee= new Date(ndate.getFullYear(),ndate.getMonth(),ndate.getDate(),etime.getHours(),etime.getMinutes(),0);
// 先約の有無
var calEvents = cals.getEvents(ndates, ndatee);
var caltitle = cals.gettitle(nMachine);
// カレンダーに登録がないためそのまま登録可
if (calEvents.length === 0) {
//予約情報をカレンダーに追加
var r = cals.createEvent(thing, ndates, ndatee);
var thing =nname+" \n\n 予約に成功しました。"
MailApp.sendEmail(nmail,"予約完了",thing);
}
// カレンダーにイベントがあるので、装置に重複がないかチェック
else {
isEmpty = true;
for (var i in calEvents) {
var event = calEvents[i];
if (event.gettitle() === nMachine) { isEmpty = false; break; }
}
// カレンダーに同一装置で登録がないため登録可
if (isEmpty) {
//予約情報をカレンダーに追加
var r = cals.createEvent(thing, ndates, ndatee);
var thing =nname+" \n\n 予約に成功しました。"
MailApp.sendEmail(nmail,"予約完了",thing);
}
// カレンダーに同時刻同一装置で登録があるため登録不可
else {
var thing =nname+" \n\n 予約に失敗しました。\n\n 日時と時間を確認してください"
MailApp.sendEmail(nmail,"予約失敗のお知らせ",thing);
}
}
} catch(exp){
//実行に失敗した時に通知
MailApp.sendEmail(nmail, exp.message, exp.message);
}
}
試したこと
装置の重複チェックに問題があるのかと考えて、
if(cals.getEvents(ndates, ndatee)==0){
var thing = nMachine;
var r = cals.createEvent(thing, ndates, ndatee);
のみに書き直して実行すると正常に動作しました。そのため、問題点はfor文の辺りにあると分かったのですが、どこを修正すれば良いか分かりません。ご教授お願いします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/07/09 08:18
2018/07/09 08:47