PowerAppsでギャラリーのデータをエクセルにコピペしたり、メールする方法【Copy関数、Concat関数、HTMLテキストコントロール】
PowerAppsのアプリのデータをコピーして、エクセルにペーストするやり方(Copy関数、Concat関数使用)とそれをメールするやり方(AIとHTMLテキストコントロール使用)をご紹介します。
(動画時間:9:57)
Udemy.comでオンラインコースを運営しています。
マイクロソフトPowerApps 中級編【SharePointで、実務で使える業務アプリの作り方:勤怠管理アプリ編】
⇒ 半額になる「ディスカウントリンクページ」へ
ギャラリーのデータを、エクセルにコピペとメールする完成形
こんにちは、リーンシグマブラックベルトのマイク根上です。
業務改善コンサルをしています。
PowerAppsでは色んな情報やデータを画面に表示できますが、
それらをコピペでアプリの外にエクセルなどで使ったり、
そのままメールで送れたら便利なのですが、
残念ながらそれを簡単にできる機能がないのです。
しかし、HTML等を使えばそれらをPower Automateなしで
実現する事ができます。
まずは完成したその動きを見てみましょう。

上図があるPowerAppsのアプリのレポート画面です。
画面左にギャラリーがあり、
購入日、部署名、承認金額、購入者の列がある購入履歴が表示されています。
その上のドロップダウンで月次の表示の切り替えができます。
そしてその右の「データのコピー」ボタンをクリックしてエクセルに行き、
ペーストするとさっきの値と全く同じ値がペーストされます。

この機能によってユーザーは
自由に更なる分析ができる様になるのです。
次はギャラリーデータをメールで送る方法です。
アプリに戻って画面の右に送信先と件名を入れるテキスト入力があり、
その下にメールの本文が表示されています。

ギャラリーで年月を変えると
それに応じて件名の年月と本文の表の数字が変わります。
また本文内では表の罫線もちゃんとある事にご留意下さい。
それで送信ボタンを押すと、
「メールが送信されました。」の通知が出てきて、
下図の様なメールを送る事ができます。

ギャラリーのデータをコピーする機能の作成(Copy関数、Concat関数)
ギャラリーのデータをコレクション、TempColに入れる
まず、年月を選択するドロップダウンのOnChange属性に
ClearCollect関数を使ってギャラリーの各ラベルの値を
TempColというコレクションに入れています。
年月のドロップダウンの「OnChange」属性
=ClearCollect(
TempCol,
AddColumns(
Gallery_詳細テーブル.AllItems,
購入日,
Lbl_購入日.Text,
部署名2,
Lbl_部署名.Text,
承認金額,
Lbl_承認金額.Text,
購入者,
Lbl_購入者.Text
)
);
しかし、下準備として各ラベルのコントロール名を
分かり易い名前に変えておく事をお勧めします。
その時にAddColumns関数を使って
各ラベルの結果を入れる新しい列を追加しています。
この様にギャラリーの表示データをコレクションに入れる事で
他の色んな所で使える様になります。
文字列をクリップボードに入れて内外どこでもペーストができるCopy関数
次に「データのコピー」ボタンのOnSelect属性を見てみましょう。
データのコピーボタンの「OnSelect」属性
=Copy(
DD_選択年月.Selected.年月 & ” の購入履歴” & Char(13) & Char(13) & “購入日” & Char(9) & “部署” & Char(9) & “承認金額” & Char(9) & “購入者” & Char(13) &
Concat(
TempCol,
購入日 & Char(9) & 部署名2 & Char(9) & 承認金額 & Char(9) & 購入者 & Char(13)
)
);
Notify(
”詳細データがクリップボードにコピーされました。”,
NotificationType.Success
)
このCopy関数はいつもテキスト型の引数を一つだけ持ち、
ボタンをクリックするとその文字列をクリップボードに保存し、
アプリの外でペーストできます。
単純化して、OnSelect属性に「Copy(“ABC”)」と入れて、
ボタンを押す度に「ABC」がクリップボードにコピーされて
アプリの内外どこでもそれをペーストできるのです。
テーブルを1つの文字列に変換するConcat関数とChar関数
それでは元の式に戻りましょう。
Copy関数の引数内に何度も出てくるのが
「Char」の文字でキャラクター関数です。
引数に数字を入れる事で色んな特殊記号として使えます。
データのコピーボタンの「OnSelect」属性
=Copy(
DD_選択年月.Selected.年月 & ” の購入履歴” & Char(13) & Char(13) & “購入日” & Char(9) & “部署” & Char(9) & “承認金額” & Char(9) & “購入者” & Char(13) &
Concat(
TempCol,
購入日 & Char(9) & 部署名2 & Char(9) & 承認金額 & Char(9) & 購入者 & Char(13)
)
);
Notify(
”詳細データがクリップボードにコピーされました。”,
NotificationType.Success
)
その中で今回はChar(13)とChar(9)だけ覚えて下さい。
Char(13)は改行で、Char(9)はタブキーの値です。
タブキーでエクセル内では隣のセルに行くのです。
各列名をChar(9)で挟む事で各値を各セルに入れ、
最後にChar(13)を入れる事で改行をしています。(下記の数式部分)
列名部分
“購入日” & Char(9) & “部署” & Char(9) & “承認金額” & Char(9) & “購入者” & Char(13) &
数式内をもう少し詳しく見てみると、
最初のChar(13)までが一行目になり、
ドロップダウンの年月を取得しています。
次のChar(13)で一行空欄を作り、
その次のChar(13)までで各列名が各セルに入る様にしています。
次のConcat関数でギャラリー内の全値を入れたコレクション、
TempColを改行も含めて一つの文字列にしています。
Concat関数は第一引数で対象テーブルを、
第二引数で列を指定して、
その列内の全ての値を繋げて表示します。
どういう事でしょうか?
簡単な例でやってみましょう。
テキストラベルを一枚追加して、
Concatで、第一引数にTempColを入れ、
第二引数に、「購入日」を選ぶと
全行の購入日が横に繋げられます。
「Concat(TempCol, 購入日)」

第三引数に区切り文字を入れる事もできます。
ここに改行のChar(13)を入れるとうまく改行で表示できるのです。
「Concat(TempCol,購入日, Char(13))」

第二引数で半角のアンド記号を使って複数の列、
例えば「部署名」とタブキーのChar(9)を入れると
下図の様になり各列が上手くセルに入る様になります。
「Concat(TempCol,購入日 & 部署名,Char(13))」

さっきのCopy関数内ではこれを全列でやったのです。
列名の「購入日」、「部署名2」、「承認金額」、「購入者」は
先述の「OnChange」属性内のAddColumns関数で追加した列です。
これでコピー機能は完成なのです。
データのコピーボタンの「OnSelect」属性
=Copy(
DD_選択年月.Selected.年月 & ” の購入履歴” & Char(13) & Char(13) & “購入日” & Char(9) & “部署” & Char(9) & “承認金額” & Char(9) & “購入者” & Char(13) &
Concat(
TempCol,
購入日 & Char(9) & 部署名2 & Char(9) & 承認金額 & Char(9) & 購入者 & Char(13)
)
);
Notify(
”詳細データがクリップボードにコピーされました。”,
NotificationType.Success
)
ギャラリーのデータをメールで送信する機能の作成(SendEmailV2関数)
次に「送信」ボタンのOnSelect属性を見てみましょう。
送信ボタンの「OnSelect」属性
=Office365Outlook.SendEmailV2(
TI_宛先.Text,
TI_件名.Text,
HtmlText1.HtmlText,
{
IsHtml: true,
Cc: TI_CC.Text
}
);
Notify(“メールが送信されました。”)
ここではOffice365OutlookコネクターのSendEmailV2関数を使っています。
このコネクターの詳しい使い方は次のリンクの記事をご覧下さい。
⇒「PowerAppsだけで画像をメール本文に簡単に貼り付ける方法(HTMLテキストコントロール)」
簡単に言うと、開発画面左の「データ」タブ、
そして「データの追加」から、
「Office365Outlook」コネクターを追加したら
その関数が使える様になります。
メールを送信するにはLaunch関数でもできますが、
この関数の方が色んな事ができます。
⇒「PowerAppsのLaunch関数でアプリから直接、メール、テキスト、通話をし、Webページを開く」
しかしこの関数には一つだけ問題があります。
Launch関数だとボタンを押した後、
メールが開いてアプリのユーザーが内容を確認して
自分で送信できます。
しかしこのSendEmailV2関数ではメールを開かず、
直接送信されてしまいます。
もしそれが問題でしたら、
今回の様にメールの画面をアプリ内に作ると良いのです。

この関数の構造は第一引数に宛先のメルアド、
第二引数に件名、第三引数に本文の文が入ります。
ここではHTMLテキストコントロールのHTMLText属性を参照しています。
「HtmlText1.HtmlText」
送信ボタンの「OnSelect」属性
=Office365Outlook.SendEmailV2(
TI_宛先.Text,
TI_件名.Text,
HtmlText1.HtmlText,
{
IsHtml: true,
Cc: TI_CC.Text
}
);
Notify(“メールが送信されました。”)
ギャラリーのテーブルを表示するHTMLテキストコントロール
HTMLとはWebサイト作成で使われているコンピュータ言語ですが、
このHTMLテキストコントロール内でその言語を使って、
色んな内容を表現できるのです。
HTMLは知らないという方に朗報です。
今の時代AIにそれを作ってもらえます。
Edgeブラウザーを開けて、
右上のCopilotを起動して下さい。
そこに
「Powerappsの下記のコードをHTMLで書き直して下さい。」
とタイプして、その下に、さっき作った
「データのコピー」ボタンのCopy関数の中身だけをコピーし、
ペーストし、エンターをしたら、
コピペで直ぐに使えるコードをくれます。


それをHtmlText属性にそのままコピペして使えちゃうのです。
もしかしたら、欲しい結果を得るために
「テーブル表示にして下さい」とか、
「〇〇列の幅を広げて下さい」など、
複数回注文する必要があるかもしれませんが、
AIは親切に注文に答えてくれます。
HTMLテキストに表示された状態を
そのままメールで送る事ができるのです。
この様にしてギャラリーのデータを
アプリの内外で使う事ができる様になるので
PowerAppsの応用範囲がもっと広がると思います。
ぜひ活用してみて下さい。
「こちらの記事も読まれてます。」