見出し画像

LowCodeで行こう!(第3回)

今年の秋はキャンセルされたかのようにめっきり寒くなりましたね。
皆様も風邪など召されませぬようご自愛ください。

さて、前回はSlackの実装部分を解説しました。
今回は連携するGoogle Spreadsheet側の実装を解説します。

1.シート解説

講師体温記録シートは下図の通りで、いたってシンプルです。
・「2021年度」シートの内容
項番:GAS(Google Apps Script)でシリアルナンバーを付与(詳細後述)
氏名:slackで体温を選択した者の氏名(slackから連携)
体温:slackで選択された体温(slackから連携)
登録日時:GASでシートに書き込まれた日時を反映(詳細後述)

画像1

体温を登録する講師担当はSlackで体温を選択するだけで済みますし、管理する側も1枚のシートを確認するだけで済みます。Win-Winですね!

2.シートのしかけ

第3回となる今回に至るまで、一切コードは出てきませんでしたが、講師担当と管理者がWin-Winになるにはちょっとしたコード(GAS)が必要です。

GASを利用するにはスクリプトエディタを起動します。
「ツール」から「<>スクリプトエディタ」をクリックします。

画像2

こんな感じで表示されますのでコードを記載していきます。

画像3

実際に使用したコードは以下となります。
簡単に解説すると、行が追加されたら指定した列にシリアルと更新日を設定するコードになります。

function insertLastUpdated() {
 var ss = SpreadsheetApp.getActiveSheet(); 
 var currentRow = ss.getActiveCell().getRow(); 
 var currentCell = ss.getActiveCell().getValue(); 
 var updateRange = ss.getRange('D' + currentRow) //更新日をいれる列をstringで指定。この場合はD列
 var updateRange2 = ss.getRange('A' + currentRow) //シリアルをいれる列をstringで指定。この場合はA列
 Logger.log(updateRange);
 //更新日の記入
 if(currentRow>1){ 
   if(currentCell) { 
     updateRange.setValue(new Date());
     updateRange2.setValue(currentRow-1);
   }
 }
}

このコードは以下サイトを参考にして作成しました。
大変助かりました。ありがとうございます。リンクを貼っておきます。https://qiita.com/Yamotty/items/888ae6f93a05a8cfc16f

コードを入力したら忘れずに保存します。下図赤囲みのアイコンです。

画像8

コードを実行するためにはトリガー設定が必要です。何を契機にコードを実行するかを設定します。
①以下図の目覚まし時計(赤線囲み)をクリックします。
②ブラウザ右下の「+トリガーを追加」をクリック

画像4

画像5

変更する部分は「イベントの種類を選択」です。
ここを「変更時」に設定して保存します。

画像7

これでシート側の設定は完了です。

3.最後に一工夫

シートの設定も終わってめでたしめでたしと言いたいところですが、案の定期待していた動作をしませんでした。
試行錯誤しながらSlack側に以下設定を施すことで解決できました。

シートに追加する行の要素として「氏名」「体温」の他に「項番」を追加し、ダミーデータとして「.....」を入力するように設定を追加しました。

画像8

面白いのはValueに設定した「.....」の個数が少ないと失敗することがあるので、十分に検証した結果、今の個数に落ち着いたという所です。
更新にかかる時間が短すぎるとシート側で更新をうまく検出できないのではないかと想定しています。
原因をご存じの方がいらっしゃったらコメントいただけると有難いです。

以上で「LowCodeで行こう!」は終了となります。
次回からはまたnocodeの記事に戻りたいと思います。

この記事が気に入ったらサポートをしてみませんか?