💻

Power Apps で CSV ファイルをインポートする

2022/03/14に公開

はじめに

Power Apps から CSV ファイルのデータを読み込みたいということがあります。Power Apps には インポート および エクスポート のコントロールがありますが CSV 形式には対応していません。

https://docs.microsoft.com/ja-jp/powerapps/maker/canvas-apps/controls/control-export-import?WT.mc_id=M365-MVP-5002941

これを実現するには Power Apps の 添付ファイル コントロールを使ってファイルを読み込み Power Automate で解析するという方法を使います。

実行方法

Power Automate

先に Power Apps から呼び出させる Power Automate を作成します。全体像はこんな感じです。

トリガーではパラメーターとして ファイル コンテンツ を受け取るようにします。これは V2 のトリガーでのみ使用することができます。

選択 アクションで取得したデータを解析して JSON 形式に変換します。

開始 の式は以下のようになります。

split(replace(replace(decodeBase64(triggerBody()?['file']?['contentBytes']), decodeUriComponent('%EF%BB%BF'), ''), decodeUriComponent('%0D'), ''), decodeUriComponent('%0A'))

少し複雑ですが次のようなことをしています。

  • BOM および CR を削除
  • LF を分割

マップ のそれぞれの値にはカンマ区切りした値を設定します。

split(item(), ',')?[0]

応答 アクションで結果を返します。通常 Power Apps に結果を返すときは Power Apps に応答する アクションを使うのですが、実は 応答 アクションを使うと高度な結果を返すことができます。今回は 選択 アクションの結果を返却します。Power Apps から結果を認識するためには JSON スキーマを指定する必要があります。

Power Apps

Power Apps には 添付ファイルボタン および動作確認のための データ テーブル コントロールを配置します。

添付ファイル コントロールは 挿入 からは追加できません。適当な SharePoint リストをデータ ソースとしてフォームを追加すると 添付ファイル コントロールが追加されるので、それをコピーしてきます。コピーしたらフォームは削除してかまいません。また 画像の追加 コントロールを使うこともできます。

ボタン コントロールの OnSelect プロパティでは 添付ファイル コントロールの値をパラメーターとして Power Automate を呼び出し UpdateContext で結果を変数に格納します。

UpdateContext(
    {
        Items: CSVUploader.Run(
            {
                file: {
                    name: First(FileUpload1.Attachments).Name,
                    contentBytes: First(FileUpload1.Attachments).Value
                }
            }
        )
    }
)

データ テーブル コントロールの Items プロパティに Items 変数を設定します。

実行結果

実行すると CSV ファイルを読み込んで表示できているのがわかります。

おわりに

ちょっとしたテクニックがいくつかありますが実用的ではないかと思います。注意点として 応答 アクションはプレミアム アクションであるため Power Apps の有償ライセンスが必要となります。

Discussion