0

実行に時間がかかりすぎるスクリプトに関数 (たとえば f1 と呼ばれる) があります (スプレッドシートでは、setformula transpose importrange と query を使用します。実行には約 2 分かかります)。

F1 を使用して 2 つのスプレッドシートを結合し、 を使用して 2 番目のスプレッドシートのいくつかの列に結果を設定しsetformula()ます。

この関数を夜間に (トリガーを使用して) 実行するようにスケジュールしましたが、誰かがそれを開くたびに、関数は再び実行されます (同じデータを処理します)。void onload() 関数を配置しようとしましたが、呼び出していなくても f1 も実行されています。

スプレッドシートを開いたときではなく、1 日に 1 回関数を実行する方法はありますか?
関数がスケジュールを再実行するまで、1 日中結果をキャッシュする方法はありますか?
または、スプレッドシート全体の値 (セルに含まれる数式ではない) を別のスプレッドシートにコピーする方法はありますか (ドキュメントでこれを見つけられませんでした)。
または、他の回避策はありますか?

手伝ってくれてありがとう

ロイク

4

1 に答える 1

1

関数が数式として呼び出された場合、誰かがスプレッドシートを開くたびに、また他の状況でも、関数は再計算されます。

あなたができることは、あなたが提案したように、データをキャッシュし、キャッシュされたデータをすぐに返すことです。これらの行に何か。

var ONE_DAY = 24 * 60 * 60 * 1000;

function f1(parameters, force){
  var returnVal = CacheService.getPrivateCache().get('somevariablename'); 
  if (force == true || returnVal == null) {
    /* Do your long drawn calculation here */
    CacheService.getPrivateCache.put('somevariablename, value, ONE_DAY);
  }
  else {
    return returnVal;
  }
}

そして、スプレッドシートで関数を次のように呼び出します

  =f1(parameters, false)
于 2012-09-22T12:37:28.410 に答える