自動化
PR

【Power Automate】Microsoft Formsの添付ファイル(ファイルアップロード)を自動で取得・保存する方法

sanane
記事内に商品プロモーションを含む場合があります

はじめに

この記事では、Power Automate を使って Microsoft Forms に提出された添付ファイルを、OneDrive の好きなフォルダーへ自動で取得・保存する方法を、初心者がつまずきやすいポイントを押さえながら解説します。

Microsoft Forms には「ファイルのアップロード」という質問があり、アンケートや申請フォームでファイルを提出してもらえます。

ただ、提出されたファイルは Forms 作成者の OneDrive の奥深く(「アプリ」フォルダーの中)に自動で振り分けられるため、毎回そこから探して整理するのは面倒です。

この記事のフローを作れば、提出と同時に好きなフォルダーへ自動でまとめられます。実際に動かして検証した結果もあわせて紹介します。

この記事は 「Forms の添付ファイル」 を保存する方法です。メールに届いた添付ファイルを自動保存したい場合は、次の記事をご覧ください。

あわせて読みたい
Power Automateでメール添付ファイルを自動保存する方法|Outlook→OneDrive/SharePoint
Power Automateでメール添付ファイルを自動保存する方法|Outlook→OneDrive/SharePoint

このフローでできること

  • Forms にファイルが提出されたら、自動で指定フォルダーへコピー保存する
  • 複数ファイルが提出されても、1つずつループして全部保存する
  • 提出ファイルを1か所にまとめて、後から探しやすくする

事前準備:ファイルアップロード質問付きのフォーム

まず、トリガーで選択するための「ファイルのアップロード」質問を含む Formが必要です。今回は検証用に「書類提出フォーム(ファイル添付)」を作成し、テキスト質問(申請者名)と、ファイルのアップロード質問(提出書類)を用意しました。複数ファイルを試せるよう、ファイル数の上限は3にしています。

ファイルのアップロード質問を含むMicrosoft Formsのデザイン画面

提出ファイルの保存先は、フォームの種類で変わります。個人(自分の)フォームは OneDrive for Businessグループフォームは SharePoint サイトに入ります。今回は個人フォームを前提に、OneDrive のコネクタで取得します。

フローの全体像

作成するフローは次の構成です。最大のポイントは、ファイルアップロードの回答が「JSON という文字列」で渡ってくるため、そのままでは扱えず「JSON の解析」と「Apply to each(繰り返し)」を挟む点です。

フローの構成

新しい応答が送信されるとき(Forms) → ② 応答の詳細を取得する → ③ JSON の解析 → ④ Apply to eachファイル コンテンツの取得ファイルの作成

Formsの添付ファイルを取得・保存するフローの全体像

フローの作成手順

「自動化したクラウド フロー」を作成し、次の順にアクションを追加していきます。

トリガー「新しい応答が送信されるとき」

トリガーに Microsoft Forms の「新しい応答が送信されるとき」を選びます。フロー作成のダイアログで、対象の Form ID(今回は「書類提出フォーム(ファイル添付)」)を指定します。

トリガー「新しい応答が送信されるとき」を選ぶダイアログ
応答の詳細を取得する

トリガーだけでは回答の中身(ファイル情報)が取れないので、Microsoft Forms の「応答の詳細を取得する」を追加します。フォーム ID に同じ Form を指定し、応答 ID にはトリガーの動的コンテンツ「応答 ID」を入れます。

応答の詳細を取得するアクションの設定
JSON の解析(最大のポイント)

ファイルアップロードの回答は、次のようなJSON 文字列(配列)として渡されます。ファイル名や、OneDrive 上のファイルを特定する id などが入っています。

[{"name":"sample.pdf","link":"https://.../sample.pdf","id":"01ABCXYZ","type":null,"size":12345,"referenceId":"ref-123","driveId":"b!driveid","status":1,"uploadSessionUrl":null}]

このままでは繰り返し処理できないので、「JSON の解析」アクションで配列に変換します。

Content に「応答の詳細を取得する」のファイルアップロード回答(提出書類)を入れ、Schema は「サンプル ペイロードを使用してスキーマを生成」をクリック、表示されたテキストボックスに上の JSON を貼り付けることで自動生成することができます。

JSON の解析アクションでContentとSchemaを設定した画面
Apply to each でファイル コンテンツの取得

「JSON の解析」の出力(Body)は配列なので、「それぞれに適用する(Apply to each)」で1ファイルずつ処理します。ループの中にまず OneDrive for Business の「ファイル コンテンツの取得」を置き、提出ファイルの中身を取り出します。ファイルの指定には、現在の項目の id(Body id)を使います。

ファイル コンテンツの取得アクションで項目のidを指定した画面
ファイルの作成で保存先にコピー

続けて同じループ内に OneDrive for Business の「ファイルの作成」を置き、保存先フォルダーにコピーを作成します。設定は次の通りです。

  • フォルダーのパス:保存したいフォルダー(例では /Attachments
  • ファイル名:現在の項目の name(Body name)
  • ファイル コンテンツ:「ファイル コンテンツの取得」の出力
ファイルの作成アクションでフォルダー・ファイル名・コンテンツを設定した画面

保存先フォルダーは事前に作成しておく必要があります。「ファイルの作成」はフォルダーを自動では作りません。存在しないパスを指定するとエラーになるため、先に OneDrive 側でフォルダーを用意しておきましょう。

実際に動かして検証

フローを保存し、フォームのプレビューから2つのファイル(PDF と Excel)を添付して送信しました。

フォームのプレビューで2つのファイルを添付して送信する画面

送信すると、フローが自動で起動し、約10秒で成功しました。

実行履歴でフローが成功している画面

実行詳細を見ると、「それぞれに適用する」が2回ループ(提出した2ファイル分)し、それぞれで「ファイル コンテンツの取得」「ファイルの作成」が成功していました。Forms はファイル名に提出者名を付ける仕様のため、保存名もそれを引き継いでいます。

Apply to eachの入力に2つのファイルが入りループしていることが分かる画面

「ファイルの作成」の詳細でも、保存先 /Attachments にファイルが作成されたことが確認できました。OneDrive を開くと、2つのファイルがしっかり保存されています。

ファイルの作成の出力。保存先フォルダーとファイル名が確認できる画面
SANANE
SANANE

「JSON の解析」さえ越えれば、あとは2つのアクションを置くだけ。複数ファイルも自動でループしてくれるので安心です!

つまずきやすいポイント

  • 回答は JSON 文字列:そのまま「ファイルの作成」に渡してもループ処理できません。必ず「JSON の解析」→「Apply to each」を挟みます。
  • 保存先フォルダーは先に作る:「ファイルの作成」はフォルダーを自動生成しません。
  • 個人フォームは OneDrive、グループフォームは SharePoint:保存元が変わるので、使うコネクタも変わります。
  • 同名ファイルの衝突が気になる場合は、ファイル名にタイムスタンプを足すなどの工夫をすると安心です。

ファイル名の重複が心配なら、「ファイルの作成」のファイル名に formatDateTime(utcNow(),'yyyyMMdd_HHmmss') などを連結すると、提出日時付きで保存できて上書きを防げます。

あわせて読みたい

Forms × Power Automate は、保存だけでなく通知や自動返信と組み合わせると一気に実用的になります。

メールに届いた添付ファイルを自動保存したい場合はこちら。

あわせて読みたい
Power Automateでメール添付ファイルを自動保存する方法|Outlook→OneDrive/SharePoint
Power Automateでメール添付ファイルを自動保存する方法|Outlook→OneDrive/SharePoint

Forms に回答が来たことをTeams に通知したい場合はこちら。

あわせて読みたい
Power AutomateでTeamsに自動通知する方法|Forms・SharePoint・メール起点で解説
Power AutomateでTeamsに自動通知する方法|Forms・SharePoint・メール起点で解説

回答者へ自動返信メールを送りたい場合はこちら。

あわせて読みたい
Microsoft Formsの回答者に自動返信メールを送る方法【Power Automate / 確認メール対応】
Microsoft Formsの回答者に自動返信メールを送る方法【Power Automate / 確認メール対応】

まとめ

  • Forms の添付ファイル保存は 「応答の詳細を取得 → JSON の解析 → Apply to each(取得 → 作成)」 の流れで作る
  • 最大のポイントは 「回答は JSON 文字列」。必ず「JSON の解析」で配列に変換する
  • 保存先フォルダーは事前に作成しておく

提出ファイルを1か所にまとめておけば、後の確認や共有がぐっとラクになります。ぜひ自分の業務フォームでも試してみてください。

記事URLをコピーしました