Power Automateを使ってMicrosoft Teamsにメンバーを一括登録する方法

##0.はじめに
Teamsのチーム所有者が，Office365一般ユーザーの立場で， Teamsにメンバーを一括登録する方法については，下記の記事で解説されています．
[Teamsのメンバーを一括登録する（一般ユーザーで）](https://joguerre.medium.com/adding-bulk-users-from-a-csv-or-excel-file-to-a-microsoft-teams-team-with-power-automate-8fe89f507075)
[Adding bulk users from a .csv or Excel file to a Microsoft Teams team with Power Automate]((https://joguerre.medium.com/adding-bulk-users-from-a-csv-or-excel-file-to-a-microsoft-teams-team-with-power-automate-8fe89f507075)
)

本記事では， これらの記事に記載されている方法を少し変更したフローについて説明しています．
これらのフローを用いた場合，Excelファイルに記載のアドレスのうち，既にグループに登録済みのメンバーが含まれている場合，その箇所はエラーとなります．最後まで実行され，未登録分はきちんと登録されるので実用上問題はないのですが，登録済みメンバーがいる場合もエラーにならないように変更したので，備忘録として書いておきます．


##1.ExcelファイルをOneDriveかSharePointに保存する
Teamsに登録したいメンバー一覧を記載したTableを含むExcelファイルを用意し，OneDriveかSharePointにアップロードします．この例では，Excelファイルを'excel_to_teams_test'と名前をつけて，OneDriveに保存しています．
Excelで`テーブルとして書式設定`を行っておきましょう．
[エクセルのテーブル機能の使い方や設定方法](https://office-hack.com/excel/table-setting/)
この例では，テーブル名をteam_members_1として保存しています．テーブルに，アドレスを記載した列以外に，`ID`という列と`Status`という列も設けておきます．サンプルでは`Name`という列も用意していますが，これは本フローでは特に利用するわけではありません．なお，既に追加済みのメンバーがいる場合には，`Status`欄には`added`と記載しておきます．
![Excel_to_Teams_10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/939665/4ee8d99d-019d-84b1-0146-7711f319e4e6.png)
##2.Power Automateでフローを作成する
####2.1手動でフローをトリガーします
`空白から開始(Create from blank)`で`インスタントクラウドフロー`を選択して，フローの作成を始めます．
トリガーとしては，`手動でフローをトリガーします(Manually trigger a flow)`を選択します．
![Excel_to_Teams_7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/939665/86a8e5fd-8d2b-7092-8665-915c129723a6.png)


####2.2表内に存在する行一覧を表示
次に'アクションを追加'でコネクタのひとつであるExcelを選択します．アクションとしては，`表内に存在する行一覧を表示(List rows present in a table)`を選択します．
`場所`,`ドキュメントライブラリ`，`ファイル`，`テーブル`は，ステップ１で保存したものをプルダウンメニューから選択します．
![Excel_to_Teams_8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/939665/5198c447-c70b-73c3-81a0-4aa54138bb7d.png)

さらに，詳細オプションを表示するを選択します．
詳細オプションに`Filter Query`という項目があるので，
```Status ne 'added'```
と記載します．neは'not equal'の略ですね．
こうすることで，`Status`列が`added`でない行だけ一覧として取得されます．
![Excel_to_Teams_7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/939665/20dcfe5d-60ea-35ff-96fd-3ccc11ed2977.png)
`Status`列が`added`である行だけ一覧として取得したい場合は
```Status eq 'added'```
をフィルタークエリの欄に記入すればいいわけです．
Filter Queryの書き方は，
[【PowerAutomate】SharePoint フィルタークエリの書き方講座](https://qiita.com/kura_yu/items/c0996e3069b277d08db5)
などが参考になります．

####2.3取得した各行に対して，グループへのメンバー追加，Excelテーブルの行の更新を行う
#####2.3.1コネクタのControlでApply to eachを選択
次に，アクションを追加し，組み込みのコネクタの`Control`を選択し，`Apply to each`を選びます．'以前の手順から出力を選択'という項目は，動的コンテンツ一覧に表示されるExcelの`value`を選択します．つまり，ステップ2.2で取得された`Status`が`added`でない各行に対して，以下のアクションを行う，ということです．
#####2.3.2コネクタのOffice 365 Groupsを用いて'グループへのメンバー追加'を行う
コネクタのOffice 365 Groupsを検索します．検索した際に，Office 365 Groupsは丈夫に表示されず，埋まっているかもしれないので，その場合は，﹀の部分をクリックして，さらにコネクタを表示します．

![Excel_to_Teams_5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/939665/91f89380-8e79-1647-eb00-0317c4607c88.png)

![Excel_to_Teams_6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/939665/3a59866f-fe71-d3e0-8e37-822b7ddda44a.png)
`グループへのメンバー追加(Add member to group)`を選択します．グループIDはメンバーを追加したいTeamsのチーム名をプルダウンメニューから選択します．
`User Principal Name(UPN)`の欄はOffice 365のアカウントに利用しているEmailアドレスを記載しますが，ExcelのテーブルではEmailという列に記載していたので，ダイナミックコンテンツのExcel `Email`を選択します．
![Excel_to_Teams_3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/939665/0a144b6c-ad87-948a-4191-34ad0663a6da.png)

#####2.3.3Excelテーブルの'行の更新'を行う
このユーザーは追加済みであることが分かるように，ExcelのテーブルのStatusの列に`added`を追記します．
アクションを追加でExcelのコネクタを選択し，`行の更新(Update a row)`を選択します．テーブルはステップで用意したものです．
`キー列`としては，`ID`の列を，`キー値`は動的コンテンツのExcel `ID`を選択します．こうすることで，`Apply to each`で作業中の当該行に関するアップデートを行うように設定できます．空欄のままの列に対応したセルは更新されず，`Status`だけ`added`と加筆されます．
![Excel_to_Teams_4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/939665/37e00d0f-deca-5c37-0d90-908d138b2aa8.png)


##3.フローを実行する
フローは保存して，テストを行います．'フローのテスト'で'手動'を選択して実行します．Excelテーブルで`Status`列が`added`でなかったメンバーだけ新たに登録されたことが分かります．また，フローの実行後はExcelテーブルの`Status`列はすべて`added`にアップデートされました．

##4.最後に
既に追加済みのメンバーがいる場合も，エラーを気にしなければ実用上問題がなかったので，わざわざfilter queryというオプションと行の更新アクションを追加する必然性はありません．しかし，たとえば，一斉にメール送信するときなど，`Status`として`sent`と記載して，まだ`sent`でない宛先だけに送る，などといった使い方は便利そうなので，記録用に書いておきました．