Power AutomateとExcelを利用したメッセージ投稿BOTを作ってみる

# はじめに
お客様から質問いただいた内容を備忘と共に残していこうと思います。

今回いただいた要望事項は、
__「部署で毎週流している格言Excelから自動でTeamsへ投稿したい！」__ という要望でした。
時報BOTですね。毎週格言流すの素敵ですね。
また、投稿した履歴がわかるように使用履歴も付けたいとの事。やってみましょう。




# 要望事項
1.ExcelからTeamsへメッセージを投稿したい
2.一度投稿したメッセージには使用履歴を付け、投稿の対象にしない
3.決められた日時にメッセージを投稿する
4.元ExcelファイルはOnedrive for Businessに格納している

# 使用するコネクタ
無償ライセンスの範囲で作成可能です
Excel Online
https://learn.microsoft.com/ja-jp/connectors/excelonline/
Teams
https://learn.microsoft.com/ja-jp/connectors/teams/

# 作り方手順
## 1.Excel準備
まずはTeamsへ投稿する元となるExcelを準備しましょう

ここでの注意はExcelのデータ範囲をテーブルにしないといけません
~~久々に実施したらすっかり忘れていた~~
[Excelでテーブルを作成する](https://support.microsoft.com/ja-jp/office/excel-%E3%81%A7%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B-bf0ce08b-d012-42ec-8ecf-a2259c9faf3f)

こちらも参考になります Special Thanks Masumori

https://qiita.com/Takashi_Masumori/items/c50396c152f2f71e4e1b



![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3579825/2eb27fed-3af9-0201-25ca-62623b5f7628.png)
アインシュタインの名言を並べてみました
列は#(ナンバー), 格言, 使用(履歴)の3列のみ
この列名は後半再登場します

## 2.Power Automateでフローを作る
### a.スケジュールの設定
Power Automateに移動して→
[作成] > [スケジュール済みクラウドフロー]を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3579825/945670a4-5429-f221-b3ca-28144e38a573.png)

[フロー名]、[開始日]、[繰り返し間隔]を入力、[設定曜日]を選択
11/1開始の毎週月曜日AM10:00に動くフローとなります
[作成]ボタンを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3579825/84bfbcae-d7d8-6288-0038-09305bc32832.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3579825/ab719ac9-21f6-6d0f-d5bb-401281cace22.png)

[新しいステップ]を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3579825/0972a081-4b84-097b-9c24-a0df9b2ce2a5.png)

### b.使用履歴の変数設定
使用履歴の日付を取得する変数を用意します
[組み込み] > [変数]を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3579825/f3665d28-3848-b2d0-6c93-60baeba0f362.png)

[変数を初期化する]を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3579825/7dc68d9a-d2b6-11e4-6400-9d6583cbd8b5.png)

[名前]に任意の変数名を入力 例：date
[種類]に"文字列"を選択
[値]に 日時カテゴリの [ `utcNow()` ] を選択
OKボタンを忘れずに選択

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3579825/659834e2-4ece-f0b0-d0b6-e8f516866e5c.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3579825/8f8111fa-f2de-084c-e948-23ac52e7ae27.png)

こんな感じになるはず
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3579825/41ba0e72-28a9-0576-375b-83a7462067aa.png)

[新しいステップ]を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3579825/0972a081-4b84-097b-9c24-a0df9b2ce2a5.png)

### c.参照するExcelの設定
検索バーにExcelと入力し、Excel Online(Business)を選択
[アクション]から[表内に存在する行を一覧表示]を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3579825/47c40b7b-3cc7-fb8d-4531-2aa7ffc79a7f.png)

[場所]は [OneDrive for Business]を選択
[ドキュメントライブラリ]はOneDriveを選択
[ファイル]はファイルアイコンを押すと、ブラウザ形式で対象ファイルまで遷移できます
[テーブル]はExcelを作成した際に作ったテーブル名を選択します。特に名称を決めていなければテーブル1のはず
[フィルタークエリ]に使用履歴がある行はスキップしたいので、`使用 eq ''`と入力
[上から順に取得]に`1`を入力
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3579825/55fd5aa5-cf52-69b7-8691-b0562c44d9b9.png)

[新しいステップ]を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3579825/0972a081-4b84-097b-9c24-a0df9b2ce2a5.png)

### d.投稿するTeamsの設定
コネクタから[Microsoft Teams]を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3579825/368b0e06-5d99-e7a4-f7f1-01a5475d7625.png)

[チャットまたはチャネルでメッセージを投稿する]を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3579825/1c753183-5e49-4b61-03bc-b73c1ee459ab.png)

[投稿者]は[フローボット]を選択
[投稿先]は[Channel]を選択
[Team]は任意のものを選択
[Channel]は任意のものを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3579825/ac83500d-896c-3819-ae26-3887629fac30.png)

[Message]には[動的なコンテンツ]の[表内に存在する行を一覧表示]から動的コンテンツを配置します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3579825/c6e63e5b-b26f-03ba-3f24-b95fbbef0878.png)

:::note info
動的なコンテンツの表示がおかしい場合
このフローで～～～が図の様に表示されないときはブラウザのズームを縮小してみましょう
※こんな感じになってしまう場合
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3579825/eb2a8431-855e-e1fe-0e97-3e637f4a2f26.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3579825/f8b5d670-bf6c-a3e7-7234-12e4d66a4d49.png)
:::

[#],[格言],[使用]を一先ず選択して配置
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3579825/bf5c8134-57f5-ed80-f887-9bd458b6374e.png)

ステップが自動で[Apply to each]となります
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3579825/4d935cd2-e4ab-39c3-cfd7-d0299346088d.png)

[新しいステップ]を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3579825/0972a081-4b84-097b-9c24-a0df9b2ce2a5.png)

### e.使用履歴をExcelへ追記する設定
[Excel Online(Business)]から[行の更新]を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3579825/7faadc05-8220-0433-2175-2a02ac123d35.png)

先ほどと同じExcelファイルを選択
[場所]は [OneDrive for Business]を選択
[ドキュメントライブラリ]はOneDriveを選択
[ファイル]はファイルアイコンを押すと、ブラウザ形式で対象ファイルまで遷移できます
[テーブル]はExcelを作成した際に作ったテーブル名を選択します
[キー値]は[動的なコンテンツ]>[表内に存在する行を一覧表示]>[#]を選択
準備したExcelの列が読み込まれている
[使用]に[動的なコンテンツ]から[date]を選択

これで準備したExcel内にタイムスタンプを追記できるようになりました
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3579825/0324c0f1-abc5-8a54-392d-894c43d0cbbe.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3579825/db59b284-177a-572c-cc0c-fd57960fe978.png)

保存ボタンを押します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3579825/cab42448-b17a-6e21-761b-aa56588d17ba.png)

## 3.テストを実施
[テスト]ボタンを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3579825/d3319e18-cf17-7a20-e458-ed3159553f63.png)

[手動] > [テスト] > [フローの実行]を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3579825/c3135b7e-342e-1b28-b1db-75014208cfea.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3579825/9c1a142a-91ca-f487-cc02-720081a85b67.png)
[完了]を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3579825/55061cfb-7b07-e42c-3687-7b27d8e1c515.png)

フローが実行される。エラーがある場合はエラーが表示される
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3579825/d223b681-2973-3f05-8e6a-8f15d74ccf12.png)

## 4.結果の確認
無事にTeamsへの投稿、元Excelファイル追記がされました
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3579825/1d955b3d-75fb-3228-054d-7be38c3b4795.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3579825/340d4a79-4a62-c4c2-1bcc-505a39904c27.png)

# Advanced modification
使用履歴のタイムスタンプが分かりづらいので直します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3579825/bb2e6b2b-cddc-33c8-bd0a-0ee4b9a71418.png)

[変数を初期化する] >  [値]に記入した [ `utcNow()` ] を選択

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3579825/3c6c2732-569b-465c-d72a-4e9512f1b82e.png)

 [ `utcNow('yyyy-MM-dd')` ]と入力し、更新ボタンを選択 
 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3579825/637ed161-88b4-e22b-bced-68d37b3608e5.png)

[使用]列に指定したフォーマットで日付が追記できました
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3579825/213d6f43-6178-7986-64f1-a19e91503d39.png)

# 参考資料
https://learn.microsoft.com/ja-jp/power-platform/power-fx/reference/function-now-today-istoday

https://learn.microsoft.com/ja-jp/power-apps/maker/canvas-apps/show-text-dates-times