Power Automate で SharePoint リストのデータを Excel にエクスポートするアプローチを整理してみる


# はじめに

SharePoint リストのデータを Power Automate で Excel にエクスポートするアプローチはいくつかあるため、今回は、これまで書いた記事含め、情報を整理したいと思います。

まず、SharePoint リストの標準の機能として、Excel にエクスポートする機能があるため、特別な要件がなければこちらを使うのが良いと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/7dae4c46-728e-211a-5746-48769f9f1eb0.png)

※もちろん、Microsoft Dataverse についてもモデル駆動型アプリから Excel にエクスポートすることが可能です

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/fdcabbbe-36cb-b57b-86f0-46b850c2ad80.png)

# CSV にエクスポート

フローの全体感はこんな感じでシンプルです。トリガーは手動にしていますが、必要に応じてスケジュールトリガーなど、目的に応じて変更ください。個人的にこの方法が一番簡単で、また、選択アクションを使うのでパフォーマンスも良いかなと思っています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/b0832786-83b5-3a17-b2b9-5dbbeb491ceb.png)

まず、CSV エクスポートしたいリストからデータを取得します。必要に応じてフィルターをします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/1be9b25f-0667-2a2d-5225-b2e52025cf80.png)

次に、［選択］アクションで、CSV 出力したい列をマッピングします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/decd71a5-23ba-127d-c576-9fb8a9394d52.png)

［選択］アクションの出力を ［CSV テーブルの作成］アクションに渡します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/7a9d781a-3e56-7c35-3f07-7e09cbcb38c6.png)

最後にファイルを任意の場所に保存します。
ファイルコンテンツには、［CSV テーブルの作成］アクションの出力を渡します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/38a74811-a93e-5773-9efa-00963ab0a275.png)

また、Power Automate は UTF-8 で処理されるため、Excel にこのファイルを UTF-8 であることを認識させるため、コンテンツの頭に以下を追加しておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/c064cb9e-166f-df3d-5006-b79b191501df.png)

```
decodeUriComponent('%EF%BB%BF')
```

実行してみると、問題なく CSV ファイルが作成されました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/78cb61d4-edfc-b0c3-730d-bef9e31a8653.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/06b15155-b939-45e9-a615-75034ee75af1.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/88b2b006-0f59-e6d8-f9ea-8682c20da25b.png)

# Excel ファイルを作成してテーブルを作成してエクスポート

Reza Dorrani さんが動画で紹介していた方法です。個人的にこんな方法もあったのかという感じです。
ファイルを作成し、テーブルを作成し、Graph API を使ってテーブルにデータを追加します。こちらもパフォーマンスは良いと思います。ただ、Graph API のリクエスト方法にクセがあるため、一つ目の方法と比較すると実装難易度は高くなると思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/9a2758d9-e2e7-4d51-3ad9-eabd02348acb.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/5955f565-8d90-dc58-b39d-f06ee9a8e5bc.png)

https://learn.microsoft.com/ja-jp/graph/api/resources/excel?view=graph-rest-1.0#add-a-table-row

以下は、新規作成したファイルの id の取得をしている処理です。これは簡単には思いつかないと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/427ceaa8-c149-c406-a050-c3d9097f5ff7.png)

```
split(actions('テーブルの作成')?['inputs']?['parameters']?['file'],'.')?[1]
```

# その他アプローチ

他にも、以下記事で紹介したようなアプローチがあります。以前記事を書きましたが、今思うとちょっと難しい方法になっちゃったと思います。また、エクスポートをするデータの数が少なければそんなに気にならないと思いますが、パフォーマンス的にも上の二つと比べると悪いと思います。

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

https://qiita.com/Takashi_Masumori/items/1fb8ec3c09b399473b2d

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/f9241112-046c-a554-6de8-a69f4a182f88.png)

ただ、単にデータをエクスポートするだけでなく、追加したデータを基に Excel の数式で計算をしたり、テーブル以外のセルに動的な情報を渡したいときは、あらかじめテンプレートファイルを作成しておき、そのファイルに対してデータをエクスポートしたり、必要に応じてOffice スクリプトも利用しながらセルに値を渡したりして新規ファイルを作成するということもあると思います。

そのような要件がある場合、上記記事で紹介したような方法を使うのも一つの選択肢になると思います。私は毎月、旅費や日当の計算を行う際、 Excel テンプレートを利用しています。具体的には、月初に前月のデータを Dataverse から取得し、Excel テンプレートのテーブルにエクスポートしたりセルに値を代入したりしています。あらかじめ記載している Excel の数式で合計が計算されます。そして、テンプレートを基に新規ファイルを作成し、税理士さんに共有しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/50991398-d88b-d304-7a76-42f3966be0bd.png)

テーブルにエクスポートする処理の個所は、Reza Dorrani さんの方法、つまり、Graph API に置き換えた方がいいかなと思いつつ、上記ケースでは、エクスポートするデータの件数は数件ほどであり、今のままでも特に不便さは感じていないため、一旦そのままにしています。

ただ、データの件数がそれなりに多い場合やパフォーマンスを追求する場合は、Excel のテンプレートを使いつつ、Office スクリプトと Graph API を組み合わせるのが良いかと思います。

# まとめ

今回は、SharePoint リストのデータを Power Automate で Excel にエクスポートするアプローチについて情報を整理してみました。出来る限り標準の機能を使いつつ、そちらでは要件を満たせない場合は、実装難易度やパフォーマンス等を考慮しつつ、いずれかのアプローチで実装するのが良いかと思います。少しでも参考になれば幸いです。