予約をカレンダーに反映するGASを作っているのですが、カレンダーに反映したところで下記のようなエラーメッセージが出てしまいます。
本来であれば、カレンダーへ反映後に重複を回避するためにIDと『済』を入れるはずなのですが、そこまで完了することができませんでした、
調べたところUtilities.sleep(1000) などを使うとよい、といった内容を見つけられましたが、for文内にUtilities.sleep(1000) を入れたところ時間超過でGASが停止してしまい希望の動作はできませんでした。
尚、コースは2種類だけなのでコースAとコースBだけという前提です。
また、男女で料金が違うため、見やすいようにカレンダーをコースと男女で分け、4種使っております。
解決方法など分かりましたら是非教えていただきたく存じます。
また、GASのタイマーを使いこちらのコードは1時間おきに行う予定です。
(予約シート)
|タイムスタンプ|お名前|性別|電話番号|人数|予約日時|来店時間|要望|ID|反映|初来店かどうか|年齢|予約内容
|:--|:--:|--:|
|2020/07/05|あああ|男|09000000000|1|2020/07/07|20:00|人数が増えるかもしれない|||初|30|コースA|
エラーメッセージ
Exception: 短時間に作成したカレンダーまたはカレンダーの予定の数が多すぎます。しばらくしてからもう一度お試しください。
本コード
1 2/* 指定月のカレンダーからイベントを取得する */ 3function addTaskEvents() { 4 5 var myCal1 = CalendarApp.getCalendarById('xxxxxxxxxxx@group.calendar.google.com'); //カレンダーIDでカレンダーを取得 6 var myCal2 = CalendarApp.getCalendarById('aaaaaaaaaa@group.calendar.google.com'); //カレンダーIDでカレンダーを取得 7 var myCal3 = CalendarApp.getCalendarById('bbbbbbbbbb@group.calendar.google.com'); 8 var myCal4 = CalendarApp.getCalendarById('ccccccccccc@group.calendar.google.com'); 9 10 var objSpreadsheet = SpreadsheetApp.getActiveSpreadsheet(); 11 var mySheet = objSpreadsheet.getSheetByName("予約反映"); 12 var dat = mySheet.getDataRange().getValues(); //シートデータを取得 13 14 var targetColum="D"; 15 // 16 var values=mySheet.getRange(targetColum+":"+targetColum).getValues(); 17 18 for(var e=1;e<values.length;e++){ 19 var val=values[e]; 20 var check=String(val).substring(0,1); 21 //0スタートでない数字は対象とする 22 if(/[1-9]/.test(check)){ 23 //対象セル取得 24 var cell=sheet.getRange(targetColum+(e+1)); 25 //書式なし設定を対象セルに適用 26 cell.setNumberFormat('@'); 27 //消えた0を追加 28 cell.setValue("0"+val); 29 } 30 } 31 32 33 34 for(var i=1;i<dat.length;i++){ 35 if(dat[i][8] == ""){ 36 37 /* 日時をセット */ 38 var evtDate = new Date(dat[i][5]); 39 var evtTime = new Date(dat[i][6]); 40 evtDate.setHours(evtTime.getHours()); 41 evtDate.setMinutes(evtTime.getMinutes()); 42 var gender = dat[i][2] 43 var Phone = dat[i][3] 44 var Ninzu = dat[i][4] 45 var Shoken = dat[i][10] 46 var Age = dat[i][11] 47 var contents = dat[i][12] 48 49 50 var options = {description: Phone +'\r'+ Age + "歳" +'\r'+ dat[i][7] }; 51 52 53 /* イベントの追加・スプレッドシートへの入力 */ 54 if(contents == "コースA"){ 55 if(gender == "女"){ 56 var myEvt = myCal4.createEvent(dat[i][1]+Ninzu,evtDate,evtDate,options); 57 58 }else{var myEvt = myCal3.createEvent(dat[i][1]+Ninzu,evtDate,evtDate,options); 59 60 } 61 62 }else{ 63 if(gender == "女"){ 64 var myEvt = myCal1.createEvent(Shoken + dat[i][1]+Ninzu,evtDate,evtDate,options); //カレンダーにタスクをイベントとして追加 65 66 }else{ 67 var myEvt = myCal2.createEvent(Shoken + dat[i][1]+Ninzu,evtDate,evtDate,options); //カレンダーにタスクをイベントとして追加 68 } 69 70 } 71 72 73 dat[i][8]=myEvt.getId(); //イベントIDを入力 74 dat[i][9]='済'; 75 } 76 } 77 mySheet.getRange(1,1,i,13).setValues(dat); //データをシートに出力 78} 79
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/20 16:15