Excelにあるテーブルデータを、SharePointリストに転記したいのですが、Power Automateの実装が上手くできませんぞ…
それを実現するフローの実装には、ループや条件分岐、フィルタークエリ等の理解が重要です。
この記事では、Power Automateで、ExcelからSharePointリストに転記するフローの実装を解説しながら、ループ処理や、条件分岐の実践的な使い方を学びます!
- ExcelからSharePointリストにデータを転記させる方法
- ループや条件分岐の使い方
- フィルタークエリの具体的な使い方
Youtube動画で見たい方は、こちらからどうぞ!
ExcelからSharePointリストに転記するフローの全体像
自動化する業務フローの例
今回は、以下のような業務フローの自動化を想定します。
- 社内で使う案件管理システムから、RPAで毎日Excelでデータを出力する(自動化済)
- ExcelをSharePointリストに転記する ←今回自動化する部分
今回は、ExcelからSharePointリストへの転記を、Power Automateで自動化していきます。
例えば以下の図のように、ProjectID 6、7はExcelには存在しますが、SharePointリストには存在しません。
そのためProjectID 6、7は、SharePointリストに新規追加します。
一方ProjectID 5は、ExcelにもSharePointリストにも存在しますが、Excelではステータスが受注済に変わっています。
そのためSharePointリストのProjectID 5は、データを更新するようにします。
今回の業務の自動化は、どのようにPower Automateフローの流れを組み立てればよいのですかな?
Power Automateフローの全体像
例えば以下のようなフローが考えられます。
- トリガーとして毎日1回(朝10時など)に開始する
- システムで出力されたExcelのデータを取得する
- ②で取得したデータ(アレイ型)をFor Each(それぞれに適用する)というループのアクションで、1件ずつ処理する
- ループでは、アレイのデータ、今回の場合Excelデータを1件ずつ処理することができます。
- ループ処理の中で、前のアクションで取得したExcelのProjectIDと一致するSharePointリストのデータを取得する
- 条件分岐で前のアクションで、ProjectIDが一致するSharePointリストのデータが取得できたかを判定する
- 判定の結果、データが取得できた場合(同じProjectIDのデータがすでにある場合)はリストを更新、ない場合はリストに新規登録をする
- ⑤~⑦の処理をExcelの行数分ループで実行したら、フローは終了
これがPower Automateフロー全体の流れになります。
それでは実際にPower Automateフローを実装していきましょう!
Power Automateフローの具体的な実装方法
データの準備(ExcelとSharePointリスト)
転記先のSharePointリストは、以下のようなものを用意しています。
転記元のExcelテーブルは、以下のようなものを用意しました。
SharePointリストとの差分としては、ProjecIDの6と7が新規に追加されたことと、ProjectID 5のStatus列が更新されていることですな!
1.Power Automate画面を開き、作成からスケジュール済みクラウドフローを選択し、繰り返し間隔を1日にして作成します。
これがフローのトリガーとなります。
Excelからデータ取得する方法
1.次に「Excel」の「表内に存在する行一覧表示」アクションを追加し、Excelテーブルデータを取得します。
2.「詳細パラメーター」>「DateTime形式」は、ISO8601に設定します。
※デフォルトではシアルナンバーとなっています。
3.ここまでで一旦保存してテストしてみます。
「表内に存在する行を一覧表示」を選択し、「未加工出力の表示」をクリックしましょう。
4.Power AutomateでExcelデータを取得した際は、以下のようなオブジェクトのアレイ型として、出力データが得られます。
ループ(For Each)とは?
For Each(ループ)処理はアレイ型のデータを1つずつ取り出して処理することができます。
前のアクションで取得したExcelデータの行数分ループ処理を行い、一件ずつループ内のアクションで処理していきます。
例えばExcelデータが5行分取得されたら、5回ループ処理が回るというわけですな!
ループの詳しい解説については、以下の記事も参考にしてください。
1.Power Automateの編集画面に戻り、「コントロール」の「それぞれに適用する」アクションを追加します。
2.ループさせるデータは、動的なコンテンツから、前のアクション(Excelの表内に存在する行一覧表示)の「Body/Value」を設定します。
フィルタークエリとは?
1.次にSharePointの「複数項目の取得アクション」を使って、SharePointリストのデータを取得します。
この時1つ1つのExcel行のデータで取得されたProjectIDの値と一致するSharePointリストのデータを取得します。
このような時フィルタークエリというものを使って、条件に当てはまるデータのみを取得することができます。
2.詳細パラメータから、フィルタークエリに以下のように設定します。
3.また、上から順に取得を1に設定します。
フィルタークエリーの書き方の基本は、以下のようになります。
今回の場合SharePointリストのProjectID列が、Excelで取得されたProjectIDの値と一致するものを取得するため、以下のように書きます。
ProjectID eq @{items(‘それぞれに適用する’)?[‘ProjectID’]}
今回は1行だけ取得できれば良いのに、なぜ項目の取得の方を使わないのですかな?
項目の取得の場合、SharePointリストのIDを指定する必要があります。
今回は、ProjectID列でフィルタークエリを使いたいため、複数項目の取得のアクションを使います。
4.ここまでで一旦保存して、テストしてみましょう。
複数の項目の取得の結果を見ると、最初の1~5まではすでにSharePointリストにデータがあるため、出力のValueで一件のデータが取得されています。
一方ループの6回目と、7回目は、SharePointリストにデータがないため、出力のValueでは何もデータが取得されていないということが分かります。
このような感じで、フィルタークエリーを使ったSharePointリストデータの取得ができました。
条件分岐とは?
最後に条件アクションで、前のアクションのデータが取得できたかを判定し、後続のアクションでSharePointリストへの新規データ登録か、データ更新かのアクションに分岐します。
条件分岐を使うと、条件に一致するかどうかで後続のアクションを分けることができます。
条件分岐の詳細については、以下の記事もご参考ください。
1.複数項目の取得の後に、コントロールの「条件」アクションを追加します。
条件の内容は前のアクションでSharePointリストのデータが取得できたかどうかです。
2.左側には関数式(fx)から、以下のEmpty関数式を入力し、追加ボタンをクリックします。
empty(outputs(‘複数の項目の取得’)?[‘body/value’])
※Empty関数の中に、動的なコンテンツから、前のアクション「複数項目の取得」のBody/Valueを選択します。
3.比較演算子は「is Equal to」、比較する値はTrueです。
複数項目の取得でデータが取得されなかった場合、つまり既存のProjectIDのデータがない場合、Empty関数式の結果はTrueとなり、条件の判定結果もTrueとなります。
4.Trueの方には、SharePointリストの「項目の作成」アクションを追加します。
5.Falseの方には「項目の更新」を追加し、それぞれ対象のリストを選択し、動的なコンテンツから、Excelの各列のデータを設定していきます。
6.「項目の作成」は、以下のように設定します。
ProjectIDは、Excelからは文字列で取得されますが、SharePointリストは数値型なので、関数式の入力でInt関数を使います。
Int(items(‘それぞれに適用する’)?[‘ProjectID’])
※Int関数式の中に、動的なコンテンツでExcelのProjectIDを入れると、ProjectIDの値が文字列型から数値型に変換されます
7.「項目の更新」の方も、以下のように設定します。
この時、複数項目の取得の結果が1レコードだけであっても、アレイ型のデータとして出力されるため、For Eachに入りますが、あまり気にしなくても大丈夫です。
8.しかし、For Eachを使わないようにしたい場合、以下の関数式を使って設定します。
first(outputs(‘複数の項目の取得’)?[‘body/value’])?[‘ID’]
9.フローが完成したので、テスト実行してみると、Excelのデータが、SharePointリストに反映されます。
フローの実行履歴をみると、ProjectID 1~5(ループの5/7まで)は、既にSharePointリストにデータが存在しているので、項目の更新の方が実行されます。
一方、ProjectID6と7(ループの6/7以降)では、複数項目の取得でデータが取得されないので、条件分岐はTrueとなり、項目の作成の方が実行されます。
今回のフローの実装ではループや、条件フィルタークエリと重要な概念がたくさん入っているので、是非学習に役立ててください!
最後に
この記事では、Power Automateで、ExcelからSharePointリストに転記するフローの実装を解説しながら、ループ処理や、条件分岐の実践的な使い方を学びました。
ExcelやSharePointリストで複数のレコードを取得する時、フィルタークエリを使えば、条件に数レコードのみを取得できます。
またループ、条件分岐は、Power Automateを実装する上での基礎知識となるため、是非使い方を覚えておきましょう!