web-dev-qa-db-ja.com

「x」時間ごとに別のシートから数値をインポートする方法はありますか?

2つのスプレッドシートをIMPORTRANGEにリンクします。たとえば、AとBをリンクします。Bがソースです。 Aには6時間ごとにBから数字をインポートしてほしい。なぜなら、Bの数字は絶えず動いているからであり、シートは本当に大きいので、シートAが遅くなるからだ。

それを行う方法はありますか?

2
jason

IMPORTRANGE関数は結果をキャッシュしないため、ソーススプレッドシートが変更されるたびに更新されます。

ただし、独自の関数を記述することでこれを回避できます。

function customImportRange(spreadsheetUrl, rangeStr, timestamp) {
  var sheet = SpreadsheetApp.openByUrl(spreadsheetUrl);
  var range = sheet.getRange(rangeStr);
  return range.getValues();
}

ツール→エディターをクリックしてこの関数をインストールし、コードを貼り付けて、実行ボタン。これにより、スクリプトに実行許可を与えるように求めるダイアログがポップアップ表示されます。

スクリプトはIMPORTRANGEとまったく同じですが、Google Apps Scripts関数であるため、Google Spreadsheetsは結果をキャッシュし、notフェッチします関数のパラメーターが変更されていない限り、新しいデータ。

つまり、timestampパラメーターを6時間ごとに変更して再取得をトリガーできることを意味します。つまり、6時間ごとに新しい値を生成する数式が必要になります。

セルB1=NOW()を配置し、セルC1に次の式を配置するとします。

=DATEVALUE(B1) * 10 + ROUNDUP(HOUR(B1) / 6)

セルC1には、6時間ごとに変わる数値が表示されるようになりました。つまり、関数への入力として使用できます。セルA2に次を入力します。

=customImportRange("https://docs.google.com/spreadsheets/d/1qFryUlGfGT8dp_lx9sSE_7suCV0t8cAg9btM1AOPnSI/edit#gid=0", "'Custom function'!A4:F6", C1)

パラメータは次のとおりです。

  1. ソーススプレッドシートの完全なURL
  2. 取得するデータの範囲表記
  3. キャッシュキー

スプレッドシートの例 を作成しました。これを実証するために、自由にコピーして実験してください。

スプレッドシートをブラウザで開いていないときにも更新するには、ファイル→スプレッドシート設定に移動して再計算から変更時および毎時間.

1
Vidar S. Ramdal