#はじめに
研修で、無料かつノーコードでwebアプリ開発可能なGlideを扱った。
Glideでは、Googleアカウントと紐付け、自分のドライブ上のスプレッドシートをデータベースとして扱うことができる。
アプリを作っているときに、インプットしたデータから元データの数値を更新したかったが、Glideだけでは対応できなかった。
そこで、スプレッドシートでGAS(Google Apps Script)を使いスクリプトを組むことにした。
(ExcelでいうVBAでマクロを組むのと同じ感覚)
筆者は研究室で楽をするために、実験装置を自動で動かしデータを収集整形するために、Excelでマクロを組んだことがあるくらいで、スプレッドシートでマクロを組むのは初めてで、GASも初めて触った。
変なところもあるかもしれないので、指摘していただけると助かります。
#スプレッドシート中身
###シート構造
シート名 | master | data |
---|---|---|
役割 | データを集約 | アプリからのインプットを蓄積 |
dataのシートへはGlideのFormを用いて入力されたデータ群
###シート中身
今回は簡易的にmasterとdataともに同じ項目
A | B | C | |
---|---|---|---|
1 | name | score | time stamp |
2 | A | 10 | 5/19 |
3 | B | 4 | 5/20 |
のように名前・点数・更新日時のようにした。
#やりたいこと
dataに蓄積された点数などのデータを名前でリレーションし、masterのデータを更新し、更新し終えたらdataから消す。
#GASスクリプトエディタの開き方
スプレッドシート上部の「ツール」→「スクリプトエディタ」で表示可能
たまに開けない人がいるらしいが、原因はChromeでデフォルトのGoogleアカウントで編集しようとすればほぼ解決するらしい。
#実際に組んだスクリプト
/** @OnlyCurrentDoc */
function myFunction() {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var c_sheet = spreadsheet.getSheetByName("data");
var v_sheet = spreadsheet.getSheetByName("master");
while (c_sheet.getLastRow()!=1){
var flag = 0;
for (let i=2; i<=v_sheet.getLastRow(); i++){
if (v_sheet.getRange("A"+i).getValue() == c_sheet.getRange("A2").getValue()){
v_sheet.getRange("A"+i+":C"+i).setValues(c_sheet.getRange("A2:C2").getValues());
var flag = 1;
break;
};
};
if (flag != 1){
v_last = v_sheet.getLastRow() + 1;
v_sheet.getRange("A"+v_last+":C"+v_last).setValues(c_sheet.getRange("A2:C2").getValues());
}
c_sheet.deleteRows(2);
};
};
###手順
1.dataシートにデータがあるかチェック
1.1あれば2へ
1.2なければ終了
2.dataシートの一番上のデータを取得
3.masterシートと名前をキーとして一致するものを検索
3.1.一致すればデータ上書き
3.2.一致しなければ一番うしろに追加
4.一番上のデータを削除
5.終了 → 1へ戻る。
#トリガーについて
トリガー:組んだマクロを実行させるタイミング
指定しなければ、自分で実行する必要がある。
###GASにおけるトリガーの種類
Open(起動時)
ファイルが開かれたときに実行
Edit(編集時)
セル内容が変更されたときに実行
*スプレッドシートのみ
Change(変更時)
スプレッドシートの構造が変更されたときに実行
シート・列の追加・削除など
*スプレッドシートのみ
Form submit(フォーム送信時)
フォーム送信 or フォーム回答がスプレッドシートに書き込まれたときに実行
Time driven(時間主導型)
一定時間や特定日時に実行
###トリガー設定方法
色々ググったが昔のUIのものばっかで、現在(2021/5/20)ではGASのスクリプトエディタ左側の「目覚まし時計」マークから設定できる。
###トリガー設定
最初に"Edit"でトリガーを設定したが、Glideからのセル変更では
トリガーになってくれなかった。
そこで、今回は"Time driven"で1分おきにトリガーが発生し、マクロを実行するようにした。
参考:【GAS】トリガーとは!トリガーの種類と使い方を解説,takasakisan,(2019-08-27)