加算減衰

思いついたら書きます

Google FormでGoogle Apps Script活用

大学サークルアドベントカレンダー20日目,今回はサークルの入部届けを電子化するにあたって行ったGoogle Apps Scriptでの自動化についての話をしたいと思います.

今回はGoogle Apps Scriptを使ってGoogle Formのデータを自動で処理していくので,スプレッドシートのみの話になります.

 

弊サークルでは今年の新入部生から,入部届の提出をGoogle Formを使って完全に電子化することにしました.具体的な入部手続きとしては,入部届をGoogle Formで提出→部費支払い→入部完了ということになります.
従来は名簿作成の時に紙の入部届を見て全て手動で名簿入力をしており,手間がかかっていました.電子化によって名簿管理の負担軽減を減らすことが今回の入部届電子化の主な目的です.
入部届のデータを自動処理しなくても,入力者に全てのデータを入力してもらえば事足りるかもしれません.ですが,学籍番号や学科の入力はユーザ任せにすると入力書式を統一できません.これが問題になることはそんなにないとは思いますが,できるだけ書式は統一させた方がいいでしょうし,入力箇所を減らすことは入力者の負担を減らすことにも繋がります.弊学はG Suiteを利用しており,学生全員に学籍番号をユーザ名としたメールアドレスが割り振られています.Google Formには回答者のメールアドレスを自動で記録をする機能と,G Suite向けに同じドメインのユーザにしか回答できないFormを作成する機能があります.これらを利用し,弊学のG Suiteアカウントを持っている人のみが回答でき,Formの回答が送信されたタイミングで,自動でFormの回答結果に自動で含まれるメールアドレスから必要なデータを自動で入力処理するGoogle Apps Scriptを作成します.

 

スクリプトを自動で実行するGoogle Formの作成

Google Formの送信時に自動で処理をさせると常に自動入力が反映された状態になり,便利でしょう.

まずGoogle Formを作成します.ここで重要なのが必ず設定から「メールアドレスを収集する」にチェックを入れることです.これで自動でログイン中のメールアドレスが記録されるようになります.また,「信頼できるドメインのユーザに限定する」「回答を1回に制限する」にもチェックをつけておきましょう.

作成したGoogle Formの回答結果のスプレッドシートを開き,上のメニューバーの「ツール」から「スクリプトエディタ」を開きます.新しくファイルが作成されると思うので,そこに作りたい関数を書いていきます.今回はupdateStudentId関数を作成しました.

スクリプトエディタのメニューバーにある「編集」から「現在のプロジェクトのトリガー」を選択して,トリガーによって自動で作成した関数が実行されるようにします.「トリガーを追加」ボタンを押して,実行する関数を選択し,「イベントのソース」を「スプレッドシートから」,「イベントの種類」を「フォーム送信時」にして保存します.これでフォーム送信時に自動でこの関数が実行されます.

 

Google Apps Scriptでスプレッドシート編集

下準備が終わったので,自動でスプレッドシートを編集するスクリプトを実際に書いていきます.Google Apps ScriptはJavaScriptベースなので,割と戸惑うことなく書けるのではないかと思います.

ここからは実際に作成したソースコードの行数を参照しながら説明していくので,ここから先は本ページ一番下に貼り付けたGistのスクリプトを参照しながら読み進めるとわかりやすいと思います.

スプレッドシートAPIを利用する

SpreadsheetAppクラスを利用することで,簡単にスプレッドシートにアクセスできます.今回のスクリプトでは,2,4,5行目でスプレッドシートのデータが入ってる範囲のデータを配列で取得します.5行目でスプレッドシートの2次元配列データはvals変数に格納され,vals[(行)][(列)]で値にアクセスできるようになります.59行目ではスプレッドシートに変更後の配列の値を書き込みます.

配列操作と情報抽出

ここからは配列のデータを操作して,自動でデータを格納します.11-16行目では,カラムの一番上の要素を読み込み,何のデータがどの列に格納されているかを記録しています.ユーザが一番上に「学籍番号」「学部」「学科」とだけ書かれた列を追加することで,スクリプトが自動でその列を処理します.

18-58行目はfor文で各行の処理になります.19行目でメールアドレスから学籍番号を取得して変数に格納し,20-57行目で学籍番号から得られた情報を各列ごとに格納しています.

switch文を利用しなかったのは……多分変則的な処理に対応するためだと思います.必要に応じて書き換えてください.

 

最終的に出来上がったもの

こちらが最終的に出来上がったスクリプトとなります.

 

最後に

ごく簡単な説明ではありましたが,これでGoogle Apps Scriptを使って簡単な処理ができるようになりました.Google Apps Scriptは活用の幅が広いので,色々調べてみるといいでしょう.今回は後輩への引き継ぎも兼ねて,ソースコードを掲載して簡単に動作を追ってみました.後輩各位,また他にもGoogle Formを利用して情報整理をされる方は,この機会に是非Google Apps Scriptの活用をご検討ください.

クリスマスまであと僅か,アドベントカレンダーも2018年もいよいよ終盤です.私も何人かとは「良いお年を」という挨拶を済ませました.本年もあと少し,最後まで*1よろしくお願いします.

*1:私はまだ今年中に数本記事を投稿する予定です