前提・実現したいこと
Google App Scriptとスプレッドシートを使ってアニメーション(マッピング)を作成したいです。
そのために、下記(1)(2)を実施したいです。
######(1) GAS側で実施したいこと
GAS側では、任意のSheetのA2セルに、特定の日付(たとえば7/1)から始めて、7日後(たとえば7/8)までの各日付を3秒毎に書き込んでは更新するプログラムを書きたいです。
たとえば、人間がスプレッドシートを見た際に
7/1を3秒間表示→7/2を3秒表示→7/3を3秒間表示→7/4を3秒間表示→7/5を3秒間表示→7/6を3秒間表示→7/7を3秒間表示→7/8を3秒間表示
と表示させるようにしたいです。
スプレッドシート上のボタンを押すと、GASを実行できるようにしようと思っています。
######(2) スプレッドシート側で実施したいこと
一方、スプレッドシート側では、3秒毎に更新されるA2セルを読み込むことで同じFile別Sheetにあるデータからの集計値を表示したり、集計値に基づいて条件付き書式で色をつけることによってアニメーションに見せかけたいと思っています。
発生している問題・エラーメッセージ
(2)については問題ありませんが、(1)を実行すると
約25秒後に7/8がA2セルに入力されます。
setValueが都度行われてスプレッドシートが更新されるのではなく、すべての計算が終わったあとで最後の結果のみが入力されてしまっています。
(1)を実現するためにはどのようにすればうまくいくでしょうか?
この方法にはこだわっておらず、別の方法でも良いのでどなたか教えていただけますと幸いです。
※スプレッドシート上に日付とともにいくつかのデータが入っており、今後もデータが増えて行く予定なので、できればGASとスプレッドシートを使用したいですが、アニメーションのように動けば他のツールでも問題ありません。今後もデータが増えるので、スクリーンショットを何枚も取ったり今後手間が増えていく方法は避けたいと思っています。
※実際のデータは公開できませんが、データの一部にはロケーションに関するものが入っています。ロケーションのマップを描いていて、その中の数字と色が日毎に変化していくような形で可視化したいです。
該当のソースコード
gas
1function myFunction() { 2 3 var bk = SpreadsheetApp.getActiveSpreadsheet(); 4 var sh = bk.getSheetByName('Mapping'); 5 var date = new Date("6/1"); 6 var staySecond=3; 7 8 for (var i=0; i<7; i++){ 9 var newDate = new Date(date.getYear(), date.getMonth(), date.getDate()+i); 10 sh.getRange('A2').setValue(Utilities.formatDate(newDate, "JST", "MM/dd")); 11 Logger.log(Utilities.formatDate(newDate, "JST", "MM/dd")); 12 Utilities.sleep(staySecond*1000); 13 } 14}
下記のログは得ることができています。
Execution log 6:13:06 PM Notice Execution started 6:13:04 PM Info 06/02 6:13:07 PM Info 06/03 6:13:11 PM Info 06/04 6:13:14 PM Info 06/05 6:13:17 PM Info 06/06 6:13:20 PM Info 06/07 6:13:23 PM Info 06/08 6:13:28 PM Notice Execution completed
補足情報(FW/ツールのバージョンなど)
使用しているGoogle Chromeは下記ですが、本件ではあまり関係ないのかな?と思います。
Version 90.0.4430.93 (Official Build) (x86_64)
画面は下記のようなイメージです。場所ごとに数字や色が変わるようにしたいです。
困っているので、どなたか教えていただけますと幸いです。よろしくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/07/18 00:25