【GAS】その場しのぎ的にメール配信へ切り替えた:その2(コード)

エクセルの話が途中になっているのでこのトピックはササッと終わらせるつもりだったのだけど、コードを載せるとなるとメールアドレスやオフィス名の部分を変える必要があり、思いの外、時間がかかってしまった。(語学学校の宿題もたくさん。。。)

基本的には、前に作ったMS TeamsのBotのコード。それに今回、リクエスト送信者の情報を取得するfunction【CheckRequest】を追加。そして、最後に、全体を見直して、自分にとって見やすい形に変更した。

Google Formsでリクエストフォームを作る

何はともあれ、まずはフォームを作ってみて、各質問への答えがどのように格納されるのかを確認することから始めた。面倒くさいのでGIFでご容赦ください。

TestReqForm

簡単。すべての質問への回答を必須にすること。そうしないとメールを送信できない。

では、次に、回答がどのように格納されるのかを確認する。(選択すると選ぶという統一感のない質問文になってしまった。)

TestReqForm_response

見にくいけれど、以下のようになっている。

A列 B列 C列 D列 E列
Timestamp 希望期間 所属オフィス 名前 名前

【Office A】を選べば【E列】には何も入力されない。

メール一覧

勝手に出来上がる【Form Responses1】というシートの他に【EmailAddress】というシートを作成し、スタッフの名前とメールアドレスを入力。

A列 B列
鈴木 一郎 ichiro@abc.com
鈴木 次郎 jiro@abc.com
山田 太郎 taro@abc.com
山田 花子 hanako@abc.com

同姓同名のスタッフがいないので、このようなリストで大丈夫だが、同姓同名のスタッフがいる場合には、名前の左の列にオフィス名を追加しておくなどの工夫が必要。(名前じゃなくて社員番号を使うのでもいいが、フォームから選択するときに迷いそう。)

リクエスト送信者の情報を取得する

さて、やっとメインパート、リクエスト送信者の情報を取得するFunciton。どのシートを見るかは決まっているので、引数なし。

リクエストフォームへの回答内容、メール情報ともに(1)配列に格納し、(2)リクエスト送信者の名前からメールアドレスを取得、(3)最後に、「リクエスト送信者の名前・メールアドレス・希望期間・希望期間の開始日・終了日」を配列で返す、というFunction。

そして、このデータの検索方法については、本の情報を参考にした。ひょっとすると同じ内容がウェブサイトにも載ってるかも。

最初は単純にメールアドレスを返すことだけを目指して書き始めたのだけど、「配列で返したらラクかも」と思って途中で方針変更。同じようなfunctionを乱立させずに済んでややスッキリ。普通は、初めから、配列で格納しようとすぐに思いつくんだろうけど、私のレベルでは、それを思いついたことだけで自分を褒め倒す感じだ。

コード全部

では、全体のコード。以前作った部分も少し直した。スケジュールの期間をベタ打ちから、変数への格納に変更。これで、期間によってコードを分けるという馬鹿なことから解放された。(そんなことをする人はいないのか。)

所感

配列はやっぱりすごい、ということ。あと、配列に格納する方法を取ったら処理速度が若干上がった気がする。(以前は、10秒弱かかっていたのが、平均で6秒程度に。)その場しのぎの解決策としては、まあまあ使えるレベルではないか。

自分の所属するオフィスのスタッフようには、希望する期間と名前だけを答えるリクエストフォームとしているため、もっと簡単。今回のコードを使って、同じオフィスでもチームごとに分けたりといった応用は可能。

何気なく「シンプルなリクエストフォーム」という条件から考え始めたフローだったけど、リクエスト送信者の操作を簡単にしたがために、2次元配列の検索方法を考えたりと、作るこっちが面倒くさくなった作業だった。

Advertisements