Google スプレッドシート | Apps ScriptでsetInterval()を使う方法
Google スプレッドシートでApps Script内でsetInterval()
関数やsetTimeout()
関数は破棄されていて使えませんが、独自にsetInterval()
関数を作成して使う方法を実装してみましたので簡単なサンプルコードを紹介しています。
setInterval()
の代わりにScriptApp.newTrigger()
が用意されていますが、これは最短で分単位の実行しかできません。
秒以下での更新処理は避けた方が良いと考えますが、これにより1秒おきにセルを更新するといった事ができます。
Apps ScriptでsetInterval()を使うサンプルコード
Apps ScriptのコードでsetInterval()
関数を新たに作成した場合、以下のようなスクリプトになりました。setInterval()
という関数名を付けてもエラーにならなかったので付けていますが、名前はなんでも良いです。
SpreadsheetApp.flush()
が重要です。
function setInterval(func, interval, count) {
for (let i = 0; i <= count; i++) {
Utilities.sleep(interval)
SpreadsheetApp.flush()
eval(func)
}
}
呼び出し時は、元々のsetInterval()
関数に極力近づけようと励みましたが、今のところ以下のような感じになりました。
このコードでは第3引数に実行回数を指定して終了するようにしています。
また、GASの制限で実行開始してから最大6分経過でスクリプトは処理を停止するはずです。
setInterval(`実行する関数`, インターバル時間, 繰り返し回数)
関数など | 概要 |
---|---|
Utilities.sleep(ミリ秒) | スクリプトを停止する遅延時間 |
SpreadsheetApp.flush() | シートをリフレッシュする |
eval(func) | 文字列の呼び出し関数を関数として実行する |
例えば、以下のように引数を指定して現在時刻の更新を1秒おきに実行する関数を実装します。
setRealTime()
では現在時刻をリアルタイムに表示させています。
function setRealTime(sheet_name, row, col) {
let sheet = SpreadsheetApp.getActive().getSheetByName(sheet_name)
let cell = sheet.getRange(row, col)
cell.setValue(new Date())
}
setInterval(`setRealTime('シート1', 1, 1)`, 1000,10)
以下は上記サンプルコードで利用している関数などについてまとめています。
ディスカッション
コメント一覧
まだ、コメントがありません