2022/06/11 Podcastはしばらくお休みします。
GASを使ったプログラムの実行途中で値を更新したいときの処理
こんにちは。安慶名勇子(アゲナユウコ)です。
表計算ソフトといえばExcel!という方もまだ多いかと思いますが、個人的にはExcelを使用する機会はかなり減りまして、Google Spreadsheetを主に使っています。何と言ってもGASでのプログラミングをしてしまえばいろいろと自動化できる点が魅力的。まぁ、Excelでも似たようなことはできますけど、使える環境の違いや使える関数、プログラムの記述のしやすさ…を考えると個人的にはGoogle Spreadsheetの方に軍配が上がるんですよね。
個人的な作業はもちろんのこと、お仕事としてGASのプログラム記述を請け負うこともあるわけですが、その際にも良く使用している、GASプログラム実行途中でのスプレッドシートの値の更新方法について、知っておくと便利なので記載しておきます。
おそらくGAS初心者が戸惑うところだと思うのですが、GASって、実行の最中はスプレッドシートの値がリアルタイムで更新されません。ちょっとしたタイムラグがあるんです。そのため、この現象を知らないでいると「正しくプログラムが動いているのに、なぜスプレッドシートには値が反映されないの!?」と頭を抱えることになるんですよね(経験談)。
この特性、どんな時に不具合が起こるかというと、例えば請求書を作成後にPDF出力するプログラム…なんか該当するのでは。本来であれば、請求書に必要な値を入力後、計算結果が正しく表示された状態で、PDFファイルの作成を行いたい。しかし、GASの実行中のタイムラグのせいで、計算結果が表示される前にPDF出力されてしまう…と。結果として、全く役に立たない請求書が出来上がってしまうわけですね。これじゃ使えない。
本来の目的を達成するには、計算結果が反映された後にPDFを出力しなければなりません。つまり、PDF出力処理の前に正しい情報に値を更新する処理を施さなければならないわけです。
といってもその方法は簡単で、値を更新したいタイミングの場所にこの1文を記載するだけ。
1 |
SpreadsheetApp.flush(); |
この部分が実行されたタイミングでスプレッドシートに値が反映されます。デバッグで確認するとわかりやすいので一度試してみてください。知っているのと知らないとでは結果に大きく差が出る1文です。
Google Apps Script 公式サイトも掲載されているのでぜひ参考にしてください。