前提
お客様からキャンセルメールがあってキャンセル処理をした際、カレンダー上でキャンセル処理ができているかチェックするシステムを作成しています。
問題
キャンセル処理がされている(カレンダーのタイトルに「キャンセル」と記載されている)場合はOKとするようにコードを書いているのですが、同時間帯に同じお名前でご予約をいただいてしまうとそちらを拾ってキャンセル処理がされていないものとしてみなされてしまいます。
該当のソースコード
GAS
1function calendar(){ 2 3//スプレッドシート情報 4var ss = SpreadsheetApp.getActiveSpreadsheet(); 5var sheet = ss.getSheetByName('シート1'); 6var rows = sheet.getLastRow(); 7 8//照合する日時 9var today = new Date(); 10var customers = []; 11 12for(var i = 2; i <= rows; i++){ 13var date = sheet.getRange(i,2).getValue() 14var enddate = sheet.getRange(i,4).getValue() 15var starttime = new Date(date); 16var endtime = new Date(enddate); 17 18if(starttime.getTime()>=today.getTime()){ 19//カレンダー情報 20var calendar = CalendarApp.getCalendarById('sokichi.asakusa@gmail.com'); 21var events = calendar.getEvents(starttime,endtime); 22 23//カレンダーと照合したい人の名前 24var name = sheet.getRange(i,3).getValues(); 25 26//カレンダーから同時間帯のイベントを抽出 27events.forEach(function(event){ 28 var title = event.getTitle();//タイトル 29 var titlename = title.split('様');//タイトルから人数を抜いて名前だけに 30 var cancel = ('キャンセル'); 31 var changedate = (/日程変更/); 32 var changetime = (/時間変更/); 33var check = titlename[0].toString().indexOf(cancel);//キャンセルのイベントだけを抽出 34var check1 = titlename[0].toString().indexOf(changedate);//日程変更 35var check2 = titlename[0].toString().indexOf(changetime);//時間変更 36//照合結果 37if(check !== -1 || check1 !== -1 || check2 !== -1){//もしそれがキャンセルなどのイベントなら 38 var titlematch = title.toString().match(name); 39 }else if(title.toString().indexOf(name) == -1){ 40 Logger.log(name); 41 }else{ 42 43var date = Utilities.formatDate(new Date(starttime), 'Asia/Tokyo', 'yyyy/MM/dd HH:mm'); 44 customers.push([date,title]);
試したこと
メールの名前からカレンダーのタイトルを照合したりカレンダーのタイトルからメールの名前を照合したりしましたがうまく行きません。
よろしくお願いします。
あなたの回答
tips
プレビュー