このページの翻訳:
- 日本語 (ja)
- English (en)
最近の更新
- 02 Apache2で自己認証ssl [中間証明書の整合性確認]
最近の更新
GASでは6分以上スクリプトを実行できない。
そこで6分を超えそうなら、トリガーへ渡してトリガーから実行を繰り返す事で6分を超えて実行可能です。
03 GAS Properties Service グローバル変数のように利用(永続化) をカウントに利用する。
トリガー制限にもあるので注意
処理の自動化のために時間等でトリガーを設定することも多いかと思いますが、このトリガーにも制限があります。
対象 | 無料アカウント | Google Workspace |
---|---|---|
トリガーの総実行時間 | 90 分 / 日 | 6 時間 / 日 |
トリガー数 | 20 / ユーザー / スクリプト | 20 / ユーザー / スクリプト |
これで10秒スリープしながら、30回スプレッドシートへ1行づつ文字を挿入していく
30秒を超えるようなら、countへ行数を保存しつつトリガーへ設定して実行させる。
設定したトリガーは5秒後に実行される。
const ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); var scriptProperties = PropertiesService.getScriptProperties(); var MAX_RUNNING_TIME = 30000; //スクリプト実行時間(ミリ秒) 30秒 var REASONABLE_TIME_TO_WAIT = 5000; //トリガー実行までの時間 5秒後 function main(){ // トリガー制限にかからないようトリガーを削除 deletedTriggers(); // countを1にしておく scriptProperties.setProperty(039;count039;, 1); runProccess(); } function runProccess() { var count = scriptProperties.getProperty("count"); if(!count){ count = 1 } var startTime= (new Date()).getTime(); for(var i = Number(count); i <= 30; i++) { var currTime = (new Date()).getTime(); Logger.log(039;i 039;+i+039; 039;+(currTime - startTime)); if(currTime - startTime >= MAX_RUNNING_TIME) { // 時間がなければトリガーセット setTrigger(currTime,i) break; }else{ var array = [[039;てすとメッセージ039;,039;実行行:039; + i]]; sheet.getRange(i,1,1,2).setValues(array).setFontWeight("bold"); ss.toast(ii + "/30" + 039;実行中039;, 039;進行状況039;,0); Utilities.sleep(10000); // 時間があれば実行 if( i == 30){ sheet.getRange(039;A3039;).setValue(039;完了039;); } } } } function setTrigger(time, triggerValue){ scriptProperties.setProperty(039;count039;, triggerValue); ScriptApp.newTrigger("runProccess") .timeBased() .at(new Date(time+REASONABLE_TIME_TO_WAIT)) .create(); Logger.log(039;トリガーセット完了039;); ss.toast(039;続きの処理をトリガーで処理しています。039;, 039;進行状況039;, -1); } function deletedTriggers(){ var triggers = ScriptApp.getProjectTriggers(); Logger.log(039;トリガー数: 039; + triggers.length); triggers.forEach(function(trigger){ // Logger.log(trigger.getHandlerFunction()); if(trigger.getHandlerFunction() == 039;runProccess039;){ ScriptApp.deleteTrigger(trigger) } }); }