【flush】保留中のセルに対する値・設定の反映処理を実行させる

GoogleAppsScript

【flush】メソッドは

保留中になっているためにセルに反映されていない値・設定を反映処理させることができるメソッド

です。

 

公式リファレンスの該当ページはこちら

 

flushメソッドの活用場面

保留中の処理とは一体どういうことでしょうか?例えば以下のコードを見てください。

 

こちらは10秒のカウントダウンをスプレッドシートのA1セルに表示させるスクリプトです。

for文で変数iに数値を1ずつ加算していき、それをA1セルに入力していきます。1ループごとにsetValueで値を入力するコードにしているため、これでカウントダウンを実装できている…と思いがちです。

では、実際にどのように動作するのか下のGIFで確認してみましょう。

 

なんと、最初の9秒間は1~9までの数字がまったく表示されず、10秒が経過した時にいきなり10が表示されました!

 

実は、Google スプレッドシートのセルに対する値や設定などの反映は、通常、スクリプト処理中には行われず、処理が終了したときにまとめて処理が反映されるのです。

 

今回のように、一度のスクリプトでひとつのセルの値が何度も変更される場合、変更されるたびに値を反映させてしまうと全体のスクリプト処理時間が伸びてしまいがちになってしまうためこのような仕様になっているのだと考えられます。

Google Apps Scriptのスクリプト最大処理可能時間は6分とされているため、なるべく早くプログラム処理を終了させられるようにしているのだと思います。

 

ですが、今回のカウントダウンプログラムのように処理中に何度も値を変更させたい場合にはこの仕様は足かせとなります。

そのため、セルにまだ反映されておらず保留中となっている値・設定の反映処理をさせるメソッドが用意されています。それがflushメソッドです。

 

下記のコードは先ほどのサンプルコードにflushメソッドを追加したものです。

 

flushメソッドを追加したことで、セルにsetValueメソッドを実行させた直後に値の反映処理をさせることができているため、下のGIFのようにちゃんとカウントダウンが実行されるようになります。

 

ちなみに、新規スプレッドシートファイルの作成、スプレッドシートのシート名の変更などセルに対する処理以外の処理については処理が保留になることはないようです。

 

クラス

【SpreadsheetAppクラス】

SpreadsheetApp.flush();と記述するだけで実行することができます。

 

記述方法

 

上記の記述方法が大きく変わることはありません。

flushメソッドを利用する回数が多く、SpreadsheetAppを何度も記述するのが好ましくない…という場合は、文字数の少ない変数にSpreadsheetAppを代入し、その変数からflushメソッドを利用する…場合は記述方法が変わりますが、そのようにすることはほとんどないでしょう。

 

戻り値

なし

flushメソッドは保留中の反映処理が行われるのみで戻り値はありません。

使用例

※後日追記予定

関連メソッド

以下のメソッドも確認しておくと、よりgetLastRowを活用することが可能です。(後日追加予定)

yoshi

JavaScript、Google Apps Scriptがメイン。Pythonもちょっとだけ。Google Apps Script開発、Pythonスクレイピングなどをする機会が多いです。ご依頼なども承っております。 記事内容についてのご意見・ご指摘などいただけますと幸いです。

シェアする

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

コメントする