質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google カレンダー

Google カレンダーは、Google社が提供する無料のスケジュール管理ツールです。パソコンやスマートフォン、タブレットなどからアクセスし、スケジュールの追加・変更が可能。Googleアカウントがあれば誰でも使用できます。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

3261閲覧

GAS短時間に作成したカレンダーまたはカレンダーの予定の数が多すぎます。の解決策

nezumimuzen

総合スコア19

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google カレンダー

Google カレンダーは、Google社が提供する無料のスケジュール管理ツールです。パソコンやスマートフォン、タブレットなどからアクセスし、スケジュールの追加・変更が可能。Googleアカウントがあれば誰でも使用できます。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2020/07/05 10:59

編集2020/07/05 11:12

予約をカレンダーに反映する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: 短時間に作成したカレンダーまたはカレンダーの予定の数が多すぎます。しばらくしてからもう一度お試しください。

本コード

google

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

何件のイベントを追加しようとしたのでしょうか。1日の作成件数制限に引っかかってるのかもしれません。
@gmail.com アカウントの場合は1日に5000件までしか作成できません。(G Suite の場合は 10000件)

参考:Quotas for Google Services
https://developers.google.com/apps-script/guides/services/quotas

投稿2020/07/20 05:56

draq

総合スコア2577

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nezumimuzen

2020/07/20 16:15

draq様 回答ありがとうございます!! 指定シートを確認したところ、列1万を超える部分に記入があり(スプレッド関数とGASの書き込みが混ざったためと思われます)そのせいで空白の1万列をカレンダーに書き込みしようとしていたのかもしれません。 早速書き込みがあった部分を削除しスプレッド関数を使わずにGASのみで処理を行ったところ正常に動作いたしました! この度は誠にありがとうございました!!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問