ExcelからPower Automateを使ってPlannerにタスクを作成する(バケット自動振り分け・ユーザー自動振り分け・チェックリスト作成)

# はじめに
最近Power Automateを使う機会が何回かあり、PlannerのタスクをExcelデータからPower Automateを使って作成することがありました。
その際に、タスクのチェックリストも一緒に作成しようと思ったのですが、Power Automateのタスク作成ではチェックリストは作れないことが分かりました。いろいろと苦労してうまくチェックリストも作れるようになりましたので、記事として紹介して、同じように苦労している方の一助になればと思います。
バゲットの自動振り分け、ユーザーの自動振り分けも行えるようにしています。

# 目標
Excel -> PowerAutomate -> Plannerと処理を行って
![スクリーンショット 2023-06-30 11.23.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/956246/ef50514d-9e4d-f42d-df43-dafbcc3006e9.png)
以下のようなPlannerが作成されるようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/956246/01649612-7ad8-3269-3cec-83ff4d768945.png)

# Plannerでプランを作成
パブリック・プライベートは任意で選択してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/956246/db46a3f2-a80f-a252-df24-29158ca15c1d.png)
Plannerにメンバーを追加します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/956246/29d1ac0b-2067-54bb-eb2e-a41901ac0ae7.png)

# Excelデータ作成
### 事前条件
今回作成するExcelデータは三つのシート(テーブル)を作成します。
バケット名とタスク名と同じにしていますが、業務上その必要があったためです。
Plannerを使用しますので、担当者はMicrosoft365ユーザーとしています。
Excelに3つのシートにデータテーブルを作成しています。
Excel文書はOneDriveに保存します。

## TaskTable作成
テーブルの項目としてはタスク名・担当者・期限日・説明を作成します。
担当者はPlannerで追加したメンバーのMicrosoft365ユーザーのメールアドレスです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/956246/a7039fdc-1a4a-0660-8803-398caa9ace3e.png)

## BucketTable作成
バケット名だけのテーブルです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/956246/94ebcb11-8c9b-b0e0-e209-6aecbadcca4b.png)

## CheckListTable作成
TaskTableのタスク名と対応するチェックリストの項目を作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/956246/44aadb7b-2691-3eb7-4f4d-b654c31a318c.png)

# Power Automate
## インスタントクラウドフローを作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/956246/a5120ef3-47c5-c3ff-fd4e-5a66ca795083.png)

## 手動でフローをトリガー作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/956246/7f974570-604d-5ff5-b4cc-60b999b4d55b.png)

## 変数を初期化
以下のように設定します
- 名前:Bucket
- 種類:文字列
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/956246/4553d51c-f227-2d9b-51b4-86274b045004.png)

## Excel Onlineから表内に存在する行を一覧表示を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/956246/0755c95f-9daa-a906-c53d-cfcff6073456.png)
以下のように設定します
- 場所:OneDrive for Buisiness
- ドキュメントライブラリ:OneDrive 
- ファイル:/automate/Qiita用.xlsx(automateというのは任意のフォルダです)
- テーブル:BucketTable
＊SharePointに保存している場合はSharePointとドキュメントを選択することもできると思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/956246/2b19584a-1725-6017-72c4-b673008c04a1.png)

## 変数の設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/956246/2b39fb6f-f49c-1c98-ccc1-23fe83f58b9f.png)
名前:初期化した変数Bucketを選択します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/956246/dcc0b042-800e-2119-bd2c-efef1d5eb1e4.png)
値:表内に存在する行を一覧表示のバケット名を選択します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/956246/7e769cd7-3cce-111f-98a8-79ea92361bfa.png)
選択をするとApply to eachが自動的にセットされます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/956246/e6a8cb66-eaaf-b48e-054e-7b5271a11b90.png)
Apply to each内でアクションの追加を行いPlannerのバケットを作成する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/956246/7d60d778-5396-02e8-d49b-71a1520734f0.png)
以下のように設定します
- 名前:変数のBucket
- グループID:Plannerで作成したSamplePlan
- プランID:Plannerで作成したSamplePlan
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/956246/af4fa6c2-2157-ba52-c277-eab28130021c.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/956246/e5a4b4ab-fc76-03b6-e956-2014455db56b.png)

以上でバケット作成のフローは完成です。
次はタスク作成をします。

## 変数を初期化する2
Apply to eacheの外側のステップを作成して、変数の初期化を選択します。
以下のように設定します
- 名前:BucketItems
- 種類:アレイ
- 値:[]
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/956246/df3e944f-783e-ad26-94a4-e667e5ccb62a.png)

## Plannerのバケットを一覧表示するを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/956246/4ad68d72-1946-a2c8-06e9-7d8fb7fff9d2.png)
以下のように設定します
- グループID:SamplePlan
- プランID:SamplePlan

## 配列変数に追加を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/956246/ebc01859-1a7f-3a10-41d2-dc205dd2e2fd.png)
以下のように設定します
- 名前:変数のBucketItems
- 値:以下のように手入力してください
```json
{
    "TaskId": ,
    "TaskName":
}
```
※下の図では値が[ ] となってしまっていますが{ } が正しいですm(_ _)m。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/956246/a49b38ef-5352-b616-999e-01de72b6564b.png)
BucketIdの横をクリックしてバケットを一覧表示するから値ID(バケットのID)を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/956246/27c8429e-4441-e9ee-ae21-4075a512fbfd.png)
BucketNameの横をクリックして値 名前(バケットの名前)を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/956246/d24e77cb-517d-3829-ca21-bed92015b657.png)
以下のようになれば大丈夫です。(値IDの後にコンマ入れるの忘れないように)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/956246/6dc9345f-f31d-c5f0-278c-59ba0caad6a5.png)



## Apply to each2の外側の新しいステップを作成してExcel Onlineから表内に存在する行を一覧表示を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/956246/0fce0490-ba76-4be5-8ac0-bcea9cb922fb.png)
以下のように設定します
- 場所:OneDrive for Buisiness
- ドキュメントライブラリ:OneDrive 
- ファイル:/automate/Qiita用.xlsx
- テーブル:TaskTable ←ここが最初と違います
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/956246/3e5c09a7-af9c-9774-189f-6fffbf2ed8fe.png)
さらに詳細オプションを表示してDateTime形式をISO 8601にしてください
これをしないとExcelの日付が正しく読み取れないです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/956246/2a931108-1953-1acf-54e8-d8f48795d575.png)
並び替え順を以下のように設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/956246/fd29fc05-4961-cf79-1238-f2ea88f4e68e.png)

## データ操作からアレイのフィルター処理を選択します
この処理でバケット名が一致するバケットIDを取得します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/956246/8d1af24a-e0c5-d589-9af3-bcb42f2971ef.png)
- 差出人:変数BucketItemsを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/956246/91fac137-b3a2-d18e-a85b-8ff142f69316.png)
- 左辺:式を以下のように入力します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/956246/7534f902-e402-9807-b853-0816e0850942.png)
- 右辺:表内に存在する行を一覧表示2のタスク名
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/956246/f3cdc03e-227d-3898-cc76-607800197445.png)

## Apply to each 3 内でアクションの追加、データ操作の作成を選択します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/956246/ace788ca-a91f-463b-6a83-eefc044f2702.png)
- 入力:式を選択してfirst()と入力してください
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/956246/ad966fa9-76e2-6d6d-b80c-0a8be3b73dd0.png)
first()の()の間にカーソルを合わせて、動的なコンテンツに切り替えて、アレイのフィルター処理の本文を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/956246/7ef841f0-362e-4500-9e6a-040a94925a64.png)
以下のようになればOK
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/956246/d6e25d7f-386a-de41-762e-8bc1c8b1db7d.png)
さらに以下のように文字を追加してOKを押下
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/956246/ef8aecfc-9c5f-2ebe-3030-f2afa6ef044f.png)

## Apply to each 3 内でアクションの追加、Plannerのタスクを作成するを選択します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/956246/cf4bebfa-cf4e-7737-332d-3e385a827b0c.png)
入力項目がたくさんありますが、ほとんどはラベル用です。
ここを見ると分かりますが、チェックリストやメモなどがタスク作成には表示されません。
この辺りはそのうちPower Automateで実装されるのかもしれませんが、現時点ではまだないようです。
そのためここでタスク作成をした後、タスクの更新処理をする必要があります。

以下のように各項目を設定します
- グループID:SamplePlan
- プランID:SamplePlan
- タイトル:表内に存在する行を一覧表示2のタスク名
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/956246/02011ef9-b64f-1192-46af-e5fa5fe6b230.png)
- バケットID:カスタム値:作成の出力を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/956246/a1fa0822-0d3b-591f-7afa-2ed69bb95c3a.png)
- 期限日時:表内に存在する行を一覧表示2の期限日
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/956246/55147261-e4cf-3230-590c-c32534abbf6b.png)
- 割り当てられたユーザーID:表内に存在する行を一覧表示2の担当者
担当者はMicrosoftユーザーのメールアドレスです
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/956246/e0c9b23e-defa-3a98-c223-57504dfa9888.png)

以上でタスク作成まで完成です。
ここまでで以下のように作成されているはずです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/956246/9d555e1c-ca06-b05a-3c8a-b5353d983af9.png)

次からはチェックリストとメモを作成するフローです。

## Apply to each 3 の直前の個所でアクションの追加
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/956246/5260b5a0-836d-2f53-7a67-409b8e2c0bb0.png)

## 変数を初期化するを選択します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/956246/f9b1f81e-b82a-66cb-2bfb-fa6b4ad7912c.png)
以下のように設定します。
- 名前:CheckListItems
- 種類:アレイ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/956246/5ed352c2-fb67-70e9-6b71-5f6f26423acc.png)

## Apply to each 3内でアクションの追加をします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/956246/a523eb30-9d4a-e1ab-1b12-dbc93a3e5e47.png)

## Excel Onlineで表内に存在する行を一覧表示を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/956246/2f1dd456-5a52-ce85-e460-70e6652eea4b.png)
以下のように設定します。
- 場所:OneDrive for Buisiness
- ドキュメントライブラリ:OneDrive 
- ファイル:/automate/Qiita用.xlsx
- テーブル:CheckListTable ←ここが違います
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/956246/aa15dfe9-c07f-0a85-36a2-5504bee33e73.png)
詳細オプションを表示してフィルタークエリを以下のように設定します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/956246/c53c326e-7d1c-502e-aa39-4223b1b27068.png)
以下のようになっていればOKです。
タイトルを' 'で囲んでいます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/956246/a7cf15f8-9b78-947a-2e13-d214575de6f2.png)

## Apply to each3 内でアクションの追加、変数の設定を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/956246/d45a880b-5035-d051-64c2-0f563d21c143.png)
以下のように設定します。
- 名前:変数CheckListItesms
- []
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/956246/0f87d1ad-1221-2d0f-8131-58938989cb44.png)

## アクションの追加、配列変数に追加を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/956246/86cb328a-3222-2046-6cdc-893b261095f4.png)
以下のように設定します。
- 名前:CheckListItems
- 値:以下のように記述します
```json
{
    "Id":,
    "title":,
    "isChecked":false
}
```
Idに表内に存在する行を一覧表示3のCheckIdを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/956246/112452b2-461f-6f70-c6fe-5036bd091237.png)
titleに表内に存在する行を一覧表示3のチェックリストタイトルを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/956246/494ccb4b-a539-4266-b295-d6e83f3134f5.png)
以下のようになればOKです
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/956246/8c52b64a-3a50-abaa-acd1-e4ec685b2c3c.png)

## Apply to each4の外側のアクションの追加をします(位置に注意)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/956246/aea7d552-66b9-e6eb-7340-9b7a384c265c.png)

## Plannerのタスクの詳細の更新を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/956246/3fd2b283-8730-a9c2-7b36-f7d44e1d3bbf.png)
以下のように設定します。
タスクID:タスクを作成するのID(タスクのID)を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/956246/6e3b2622-1e6c-c05e-5dce-707ccc12873e.png)
説明:表内に存在する行を一覧表示2の説明を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/956246/ebd0208e-50e5-371d-680e-7aa986f84ee8.png)
チェックリストの個所でアレイ全体の入力に切り替えるをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/956246/923c66f6-964f-b99f-98db-0a4e2c710a7c.png)
- チェックリスト:変数CheckListItemsを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/956246/dfba9723-bd5b-cd85-9702-1a255e9e3449.png)

以上でチェックリストとメモの更新は完了です。
ただこのままだとPlannerでチェックリストは非表示となっているので、カードに表示するに切り替えたいと思います。
Plannerで見るとこの部分です
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/956246/bd39ce6d-d014-de0e-eb6b-4ff71c525133.png)

ここはMicrosoftの[Update plannertaskdetail](https://learn.microsoft.com/ja-jp/graph/api/plannertaskdetails-update?view=graph-rest-1.0&tabs=http)を参考にしてください。
## Apply to each3 内でアクションの追加、Office 365 Groupsを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/956246/45e6c2aa-be3f-5738-c32a-10897647b011.png)

## HTTP要求を送信しますを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/956246/36846aab-6118-0b50-2dd1-2283c6113ff2.png)
以下のように設定します。
- URI:https:\//graph.microsoft.com/v1.0/planner/tasks//details
tasks//detailsの//の間にカーソルを入れてタスクの詳細の更新のID(タスクのID)を選択します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/956246/a9b2dd22-c05d-107b-3a34-b54a5e834410.png)
- メソッド:PATCH
- 本文:以下の記述
```json
{
    "previewType":"checklist"
}
```
- コンテンツタイプ:application/json
詳細オプションを表示して以下のように設定します。
- CustomHeader1:If-Match:　と記述してから、さらに以下のように式を記入します
　substring(outputs('タスクの詳細の更新')?['headers']?['Etag'],2)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/956246/722db07c-c6b7-bbd4-d695-6aa0038cd650.png)
最終的に以下のようになればOKです
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/956246/daef57ad-5689-7f96-8b0c-7ebc7a1751ed.png)

以上で保存して実行すれば動作すると思います。
完成したフローは以下の通りです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/956246/cac20f69-8961-ee8d-4084-f227f8108433.png)

# 実行した結果
<バケット別>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/956246/01649612-7ad8-3269-3cec-83ff4d768945.png)

<担当者別>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/956246/5e9d1bd3-8654-ee07-1cde-25b2cb657600.png)

<進行状況別>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/956246/a96fe3ad-6573-156e-b369-4bac87095a01.png)

うまくいきました！
メモはタスクを開くと表示されます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/956246/09140630-7c03-612c-14a1-baf808f2ef8a.png)

✅カードに表示するはどちらかしか選べません。
メモとチェックリストは同時に表示はできないようです。

丁寧に記載したので長くなってしまいましたがご参考になれば幸いです。