Power AutomateでExcelのデータを元にTeamsに自動通知を行う

はじめに

「舟越さん、リフレッシュがてらPower Automate作りませんか?」という誘いがあり、ブログのネタにもなるからと思って受けました。*1

要件

新入社員研修で朝会、夕会の時間を設定して連絡事項を伝達しているのですが、「この日にXXを連絡しなきゃ!」と思っても、当日忘れそうになる事がままあります。

これを、事前にExcelなどに記録しておき、当日決まった時間にTeamsのチャネルでアナウンスされるようにしたい、というのが今回の要件でした。

Power Automateの作成

要件は分かったので、サクサク作っていきたいと思います。

トリガーの設定

今回は、自動実行したいのでスケジュールをトリガーに利用します。 平日の9時、17時にそれぞれ実行されるようにしました。

実行した日に一致するデータをExcelから抽出する

本当はExcelのフィルタクエリで「Dateが実行日に等しい」and「Timimgが朝である/夕である」で一度に絞り込めれば楽なのですが、残念ながらExcelのフィルタクエリではandやorが使えません。

そのため、まずは「Dateが実行日に等しい」だけやります。

事前に変数を用意して、実行日時を取得しておき、その値を使ってフィルタをかけます。

※ 初出時、キャプチャが一部誤っていました。DateTime形式がISO 8601である必要があります(2022/3/23追記)

変数の中身はこうなっています。

addHours(utcnow(),9,'yyyy-MM-dd')

朝夕を判定する

今のままだとExcelに抽出したデータは朝会用のものも夕会用のものも含まれてしまっています。 これをフィルタ出来るようにするために、まずは朝夕を判定します。

今回は、実行日時の「時」の部分を数値として変数に格納し、その後の条件分岐で、12以下なら朝、12より大きければ夕、と判定することにしました。*2

9時なら12以下なので朝、17時なら12より大きいので夕、と判定される想定です。

時刻部分の変数の設定は式を使ってこのようにしています。*3

int(addHours(utcnow(),9,'HH'))

その後、条件分岐を使って、フィルタ用に「morning」か「evening」を文字列として変数に入れるようにしました。

朝夕でフィルタする

時間に応じて、「morning」か「evening」でフィルタします。

フィルタ自体は簡単なんですが、フィルタした後のデータを後の処理で使えるようにするためには、一度jsonの解析をする必要があります。

一度フィルタ処理までで止めておいてテスト実行し、その時の出力データをサンプルとして入力すると簡単に分析できます。

メッセージを投稿する

JSONで解析したデータは朝または夕でフィルタ済みなので、これをTeams用のコネクタで繰り返し処理します。

無事、メッセージが投稿されました。

おわりに

あとは、実際にスケジュール通り実行されるか確認すればひとまず完了です。

実はこのままだとExcelのDetailで入れていた改行が消えてしまうので、これを自動処理したい場合は一工夫必要なのですが、そちらについてはまた別の記事で書きたいと思います。

*1:Power Automate作成がリフレッシュになるかどうかには個人差があります

*2:ここは大小で判定するため整数型で変数を作っています

*3:この時、HHと大文字にしないと、24時間表記にならないので注意が必要です

投稿者プロフィール
舟越 匠

舟越 匠

人材戦略部に所属。社内向けの技術研修をメインにしつつ、JBS Tech BlogやMS認定資格取得の推進役もやっています。資格としてはAzure Solutions Architect Expertを所持。Power AutomateやLogic Appsで楽をするのが好きです。

執筆記事一覧