Microsoft Forms で作成されたフォームでは、回答にファイルを添付することが可能となっています。この添付されたファイルは、個人に紐づくフォームでは OneDrive for Business に、チームに紐づくフォームではチームの SharePoint Online に保存されます。しかしながら、自動作成されるフォルダーにまとめて保存されるだけですので、そのファイルを後から探したりするのが手間になってしまいます。また、SharePoint を利用したドキュメント管理といえば、ファイルにメタデータを付けて管理したくなりますよね。

そこで、Microsoft Formsで回答と一緒にファイルを添付して送信し、それらの情報を基に、ドキュメント ライブラリでファイルにメタデータを付けて整理しながら保存したいなと考えました。Power Automate を利用することで、それっぽく実現できそうでしたので、方法を書き留めておきたいと思います。

ドキュメント ライブラリを作成

まずは、ファイルの格納先となるドキュメント ライブラリを作成しましょう。今回は簡単に「取扱い区分」「文書分類」「提出者」「概要」のような列を作成しておきました。

  • 取扱い区分(選択肢)
  • 文書分類(選択肢)
  • 提出者(個人)
  • 概要(一行テキスト)

最終的にはここにファイルを保存したいと思います。

フォームを作成

つぎに、ファイルを保存するのに必要な項目を Microsoft Forms で作成していきましょう。今回は、個人に紐づくフォームとして作成しますので、ここから添付されたファイルは、このフォームを作成しているユーザーの OneDrive for Business に保存されることになります。

アップロードされたファイルの保存場所も確認しておきましょう。自身の OneDrive for Business の中の「アプリ > Microsoft Forms > ファイル提出フォーム > アップロードしてください」の中にありました。「ファイル提出フォーム」は Microsoft Forms で作成したフォームのタイトル、「アップロードしてください」は設問のタイトルになっていますね。

ここに保存されるファイルを Power Automate によって先ほどのライブラリに移動したいと思います。

Power Automate でフローを作成

Power Automate で作成したフローは次のようになります。

処理の流れにそって順にポイントを紹介していきます。

まず最初は、Microsoft Forms の「新しい応答が送信されるとき」トリガーと「応答の詳細を取得する」アクションの組合せです。ここまでは Microsoft Forms を利用するときのテンプレートみたいな感じですね。

Microsoft Forms のフォームに添付されたファイルは、ファイル名や URL などが含まれた JSON 形式のデータで取得されるため、「JSON の解析」アクションを利用して使いやすくしておきましょう。このとき利用したスキーマーも紹介しておきます。

{
    "type": "array",
    "items": {
        "type": "object",
        "properties": {
            "name": {
                "type": "string"
            },
            "link": {
                "type": "string"
            },
            "id": {
                "type": "string"
            },
            "type": {},
            "size": {
                "type": "integer"
            },
            "referenceId": {
                "type": "string"
            },
            "driveId": {
                "type": "string"
            },
            "status": {
                "type": "integer"
            },
            "uploadSessionUrl": {}
        },
        "required": [
            "name",
            "link",
            "id",
            "type",
            "size",
            "referenceId",
            "driveId",
            "status",
            "uploadSessionUrl"
        ]
    }
}

今回のフォームでは、添付可能なファイル数は 1 つとなっていますが、Microsoft Forms の「応答の詳細を取得する」アクションから出力されるファイルの情報を含む JSON は配列形式となっています。そのため、データ操作の「作成」アクションで first 関数を利用して 1 つ分だけ取り出しておきましょう。以降で利用する情報はファイル名だけなので、name のみを出力するようにしました。

first(body('JSON_の解析')).name

この情報を利用し、Microsoft Forms のフォームによって OneDrive for Business の中に保存されたファイルの情報を取り出します。利用したのは「パスによるファイル メタデータの取得」と「ファイル コンテンツの取得」アクションです。

ファイルまでのパスを利用してファイルへアクセスできますので、途中まではベタ打ちで行い、ファイル名だけ先ほどの「作成」アクションの出力を利用しましょう。「ファイル コンテンツの取得」アクションは、「パスによるファイル メタデータの取得」アクションから出力される ID が利用できます。

あとは、ここまでの処理で得られた情報を基に SharePoint Online のライブラリにファイルを作成していきます。SharePoint の「ファイルの作成」と「ファイルのプロパティの更新」アクションを利用しましょう。

ここまでで一連の処理が完成しました。ファイルを作成するときにファイル名を変更したり、OneDrive for Business に残っている元のファイルを削除するなど、必要に応じて処理を変更したり付け加えたりすると良いと思います。

さて動作を確認してみましょう。

動作を確認する

Microsoft Forms のフォームからファイルを添付し送信すると、次のようにドキュメント ライブラリに保存されます。ちゃんとファイルのメタデータとして、フォームで入力した値も反映されました。

とりあえずは思った通りに動きました!うれしい!

さいごに

社内でもこうしたファイルを収集するような業務はありそうな気がしますし、提案書の共有などで、ユーザーがより簡単に SharePoint にファイルをアップできるようにも使えるかもしれませんね。

こうした基本となる処理を覚えておくと色々と応用が出来そうです。気になった方は試してみてください。