本日はPowerAppsのアプリ画面から、エクスポートボタンをクリックして、ギャラリーに表示されているSharePointリストデータを出力する方法を解説します!
PowerAppsのギャラリーのデータをエクスポートする方法を、以下の2つに分けて考えます。
- SharePointリストを全件出力する場合
- アプリ上でフィルター等で絞り込まれたデータを出力する場合
Power AppsとPower Automateの連携は、作業の効率化アップにつながりますので、是非活用してみてください!
Power Automateでできることや、Power Appsと連携した活用事例については、以下の記事を参考にしてください。
- Power AppsのデータソースとしているSharePointリストデータを出力するため、考えられる方法
- SharePointリストを全件出力する具体的な実装手順
- ギャラリーのデータを出力する具体的な実装手順
YouTube動画で見たいかたは、こちらからどうぞ!
PowerAppsのボタンで、ギャラリーのデータをエクスポートする方法
初めに、PowerAppsのギャラリー(SharePointリストのデータ)をエクスポートする方法について、考えらえる実装を考えてみます。
このとき、SharePointリストを全件出力する場合と、ギャラリーに表示されているデータのみ出力する場合に分けて考えます。
まず、SharePointリストデータを全件出力する場合を考えます。
例えば報告会の前などに、不定期にデータ全件を出力したい場合はトリガーがないため、PowerAutomateを使わず、SharePointリストから直接手動でデータをエクスポートするのが簡単です。
一方、毎日SharePointリストを全件バックアップしたい場合などは、トリガーがあるため、PowerAutomateを使うとよいです。
このときのトリガーはアプリではなく、例えば毎日朝7時に、SharePointリスト全件を出力する等のPowerAutoamteフローを作成します。
トリガーがない不定期な出力の場合は、Power Automateさえ必要ないよ。
次に、Power Appsのギャラリーに表示されているデータのみ出力したい場合を考えます。
このときはPower Appsのアプリ画面に設置したボタン等のクリックをトリガーに、Power Automateフローを実行します。
Power Automateフローの実装方法はいくつかあると思いますがは、ここでは以下2つを紹介します。
- 全データを引数でPowerAutomateに渡す方法
- 出力したいデータのIDを引数でPowerAutomateに渡す方法
1つ目の、全データを引数で渡す方法のイメージは、下図のようになります。
Power Appsのギャラリーに表示されている、Date、Item列のデータをConcat関数を使い、カンマ区切りですべて結合した1つの変数を作り、Power Automateに渡します。
Power Automateに渡したデータを、SharePointフォルダ等にCSV出力します。
2つ目の、出力するデータのIDを引数で渡す方法のイメージは、下図のようになります。
表示されているデータのID、この場合1と3をConcat関数を使い、カンマ区切りですべて結合した1つの変数を作り、PowerAutomateに渡します。
Power AppsからPower Automateに渡せる引数は、テキスト型のみなので、テーブルデータはConcat関数で1つの変数とする
Power Automateは引数として、対象データのIDを受け取り、IDでSharePointリストにフィルターをかけ、対象データをSharePointフォルダのExcel等に出力します。
SharePointリストを全件出力する場合
SharePointリストを直接エクスポートする方法
SharePointリストを全件エクスポートする方法は簡単です。
1.SharePointリストを開き、エクスポートから、ExcelかCSVを選択します。
2.ExcelやCSVを開くと、以下のように全レコードがエクスポートされます。
Power Automateでエクスポートする方法
次に、Power AutomateでSharePointリスト全件を出力する方法です。
- スケジュール(繰り返し)をトリガーにして、毎朝6:00等にフローを実行する
- SharePointリスト全件のデータを取得する
- SharePointの指定したフォルダに、②で取得したSharePointリストデータをCSV等で出力する
1.Power Automateを開き、テンプレートから、SharePointで検索します。
2.「毎週SharePointリストアイテムをCSVにコピーする」を選択します。
3.必要なコネクタに接続>続行をクリックすると、フローが自動的に作成されます。
フローの内容を解説していきます。
4.「Recurrence(繰り返し)」を開き、Power Automateフローを実行するスケジュールを設定します。
- 間隔・頻度:データ出力(フロー実行)の頻度を設定
例)1日、1週間 - タイムゾーン:タイムゾーンを選択
例)UTC+9:00 大阪、札幌、東京 - 設定時刻(時間・分):データ出力(フロー実行)の時間と分を設定
例)6:00
この一番上に設定された「Recurrence(繰り返し)」がトリガーとなり、Power Automateフローが実行されます。
今回の場合、毎朝6:00にフローが実行されます。
5.次のアクションは、SharePointの「Get items(複数項目の取得)」です。
ここで、出力するSharePointリストを設定します。
- サイトのアドレス:出力するSharePointリストがあるサイトを選択
- リスト名:出力するSharePointリストを選択
一番上で設定したトリガーでPower Automateフローが開始され、その後実行するアクションを下に追加します。
設定したアクションは、上から順に実行されていきます。
6.次のアクションでは、データ操作の「Create CSV table(CSVテーブルの作成)」でCSVデータを作成します。
この時設定するデータは、前のステップ「Get items(複数項目の取得)」で取得したSharePointリストデータが自動で設定されています。
7.次のアクションでは、データ操作の「Get current time(作成)」で、協定世界時 (UTC)の現在時刻が設定されています。
これは出力するファイル名に、出力した日時を設定するために作成しています。
ここでは、関数式で「utcnow(‘M’)」と設定しています。
この時「August 31」等と出力されますが、UTC時間(日本時間-9時間)日付で出力されることに注意しましょう。
日本時間で出力する方法は、次の章で解説していきます。
8.最後のアクションで、OneDriveの「Create file(ファイルの作成)」が自動で作成されていますが、これをSharePointの「ファイルの作成」に変更します。
Create fileの上で「+」>「アクションの追加」をクリックします。
SharePointで検索し、「ファイルの作成」を選択して、アクションを追加します。
9.「ファイルの作成」で、出力するファイルの設定をします。
- サイトのアドレス:ファイルを出力するSharePointサイトを選択
- フォルダーのパス:ファイルを出力するフォルダーパスを選択
- ファイル名:出力するファイル名を設定
SharePoint list items at (出力日).csv - ファイルコンテンツ:出力するデータを設定
7.のCreate CSV tableで取得したデータを設定
ここでファイル名、ファイルコンテンツは、元々自動で作成されていたOneDriveの「Create file(ファイルの作成)」からコピペすると楽です。
前のステップの「データ操作」で作成した「CSVテーブル」、「UTC時刻」のデータを、「動的コンテンツ」で設定することができます。
10.OneDriveの「Create file(ファイルの作成)」を削除し、「保存」をクリックします。
「テスト」をクリックし、フローをテスト実行してみます。
11.テスト実行が成功したら、「ご利用のフローが正常に実行されました。」と表示されます。
12.ファイル出力先に指定したSharePointフォルダを見ると、csvファイルが作成されているので、開いて確認してみます。
13.このように、適切にファイルが出力されていることが確認できました。
出力先がSharePointフォルダではなく、OneDriveのままでいい場合は、最後のアクション修正さえ必要ないよ!
フィルター等で絞り込んだデータを出力する場合
次に、ギャラリーで表示されているデータのみ出力したい場合は、Power Appsのボタンクリック等をトリガーに、Power Automateフローを実行する必要があります。
1.Power Appsの編集画面でボタンを設置し、ボタンを選択した状態で、「アクション」>「Power Automate」をクリックします。
2.「フローの追加」>「フローを新規作成する」から、新しいPower Automateフローを作成します。
フローの実装方法について、ここでは2つ紹介していきます!
(方法1)ギャラリーのデータ全件を引数で渡す方法
最初に、ギャラリーのデータ全件を引数で渡す方法です。
- Power Appsのボタンをトリガーにして、フローを実行する
- フロー実行時、Power Appsから、ギャラリーの全データを1つの変数にして、引数で渡す
- SharePointの指定したフォルダに、②で取得したギャラリーの全データをCSVで出力する
1.トリガーは自動的にPower Appsが設定されています。
次のアクションは「+新しいステップ」から、SharePoint>ファイルの作成を追加します。
2.SharePointのファイルの作成で、ギャラリーのデータを出力する場所と、コンテンツ(データの中身)を設定します。
- サイトのアドレス:ファイルを出力するSharePointサイトを選択
- フォルダーのパス:ファイルを出力するフォルダーパスを選択
- ファイル名:出力するファイル名を設定
- ファイルコンテンツ:出力するデータを設定
3.ファイル名は、Power Appsから出力時の日時を引数で渡します。
動的なコンテンツから、PowerAppsで確認を選択し、その後ろに、「.csv」と入力します。
ファイル名を”Backup.csv”等の固定名でつけると、2回目以降、同じ名前のファイルで出力できない(あるいは上書き設定する)ため、出力日時でファイル名をつけるのが便利です。
4.ファイルコンテンツも、Power Appsから全データを引数で渡しますが、このまま出力すると文字化けすることがあるため、式を選択し、以下のような関数式を設定し、OKをクリックします。
concat(decodeUriComponent(‘%EF%BB%BF’),【PowerAppsで確認】)
※【PowerAppsで確認】の場所は、動的コンテンツからPowerAppsで確認を選択します
5.フローが完成したので、フロー名を変更し、「保存」をクリックし、Power Apps画面に戻ります。
6.Power AppsのExportボタンの「OnSelect」プロパティで、以下3つの関数式を設定します。
- ClearCollect(ExportCol, 【ギャラリー名】.AllItems);
- Set(ExportData, Concat(ExportCol, 【列名1】 & “,” & 【列名2】 & Char(13)));
- 【フロー名】.Run(Today() & “Galdata”, ExportData);
①の関数式で、ギャラリーのデータをコレクション「ExportCol」に一旦格納しています。
②の関数式で、グローバル変数「ExportCol」に、コレクションから必要な列データを入れ、「,(カンマ)」で区切り、レコードの終わりに「Char(13)(改行コード)」を入れて、1つのテキスト型データにしています。
③で作成したPower Automateフローを実行し、ファイル名(今日の日付&Galdata)と、②で作成したグローバル変数「ExportCol」の2つの引数を渡しています。
- Power AppsからPower Automateにデータを渡すため、変数の設定はUpdateContextではなく、グローバル変数を作成するSet関数を使う
- Power Appsにはテキスト型のデータしか渡せないため、Concat関数でデータをカンマ区切りにして、1つのテキストデータにする
- レコードの終わりに「Char(13)(改行コード)」を入れる
7.これで実装は完成したので、Exportボタンをクリックして、ファイルが出力されていることを確認します。
8.CSVファイルを開くと、適切にデータが出力されていることが確認できます。
(方法2)ギャラリーのデータのIDを引数で渡す方法
ギャラリーのデータのIDを引数で渡す方法です。
- Power Appsのボタンをトリガーにして、フローを実行する
- フロー実行時、Power Appsから、ギャラリーのIDデータを1つの変数にして、引数で渡す
- ②のIDデータをPower Automateで配列にする
- Excelのワークシート、テーブルを作成する(Excelファイルは事前に作成)
- ③のIDデータ(配列)を1つずつSharePointリストのIDと比較し、一致したレコードを、④で作成したExcelテーブルに追加する
- SharePointの指定したフォルダに、①で取得したデータをCSVで出力する
1.「+新しいステップ」から、「変数を初期化する」を選択するを追加します。
ここでいったん、Power Appsから渡した引数のIDデータを文字列に格納します。
- 名前:AppData(任意の変数名を設定できる)
- 種類:「文字列」を選択
- 値:動的なコンテンツから、「PowerAppsで確認」を選択
2.もう一つ「変数を初期化する」アクションを追加し、前のステップで作成した変数のIDデータを、配列にします。
- 名前:IDarray(任意の変数名を設定できる)
- 種類:「アレイ」を選択
- 値:式で、「split(【AppData】,’,’)」と設定
※【AppData】は動的なコンテンツから、前ステップの変数を初期化で作成した変数名を選択します
- カンマ区切りのIDデータ(1,3,4..)を配列にするには、split関数を使い、カンマ区切りで分割します。
- 受け取った引数を直接配列にできないため、1つ前のステップで一旦、文字列の変数に格納します。
3.最終的にファイルを出力するSharePointフォルダに、Excelファイルを作成しておきます。
4.「Excel Online」>「ワークシートの作成」アクションを追加し、3.で作成したExcelファイルに、データ出力用の新しいワークシートを作成します。
- 場所:ファイルを出力するSharePointサイトを選択
- ドキュメントライブラリ:ファイルのフォルダーパスを選択
- ファイル:ワークシートを作成するファイル名を設定
- 名前:以下の式を設定
- 「formatDateTime(addHours(utcNow(),9), ‘yyyyMMddHHmmss’)」
2回目以降、同じ名前でワークシート名を作成することはできないため、ファイルを出力した日時をワークシート名に設定した
5.「Excel Online」>「テーブルの作成」アクションを追加し、4.で作成したワークシートに、テーブルの列を作成します。
- 場所:ファイルを出力するSharePointサイトを選択
- ドキュメントライブラリ:ファイルのフォルダーパスを選択
- ファイル:テーブルを作成するファイルを選択
- 表の範囲:動的なコンテンツから、ワークシートの作成>名前を選択し、後ろに「!A1:B1」と入力
※出力するデータ列分の列を作成する 例)2列ならA1:B1 - テーブル名:Listと入力し、後ろに以下の式を設定
formatDateTime(addHours(utcNow(),9), ‘HHmmss’) - 列名:出力するデータの列名をカンマ区切りで設定
例)Date,Item
- データを格納するためのテーブルと、列名をあらかじめ用意しておく
- 2回目以降、同じ名前でテーブルを作成することができないため、ファイルを出力した日時でテーブル名を設定した
6.「コントロール」>「Apply to each」アクションを追加し、「以前の手順から出力を選択」に動的なコンテンツから、2.の手順で追加した「変数」IDarraを選択します。
7.Apply to eachの中に、「SharePoint」>「項目の取得」を追加します。
- サイトのアドレス:ExcelファイルがあるSharePointサイトを選択
- フォルダーのパス:Excelファイルがあるフォルダーパスを選択
- ID:動的なコンテンツから、Apply to eachの「現在のアイテム」を選択
Apply to eachを使うと、配列データを1つずつ処理できます。
ここでは、ギャラリーに表示されているIDの配列データ(例:1,3…等)を1つずつ渡し、SharePointから対象レコードを取得→Excelの行を追加という処理を、IDの数分繰り返し行います。
8.Apply to eachの中で、「Excel Online」>「表に行を追加」アクションを追加し、7.で取得したSharePointリストデータを、出力先のExcelファイルの5.で作成したテーブルに追加します。
- 場所:ExcelファイルがあるSharePointサイトを選択
- ドキュメントライブラリ:Excelファイルがあるフォルダーパスを選択
- ファイル:Excelファイル名を選択
- テーブル:動的なコンテンツから、テーブルの作成>テーブル名を選択
- 行:以下のように記載する
{
“列名1”: 【項目の取得】,
“列名2”: 【項目の取得】
}
※【項目の取得】は動的なコンテンツから、項目の取得の対象データを選択
- Excelの表に行を追加では、「行」に、追加するデータを設定する
- ここでは{}で囲い、”列名1″:【値1】,”列名2″:【値2】…のように記載する
- 【値X】には動的コンテンツから、項目を取得で対象の列データを選択する
9.これでフローが完成したため、フロー名を変更し「保存」をクリックして、フローを閉じます。
10.Power AppsのExportボタンの「OnSelect」プロパティで、以下3つの関数式を設定します。
- ClearCollect(ExportCol, 【ギャラリー名】.AllItems);
- Set(ExportID, Concat(ExportCol,Text(ID), “,” ));
- 【フロー名】.Run(ExportID)
11.これで実装は完成したので、Exportボタンをクリックして、出力先のファイルが更新されていることを確認します。
12.Excelファイルを開いてみると、新しいワークシート、テーブルが作成され、適切に対象のSharePointリストデータが出力されています。
最後に
本日はPowerAppsのアプリ画面から、ボタンをトリガーにギャラリーのデータをエクスポートする方法を紹介しました。
難しい場合は、1つ目の全データを渡す実装の方が簡単だよ!
今後も、Power Automateを使った実践的な方法を紹介していきます!