【ワンランク上のPower Apps開発】 CSVインポート その① パターン紹介編

Power Apps 技術ブログ

はじめに

こんにちは。西村です。今回はPower Appsでのファイルインポートのパターンおよび実装サンプルを3回に渡ってご紹介します。
その①は、ファイルの種類および解析・取り込みのパターンのご紹介
その②は、CSVインポート、解析・取り込みをAutomateで行う実装サンプル
その③は、CSVインポート、解析をAutomate、取り込みをPower Appsで実装し、進捗確認プログレスバーを表示する実装サンプル

となります。

今回は、その① パターン紹介編となります。
Power Appsでのインポート要件についてはファイル種類や取り込み方法のパターンが何通りかあります。それぞれメリットデメリットがありますので、まずはそのあたりのご紹介です。

ちなみに今回本機能を追加した自社アプリはこちらで以前ご紹介しております。アプリの各種実装ポイントを掲載しております。
【ワンランク上のPower Apps 開発】人材スキル管理アプリを作成・運用・改修 | 株式会社エヌサーフ (nsurf.co.jp)

実装サンプル

その③ CSVインポート 解析をAutomate、取り込みをPower Appsで実装、進捗確認プログレスバーを表示する実装サンプル

インポート要件について

SPOをデータソースにする場合はリスト上でそのままグリッド編集も可能なので、管理者にそのように運用してもらうケースも多いかと思います。
しかし、SPOリストを触らせない前提で、ユーザー向けにインポートさせたいケースや数十件の登録がフォームからだと面倒なので一括で登録ができる機能がほしい。といった場合に今回のようなインポート機能の実装要望があります。

今回はCSVでのインポートをメインに進めておりますが、エクセルの場合も解析部分が異なるくらいで他の部分は本サンプル同様の実装が可能です。

ファイルの種類と解析のパターン

取り込み対象のファイル種類として、CSV、エクセル、マクロの比較です。メリデメは所感含まれてますのでご容赦ください。
ファイルのアップはPowerApps上で添付ファイルコントロールを利用してアップし、Automateへ渡す実装が前提となります。

ファイルプレミアムのみメリットデメリット
CSV・シンプルな内容であれば高速解析が可能(ループなしで)
・一時保管用ライブラリは不要
解析(JSON化)がカスタムになる
エクセル(.xlsx)・一般的なExcelOnlineコネクタで操作可能・大量だと若干遅い?
・テーブルしか読み取れない
・一時保管用ライブラリが必要
エクセル(.xlsx)/ マクロ(.xlsm)・マクロファイルはExcelOnlineコネクタでは利用不可だが、GraphAPIでExcel操作すれば高速な処理が可能(エクセルももちろんOK)有償版のみ利用可
・一時保管用ライブラリが必要

・エクセルファイル系の取り込み(ExcelOnlineコネクタ)
エクセルでの取り込みが一般的ですが、ExcelOnlineコネクタはテーブルしか読み込めないので、事前にテーブル化したフォーマットを用意し使ってもらう必要があります(アプリからDLして使えるようにするなど工夫すると良い)まあCSVの場合もマクロも同じくフォーマットが必要なのは同じですね。
ExcelOnlineコネクタで帳票のような決まったフォーマットのシートから読み取る場合は、各セルの値を別シートでテーブル作って参照させてそこから取得するか、フォーマットをそのままテーブル化するなどで読み取る必要があります。

・エクセルファイル系(マクロ含む場合)の取り込み(GraphAPI)
マクロを含むファイルの場合、ExcelOnlineコネクタでは読み込めないので、GraphAPIを使ってエクセル操作することで対応ができます。GraphAPIのエクセル操作なら高速な読み込みや書き込みが可能で、セル単位や範囲での指定も可能です。ただしこちらはプレミアムライセンスが必要です。

エクセル系はいずれもOneDriveかSPOライブラリなどの場所にファイルを(一時的にでも)配置して解析する必要があります。取り込み後不要なら削除する、他に見えないようにするなどの検討も場合により必要かと思います。

・CSVファイルの取り込み
CSVの場合は特に一時ファイルの配置は不要です。(文字列をそのまま解析する)
CSVの場合は文字コードがUTF-8であることが前提となります。(システム的にSJISなどは使えない)
また、文中に改行がありレコードの改行と同じコード(CRLF)だと解析できないのかなと思います。(深く調べてないですが) 
文中の改行が(CRかLF)でレコード改行と異なる前提であれば大丈夫ですが、ダブルクォーテ囲み&文中カンマやダブルクォーテありのタイプだと同様に解析が面倒だと思われます。(これも深くは調べてないです)そういった場合はエクセルのほうがカスタム解析が不要なので良いかもですね。

その他、別パターンとしてCSV文字列をそのままPowerAppsに渡して、Apps側で解析する以下のような実装例もあります。MVP:HIROさんの記事


→今回はCSVのシンプルな内容(文中改行はCR、ダブルクォーテ囲みはなし、文中のカンマもなし)という前提で取り込みサンプルを作ってみます。

取り込みのパターン

次にファイルの解析まではAutomateに任せたとして、データソースに登録する方法のパターンです。データソースはSPOとします。

取り込み方法メリットデメリット
Automateで登録SPOコネクタで登録一般的な実装なので基本部分は比較的楽
・エラーハンドルをしっかりやる場合は工数かかる
・アプリに返却までのタイムアウトが2分
・件数が多いとAPIコール数がかさむ
PowerAppで登録PowerAppへ応答でJSON文字列を返却
Patchで登録
・以前はカスタム解析(Ismatchなど)が必要だったが、JSONParse関数が使えるようになった
・アプリ側でエラーハンドル(内容チェックなど細かくやる場合も)がしやすい
JSONParse関数がまだ実験的機能である
PowerAppで登録(プレミアム版)応答アクション(プレミアム)でコレクションで返却
Patchで登録
・コレクションでそのまま使える
・エラーハンドル周りは上記同様
有償版のみの利用となる

・Automateでの登録
Automateでそのまま登録が楽そうですが、しっかりエラーハンドルやってそれをAppsへ返却する場合は結構工数かかるイメージです。また、ループ内で条件判定などいろいろやっていたらさらにAPIコール数がかさみます(通常プランで6000回/日・ユーザーなど制限があるため考慮必要)。
また、アプリから呼び出し→返却までの時間が2分を超えるとタイムアウトしアプリに返却できませんので考慮が必要です。(と言いつつ、次回ご紹介するサンプルです)

・Power Appsでの登録
解析したJSONをアプリに返却する方式の場合、プレミアム版なら応答アクションでコレクションにそのまま入れて使えますので一番いいですが、通常版だと文字列としてしか返せないため、従来はIsMatchなどでの解析のカスタム実装が必要でした。
が、最近JSONParse関数が実験的機能でリリースされたのでそれだと結構いい感じに使えます。またエラーハンドルなどもアプリ実装に慣れている人はこっちのほうがなどやりやすいのではと思います。(上記の次にご紹介予定)

おわりに

ということで、今回はインポート機能の際の取り込みや解析のパターンについて書きました。ほかにもパターンがあるかもしれませんがとりあえず主要なものを挙げております。
実際のインポートサンプルの投稿は次回投稿いたします。

次回【ワンランク上のPower Apps開発】 CSVインポート その② Automateで解析・登録編

【お知らせ】 Power Platform コンサルティングサービスのご提供を開始いたしました。

本サービスはPower Platform(主にPower Apps、Power Automate)をご利用のお客様において、開発時や運用時のお困りごとに対し、チャットやTV会議を用いてのQA対応やアドバイス、サンプルコードのご提供などの業務サポートを行い、お客様のDX化推進業務を強くサポートするサービスとなります。

導入事例

今回ご紹介したアプリや本ブログにご興味をお持ちになられましたら、技術支援や同様のカスタマイズ開発など、各種ご支援させていただきますので、お気軽に「お問い合わせフォーム」よりお問い合わせください。
今後も自社で開発したお役立ちアプリや技術支援を行ったアプリのご紹介など、定期的に更新を行ってまいります。

関連記事