Power Automate for desktopでSharePointに保存されたファイルをローカルにダウンロードする

:::note info
この記事は、[Microsoft Power Automate Advent Calendar 2024](https://qiita.com/advent-calendar/2024/powerautomate) 13日の金曜日担当分の記事です:knife:
:::

## はじめに
業務改善の一環として、デスクトップの自動化を図るためにPower Automate for desktopを活用しています。

デスクトップ上の処理を自動化するための便利なアクションが様々あり、一部にはクラウドコネクタも存在します。

その中で「SharePoint」コネクタがあるのですが、今回はSharePoint(SPO)上のファイルをローカルにダウンロードしたい場面で使ってみました。

簡単な記事ですが、現場からお届けします🤖

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953195/4289fa4d-9cd7-f705-6c3c-397a9d6368d8.png" width=30%>

⚠️SharePointアクションはPower Automate Premiumライセンスが必要となります。

## どのような場面で使用したか
このアクションを使った業務シナリオとして、SPOドキュメントライブラリに保存されたCSVファイル等を、Excel Power Queryで加工し、その結果をWEBシステムに登録するといったものです。

元ネタとなるCSVファイル等がSPO上にあるため、クラウドフローで完結したいところですが、Excelでの加工や、WEBブラウザを介したシステム登録などかくかくしかじかで、一度ローカルにデータを保存したいと考えていました。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953195/3860ddf5-ef42-2478-6751-15f1a73e90d1.png" width=80%>

OneDriveアプリで元ネタが保存されているフォルダと同期をとる事も考えましたが、保存されたファイルの同期に時差が生じることもあり、処理がスムーズに進行しない場合もありました:rolling_eyes:

そのことについて、他の手段がないか検索していると、Power Automate for desktopでSharePointファイルをダウンロードする内容の記事を見つけ、同じように試してみたところ、滞りなくフローが完結するようになりました。

## アクションの設定

今回はSPOに保存されたCSVファイル「Masukarasu.csv」をデスクトップ上に作成するシナリオで進めていきます。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953195/972e8a16-1819-8e92-f7e8-18579f4da53f.png" width=50%>

使用するのは以下の2つのアクションです👇

- **SharePointアクション「パスによるファイルコンテンツの取得」**
- **ファイルアクション「バイナリデータをファイルに変換」**

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953195/9c58e31f-c405-e5af-6834-f492e803753c.png" width=70%>

### 1. ファイルコンテンツの取得
まず、1つ目のアクションでSPO上のファイルコンテンツを取得します。サイトのアドレスにはファイルが保存されたSPOサイトのアドレスを指定し、ファイルパスには取得したいファイルのパスを設定します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953195/da47b997-b8d7-7ac6-b3ed-f87557fcb0b0.png" width=70%>

### 2. ファイルの作成
次に、取得したファイルコンテンツを使用してファイルを作成します。「バイナリデータ」には、「パスによるファイルコンテンツの取得」アクションで生成された変数「GetFileContentByPathResponse」を設定し、「ファイルパス」には保存したいパス（ファイル名含む）を設定します。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953195/29c5421f-f0c8-16df-fd4a-4d7c9f15ebe8.png" width=70%>

結果として、SPO上のCSVファイルをデスクトップ上に作成することができました。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953195/ac0d0710-682a-7ee4-2fd7-3216be2e9bd6.png" width=60%>

## 複数のファイルや特定のファイル形式への対応も
### 複数のファイルの処理
プロセスによっては、一度に複数ファイルを取得し処理を進める必要がありました。Power Automate for desktopでは、その他のアクションを用いることで特定のフォルダ内のすべてのファイルを対象にしたり、条件に合うファイルだけを抽出したりすることができます。例えば、SPOの特定のフォルダにあるすべてのファイルを処理したいといったケースでは、「フォルダーの一覧」アクションを使い、SharePointフォルダーに含まれているファイル情報を取得することで対応できます。

### ファイル形式のチェック
処理するファイルの形式を限定したい場合もあります。例えば、テキストファイル（txt）だけを処理したいといったケースです。Power Automate for desktopでは、「if」という条件分岐のアクションを使うことで、ファイルの拡張子を調べて、処理するファイルの種類を絞り込むことができます。これにより、誤った種類のファイルが処理されてしまうのを防ぐことができます。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953195/55c94dcc-e2bd-99ac-3b7a-65e95c0e5716.png" width=80%>

## 最後に
Power Automate for desktopのクラウドコネクタを利用することで、WEB上のファイルもデスクトップフローの中で扱うことができます。

もっと良い方法があると思いますが、簡単に実装でき、今のところフローが安定して稼働しているのでとても助かっています。

クラウドフローで完結できるなら無理に使わなくても良いかと思いますが、市民開発者としては取れる手段が増えることで助けられることは多くあると思います。

簡単ですが、現場からは以上となります🤖