このエラーが常に発生するAppsスクリプトがあります。通知メールで判断すると、制限時間は5分です。この時間制限を延長する方法があるかどうか誰もが知っていますか?または、Apps Scriptを再度呼び出して、中断したところから再開する方法があるのでしょうか。どんな助けも大歓迎です。
できることの1つ(これはもちろん、達成しようとしていることによって異なります):
これは万能のソリューションではありません。コードを投稿すれば、人々はより良い支援をすることができます。
これは、私が毎日使用しているスクリプトからの簡単なコードの抜粋です。
_function runMe() {
var startTime= (new Date()).getTime();
//do some work here
var scriptProperties = PropertiesService.getScriptProperties();
var startRow= scriptProperties.getProperty('start_row');
for(var ii = startRow; ii <= size; ii++) {
var currTime = (new Date()).getTime();
if(currTime - startTime >= MAX_RUNNING_TIME) {
scriptProperties.setProperty("start_row", ii);
ScriptApp.newTrigger("runMe")
.timeBased()
.at(new Date(currTime+REASONABLE_TIME_TO_WAIT))
.create();
break;
} else {
doSomeWork();
}
}
//do some more work here
}
_
注#1:変数_REASONABLE_TIME_TO_WAIT
_は、新しいトリガーを起動するのに十分な大きさでなければなりません。 (5分に設定しましたが、それよりも短い可能性があると思います)。
注#2:doSomeWork()
は、比較的高速に実行される関数でなければなりません(1分未満と言います)。
注#3:Googleは _Script Properties
_ を廃止し、代わりに _Properties Service
_ を導入しました。機能はそれに応じて変更されました。
また、Googleサービスへの呼び出しの量を最小限に抑えるようにしてください。たとえば、スプレッドシート内のセル範囲を変更する場合は、各セルを読み取らずに変更し、保存し直します。代わりに、( Range.getValues() を使用して)範囲全体をメモリに読み込み、それを変更し、一度にすべてを保存します( Range.setValues() を使用して)。
これにより、実行時間を大幅に節約できます。
アントン・ソラドイの答え は問題ないようですが、データを一時シートに保存する代わりに キャッシュサービスを使用することを検討してください。
function getRssFeed() {
var cache = CacheService.getPublicCache();
var cached = cache.get("rss-feed-contents");
if (cached != null) {
return cached;
}
var result = UrlFetchApp.fetch("http://example.com/my-slow-rss-feed.xml"); // takes 20 seconds
var contents = result.getContentText();
cache.put("rss-feed-contents", contents, 1500); // cache for 25 minutes
return contents;
}
また、2014年4月現在、 スクリプトランタイムの制限は6分です。
G Suite Business/Enterprise/Education and Early Accessユーザー:
2018年8月現在、これらのユーザーの最大スクリプトランタイムは30分に設定されています。
ScriptDBを使用して、ループ内で大量の情報を処理している間に場所を保存しました。スクリプトは、5分間の制限を超えることができます。各実行中にScriptDbを更新することにより、スクリプトはdbから状態を読み取り、すべての処理が完了するまで中断した場所を取得できます。この戦略を試してみてください。結果に満足するでしょう。
G Suite BusinessまたはEnterpriseエディションを使用している場合。 App Makerの早期アクセスを登録する App makerを有効にした後、スクリプト実行ランタイムにより実行時間が増加します6分から30分になります:)
アプリメーカーの詳細 ここをクリック