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

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

新規登録して質問してみよう
ただいま回答率
85.47%
Google Apps Script

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

タイムアウト

タイムアウトはイベント発生から完了までに掛かる経過時間に対する一定の待ち時間を指します。また、特定の時間が経過された場合に発生するイベントを指すこともあります。

Q&A

0回答

139閲覧

タイムアウトエラーを回避したい

nagamoso

総合スコア0

Google Apps Script

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

タイムアウト

タイムアウトはイベント発生から完了までに掛かる経過時間に対する一定の待ち時間を指します。また、特定の時間が経過された場合に発生するイベントを指すこともあります。

0グッド

2クリップ

投稿2024/03/26 03:17

編集2024/03/26 04:27

実現したいこと

タイムアウトエラーを回避し、ページ内のチェックがすべて終わるまで、繰り返し処理が行われるようにしたい。

発生している問題・分からないこと

GASが5分半で処理を停止し、次の処理を行ってくれない

エラーメッセージ

error

1エラーメッセージはなし

該当のソースコード

GAS

1function MaterialCheck() { 2 let startTime = new Date(); 3 4 //各ページを取得 5 const ss = SpreadsheetApp.getActiveSpreadsheet(); 6 const sheetS = ss.getSheetByName("アイテム所持数") 7 const sheetM = ss.getSheetByName("必要素材シート1") 8 const sheetK = ss.getSheetByName("必要素材シート2") 9 const sheetT = ss.getSheetByName("必要素材シート3") 10 let charaSheet = [sheetM,sheetT,sheetK] 11 12 //所持素材リストのどの行を使うか 13 let charaRows = [2,3,4] 14 let creatCheck = new Array() 15 let rowCheck = new Array() 16 17 let startPage = Number(PropertiesService.getScriptProperties().getProperty('nextr')); 18 let startRow = Number(PropertiesService.getScriptProperties().getProperty('nexti')); 19 if (!startRow) startRow = 4; // もしstartIndexがnullの場合は1を代入 20 if (!startPage) startPage = 0; // もしstartIndexがnullの場合は1を代入 21 22 23 for(let r = startPage; r <= 3; r++){//むくたいかきのページと行の切り替え 24 for(i = startRow; i <= charaSheet[r].getLastRow(); i++){ 25 Logger.log(i) 26 Logger.log(r) 27 28 charaSheet[r].getRange(i,1).setBackground("#FFFFFF") 29 let currentTime = new Date(); // ②ループx周目時点の日時 30 let seconds = (currentTime - startTime)/1000; // 経過秒数を計算(①と②の差分) 31 32 if(charaSheet[r].getRange(i,1).getValue() != "⚫︎"){ //左に⚫︎が入ってる場合行をスルー 33 for(j = 3; j <= charaSheet[r].getLastColumn(); j++){ 34 35 if(charaSheet[r].getRange(i,j).getValue() != "" && charaSheet[r].getRange(i,j).getBackground() != "#4285f4"){ 36 creatCheck[i - 1] = "" 37 break 38 }else if(j >= charaSheet[r].getLastColumn()){ 39 creatCheck[i - 1] = "◯" 40 41 } 42 } 43 }else{ 44 creatCheck[i - 1] = "⚫︎" 45 } 46 47 if(seconds > 300){ 48 // 次回のチェック対象 49 let nextPage = r; 50 let nextRow = i + 1; 51 if (nextRow > charaSheet[r].getLastRow()) { 52 nextPage++; 53 nextRow = 4; 54 } 55 56 // トリガーを設定 57 PropertiesService.getScriptProperties().setProperty('nextr', nextPage); 58 PropertiesService.getScriptProperties().setProperty('nexti', nextRow); 59 setTrigger(); 60 61 // 300秒経過したらreturnして強制的に実行を中断する 62 return; 63 } 64 } 65 startRow = 4 66 } 67 68 // 全ての素材をチェック完了 69 Logger.log('全ての素材をチェック完了しました。'); 70} 71 72 73function setTrigger() { 74 let triggers = ScriptApp.getProjectTriggers() 75 for(let trigger of triggers){ 76 if(trigger.getHandlerFunction() == "MaterialCheck"){ 77 ScriptApp.deleteTrigger(trigger); 78 } 79 } 80 81 // 1分後にトリガーをセット(1分 = 60秒 = 1秒*60 = 1000ミリ秒 * 60) 82 ScriptApp.newTrigger("MaterialCheck").timeBased().after(1000 * 60).create(); 83} 84

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

検索したところ、V8ランタイムにバグがあるとのことだったので無効化してみたが、ソースコードを変更する必要があったので断念。

スプレッドシート上のApp Script画面上の「実行」ボタンから実行するのではなく、デプロイしURLから実行するといけるとの情報があったので試してみたが、URLから実行できず。
一応、図形にスクリプトを割り当ててそこから実行もしてみたができず。

補足

特になし

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

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

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

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

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

nagamoso

2024/03/26 04:28

つけようと思い探したのですが、「GAS」で探していて「ないのか……」と思っておりました。 ご助言ありがとうございます!
m.ts10806

2024/03/26 04:30

確かに普段略称だと気づきにくいですね(前方一致で検索する機能の場合はほんとに・・)
YellowGreen

2024/03/26 08:27 編集

エラーメッセージなしとしていますが、 スクリプトエディタの実行数からログを確認されていますか。 それと、 for(let r = startPage; r <= 3; r++){//むくたいかきのページと行の切り替え となっていますが、 let charaSheet = [sheetM, sheetT, sheetK] なので、rの取り得る値は、0,1,2までなのではないでしょうか。 for(let r = startPage; r < 3; r++){//むくたいかきのページと行の切り替え としてみてはどうでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問