カテゴリー別アーカイブ: クラウド活用

CSVファイルの内容をSharepointリストに格納する~基本パターン解説~

【CSVファイルを扱う基本パターンが分かれば、実はそれほど難解でもないです】

今回の記事ではPower AutomateのトリガーにてアップロードしたCSVファイルの内容を解析し、Sharepointリストに格納します

読者の方の中には「これの何が難しいの?」と思った方もいらっしゃると思いますので、次の画像を見てみてください

今回使用するCSVファイルをメモ帳で開いたものです

*使用するCSVファイルは、https://www.mhlw.go.jp/stf/covid-19/open-data.htmlから取得いたしました

エクセルで見かけるセルに格納されたデータではなく、データがカンマ区切りされながら繋がっています

もちろん、行や列はありません

こちらを今回の記事では、大きく分けて2段階でSharepointリストに格納できる、行や列にあるデータにします

1.改行コードを基にして、行がある構造にする

見出し改行コードAAA改行コードBBB改行コードCCC 

見出し

AAA

BBB

CCC

2.見出しをスキップしてデータを抽出する

AAA

BBB

CCC

この2つをセットで行うのがCSVを変換する基本パターンです

今回の内容は本当に最低限の内容です

使用される文字コードの種類やCSVの中身の状況により、今回の記事に加えて追加処理が必要なケースもあります

但し、基本パターンを押さえておけばあまり混乱する必要はありません

では、詳細に処理を進めていきましょう!

ファイルのアップロード

まずは手動でCSVファイルをアップロードします

入力ファイルの種類は「ファイル」を選択し、三点リーダーから必須に指定しましょう

base64ToString関数による変換

前述のアクションでアップロードしたファイルの内容だと実は全く読み取れない状態なので、データ操作コネクタを使って変換処理を行います

データ操作コネクタ内の「作成」アクションにて、Base64 ToString関数により人間が読み取れる形式にします

*Base64による変換はメールなどで行われる処理です。今回はBase64に変換されたものを再変換(デコード)する形になります

ちなみにBase64ToString関数による変換を行わないと、CSVファイルの内容は下の画像のような内容になっています

*Power Automateの実行履歴からトリガーの出力内容を一部スクショしたものです

ですので、あくまで機械同士でやり取りできる状態ということです

本題に戻り、Base64ToString関数での変換は以下のように行います

base64ToString(triggerBody()[‘file’][‘contentBytes’])

上の内容の関数の中身は「triggerBody()・・・」となっていて分かりにくいですが、要は動的コンテンツでトリガーの内容を指定したものです

では、関数を作成したらフローを動かしてみて実行履歴の中身を見てみます

なんとか人間が読み込める形になっています

ちなみにデータ操作コネクタのアクションは名前の付け方に注意しましょう

後続処理で必ず参照しながら使用しますので、読みやすい名前を付けるように心がけましょう

Split関数による分割(改行)

こちらでは前述の次の処理をします

見出し改行コードAAA改行コードBBB改行コードCCC 

見出し

AAA

BBB

CCC

こちらの分割処理を行うのにSplit関数を使用します

Split関数は2つの内容を引数に使用します

Split(分割するデータ,分割位置を指定する文字)

今回は分割位置を指定する文字として「改行コード」を指定します

改行コードについては、使われる文字コードに違っていたりするなど、詳細に説明しようとすると膨大な内容になります(私も残念ながら専門外です)

興味のある方は⇒こちらの外部記事もぜひご参照ください

本題に戻ります

今回、実際には次のようにSplit関数を指定します

split(outputs(‘CSV’),decodeUriComponent(‘%0D%0A’))

第一引数は動的コンテンツの選択から前アクションを指定してください

第二引数は、改行コードをdecodeUriComponent関数で再変換したものを指定します

それでは、

ここまでの内容でフローを実行してみます

上記の画像のように、完全に行別に分割されています

見出しの1行をスキップ

今回はCSVの内容をSharepointリストに格納しますので、見出し列の内容は必要ありません

ですので、前述のように1行スキップする必要があります

スキップ処理には文字通り、skip関数を使用します

skip(outputs(‘分割’),1)

それではこれまでの内容でフローを実行してみましょう

下が今回、フローを動かしたときの画像です

前フローを動かした時には、下の画像のように見出しがありましたので完全に1行をスキップできています

画像に alt 属性が指定されていません。ファイル名: image-64.png

空白行の削除

いよいよ、Sharepointリストに格納!と言いたいところですが、もう一点処理が残っています

もう一度、フローの実行履歴を見てみましょう

空白行があります

こちらは「アレイのフィルター処理」で削除しておきましょう!

上の画像が空白行を削除するアクションです

差出人の箇所は「1行スキップ」のアクションの結果を動的コンテンツで選択します

そして、以降の処理は「1行スキップ」の結果から1行1行を「ITEM関数」にて抽出してフィルターをするという流れになります

ですので、フィルターの条件式には以下のような式を入れます

empty(item())

上の分では、empty関数で抽出結果が空白かどうかを判定しています

そして「false」、つまり、空白というのが成り立たないという条件式を作成します

これで空白行をフィルター処理できます

Sharepointリストに格納

これからいよいよSharepointリストにデータを格納します

空白行を削除した段階では、データは以下のような形になっています

[  “2020/1/16,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0”,  “2020/1/17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0”,(省略)

 “2023/5/7,14344,658,127,116,293,133,117,188,106,266,175,774,709,2345,886,384,212,214,88,97,278,306,185,863,102,113,267,1098,423,159,52,105,32,122,217,114,66 ,150,105,40,687,87,114,133,121,95,168,254”,  “2023/5/8,9489,577,87,68,208,57,107,143,236,113,128,350,372,1331,567,332,111,97,66,202,316,148,260,425,230,42,111,547,408,76,111,47,0,173,434,72,27 ,64,45,23,289,30,27,55,94,47,86,150”]

ですので、1行単位を更に「,」で区切っていく必要があります

これには前述のSPLIT関数とITEM関数を使用する必要があります

つまり以下のような仕組みを作成する必要があります

1.分割

1行データ:①,②,③

① 

② 

③ 

2.割り当て

①⇒1列目、②⇒2列目、③⇒3列目

この仕組みを作成するには、まず、Apply to eachアクションにより空白行を削除したデータを繰り返し抽出できるようにします

実際にはITEM関数で抽出するのですが、抽出したデータはSPLIT関数にて「,」文字により分割します

split(item(),’,’)

これでデータは

という形になります

更にこの分割したデータを項目の作成アクションで各列に割り当てます

この割り当て処理には?と[]を使用します

split(item(),’,’)?[0] ⇒ split(item(),’,’)?[1] ⇒ split(item(),’,’)?[2]

[]の中に数字を入れて、列の位置を指定する形になります

これでSharepointリストの各列に分割したデータを割り当てることができます

ちなみに、数字は0から始まる点にご注意ください

<まとめ>

今回はCSVファイルを解析してSharepointリストに格納するフローについて解説しました

あくまで今回の内容は基本パターンです

ここから改行コードが別なもののパターン、分割したデータからカンマを更に切り取るパターンなどがでてきます

但し、どのパターンになっても今回の内容があくまで基本となると考えますので、ぜひ参考にして頂きたいと思います

最後に、今回の参考になる過去記事を紹介させて頂きます

参考記事1:難解そうなPOWER AUTOMATEのデータ操作コネクタの概要に触れる

参考記事2:POWER AUTOMATEでエクセル関数のように文字列(表示)操作をする方法

にほんブログ村 資格ブログ ビジネススキルへ
にほんブログ村
にほんブログ村 IT技術ブログ VBAへ

難解そうなPower Automateのデータ操作コネクタの概要に触れる

【データ操作コネクタにはデータの扱いそのものに強くなれる機能が満載です】

Power Automateには「データ操作」コネクタがあります

このコネクタを使いこなせると、Formsで受け取ったデータの扱いやCSVの扱いなど、データ操作自体に強くなれます

今回は、実際のアクション別に概要に触れていきます

記事の最後にはこのコネクタを使う隠れた秘訣も2つ解説します

作成アクション

作成アクションでは様々なデータを作成できます

このアクションの特徴は形式を自動的に認識してくれることです

実際に下の画像のようなデータを入力してフローを動かしてみます

そして、実行結果から「未加工出力の表示」をクリックします

するときちんとダブルクォーテーションが入力され、文字列と認識されているのが分かります

次は配列を入力してみます

今度もちゃんと配列で出力されています

結合アクション

結合アクションでは、配列を指定した区切り文字で結合処理を行うことができます

例えば、前述の「作成2」の配列を;で結合したいとします

画像に alt 属性が指定されていません。ファイル名: image-16.png

この場合は下の画像のように結合アクションを作成します

指定する2段の箇所の内、1番目の段には結合する配列を動的コンテンツにて指定します

2番目の段には区切り文字「;」を指定します

そして、実際にフローを動かすと配列内の文字列が結合されます

選択アクション

以下のようなオブジェクト*が、作成アクションを通じて作成してあるとします

*文脈によっては配列という場合もあると思いますが、ここでは分かりやすくするためにオブジェクトとします

オブジェクトの項目は名前、身長、体重の3つがあります

こちらを1つなどに絞り込むのに、選択アクションが使えます

上の画像の「開始」には動的コンテンツで配列が作成されたアクション名を指定します

そしてマップの名前にはオブジェクトの項目名(キー名)を指定します

右側にはitem関数にて値を設定します

このItem関数を使うのがこのアクションのポイントです

このItem関数により、取得したオブジェクトの項目を抽出します

項目の仕方は「?」を追加した後、項目名を[”]内に指定します

それでは実際にフローを実行します

アレイのフィルター処理

選択アクションでは3つの項目がある配列から1つに絞り込みました

「アレイのフィルター処理」では条件に合う配列の内容に絞り込みます

上記の画像は実際のアレイのフィルター処理の内容です

「差出人」という表現になっていますが、こちらでは動的コンテンツにて配列を指定します

差出人の下の欄では前述のItem関数を使用して条件を指定します

次の画像の実際にフローを実行した際の出力内容です

オブジェクトの内容が「Aさん」のものに絞り込まれています

CSVテーブルの作成

CSVテーブルの作成アクションでは、オブジェクトからCSVファイルを作成することができます

今回は、前述の「アレイのフィルター処理」を動的コンテンツで指定しています

「作成したCSVファイル」アクションで出力された内容は「ファイルの作成」アクションを通じ、Sharepointサイトに出力します

実際にフローを動かすと、以下の内容が「作成したCSVファイル」アクションが出力されます

そして、ファイルの作成アクションを通じて、指定フォルダー内に以下のようなCSVファイルが作成されます

HTMLテーブルの作成

こちらはCSVテーブルの作成とほぼ同じ内容になりますので、詳細は割愛します

実際の使用例としてメール内に出力してみます

本文内では動的なコンテンツで「HTMLテーブルの作成」を設定します

実際にフローを動かすと「HTMLテーブルの作成」アクションで出力された内容が、送信したメール本文内に出力されます

JSONの解析

JSONの解析については、作成とセットで解説させて頂きます

最終的には、一見利用できないようなデータから必要なデータを抽出できるようにします

コンテンツ

JSONの解析ではまず、解析する内容を指定します

今回は前述の作成3を使用します

こちらの内容は、JSONの解析の「コンテンツ」に動的コンテンツにて設定します

スキーマ

まずフローを実行した履歴から「作成3」出力結果をコピーしておきます

その後、「サンプルから生成」をクリックします

すると、次のGIF画像のように新たな入力画面が開きます

入力画面はに、前述コピーした内容を貼り付けます

作成

作成アクションでは「JSONの解析」の内容を繰り返し処理により取得します

下のGIF画像のように、作成アクションで「JSONの解析」の内容を動的コンテンツで取得すると「Apply to each」が自動的に適用されます

下の内容が実際にフローを動かしたときの作成アクションの内容になります

<まとめ>

今回はPower Automateの「データ操作コネクタ」の概要について解説しました

このコネクタの操作に慣れると、Power automate活用の幅は格段に広がります

実際の使用例についてはまた別途、記事を書こうと思います

最後にこのコネクタを上手に使うための隠れたポイントを2つ解説します

ポイント1

「データ操作コネクタ」を動的コンテンツで取得するケースがはとても多いです

通常だと「作成~」となってしまい、区別があまりつかなくなってしまいます

ですので、アクション名については明確に区別がつく名前をつけておきましょう

ポイント2

「データ操作コネクタ」では、他のデータ操作コネクタを動的コンテンツを通じて参照するケースが多いです

ところが、参照したものが「出力」や「本文」というような2文字に集約されて表示されるので、何を参照したかよくわからなくなってしまいます

この場合はアクションの右上の三点リーダーから「コードのプレビュー」を使用しましょう!

どのアクションを参照したかが良く分かります

ちなみに、上の画像ではアクション名は「作成 3」なのに「作成_3」と表示されています

これはアクション名に空白がある場合は、_で置き換えられることを意味します

今回の記事では関数は扱いませんでしたが、関数でアクション名を使用する際は_を意識しないとエラーになるケースがあるので注意が必要です

にほんブログ村 資格ブログ ビジネススキルへ

にほんブログ村

にほんブログ村 IT技術ブログ VBAへ

Power Automateでエクセル関数のように文字列(表示)操作をする方法

【Power Automateでもエクセルと同じように、関数を使いこなして文字列操作しよう!】

Power Automateを使用する際に、エクセルを使用している時と同じように「LEFT関数」や「RIGHT関数」を使いたい時があると思います

Power Automateでも関数は使えるのですが、エクセルとは少し勝手が違います

今回の記事では「エクセルとの勝手の違い」を交えながら、日付を含む文字列などの表示操作について解説していきたいと思います

文字列の切り取り

Power AutomateではLEFT関数やRIGHT関数はありません

ですので、エクセルで言えばMID関数に相当するSubstring関数を使用します

MID関数では文字位置を指定して、指定した長さを切り取ります

Power AutomateのSubstring関数も同様の機能です

Substring関数の文法は次のようになります

Substring(①対象文字列,②開始位置,③切り取り文字列の長さ)

LEFT関数

例えば、文字列「123456789」から左側4文字を切り取りたいとします

この場合、Substring関数の引数②開始位置を0で指定するのがポイントです

上の画像では変数:操作対象文字列に文字列「123456789」が設定されています

こちらを変数の設定アクション内でSubstring関数を使用し、左4文字を切り取ります

上の画像の式の中身は以下の通りとなります

substring(variables(‘操作対象文字列’),0,4)

「variables~文字列’)」の箇所は動的コンテンツで取得するのもよし、直接variablesと書いても大丈夫です

前述の通り、0で開始位置を指定し、第三引数で切り取りたい文字数を指定しています

これで下の画像のように、Power Automateを動かすと文字列1234が123456789から切り取りできます

RIGHT関数

LEFT関数と比べると少し難易度があがりますが、パターンは決まっています

LENGTH関数で文字列の長さを取得し、開始位置を指定します

開始位置は(文字列の長さ-切り取る長さ)となります

今回で言えば、9文字:123456789から4文字:6789を引いた5が開始位置になります

*この関数は0からカウントが始まります。ですので、エクセルで言えば6が開始位置です

但し、ここでエクセルとの違いがでてきます

エクセルにて引き算をする際は、ーを使用すればOKです

Power Automateの場合はSub関数を使用します

ここが少し面倒なところです

ですので、式は以下のようになります

substring(variables(‘操作対象文字列’),sub(length(variables(‘操作対象文字列’)),4),4)

上の式から第二引数を抜き出すと次の通りとなります

sub(length(variables(‘操作対象文字列’)),4)

length関数で「操作対象文字列」の長さを取得しているのは分かりやすいと思います

ここで取得した長さから4を引くのに、前述のsub関数の第二引数にて4を指定しています

これで下の画像のように、Power Automateを動かすと文字列6789が123456789から切り取りできます

数値の桁区切り

エクセルでは数値の桁区切りは関数で処理しません

画面上にメニューがちゃんとあります

Power Automateの場合は、関数で処理を行います

使用する関数はformatNumber関数です

エクセルとの違いは、formatNumber関数により文字列に変換されます

ここが注意点です

次が実際の式です

formatNumber(variables(①’操作対象文字列’),②’#,#’,③’ja-jp’)

①が操作対象です

こちらは整数形式のものを指定します

②で表示形式を指定し、③は固定の指定になります

これで数値の桁区切りになります

注意点

formatnumber関数にもし、0を入力した場合を見てみましょう!

結論としては、関数からの出力が空欄になってしまいます

こちらは次のフローで見てみます

「手動でフローをトリガーします」で入力したものを「変数を初期化する」アクションにおいて、formatnumber関数により桁区切りをしています

formatnumber(int(triggerBody()[‘text’]),’#,#’,’ja-jp’)

このフローのトリガーに0を入力してみます

そうすると下の画像のように、空欄になってしまいます

それではここから、対策について解説致します

if(equals(triggerBody()[‘text’],’0′),0, formatnumber(int(triggerBody()[‘text’]),’#,#’,’ja-jp’))

条件式にて値が「0」の場合は、0を出力するようにします

これでformatnumber関数からの空欄出力は回避できます

日付形式

Power Automate内でよく下の画像のような日付を見ることがあると思います

TやZが入っていいるのもあって、そのままでは表示データとしては使えません

ただし、この記事ではこれ以上はタイムゾーンに触れず、純粋にこの表示形式を変える方法を解説します

このTやZは、タイムゾーンと関連します

この日付表示を変えるにはformatDateTime関数を使用します

例えば、タイムゾーンに関係なくutcNowという関数で現在時刻を出したとします

この場合は前述のような表示になります

こちらをTやZがない「yyyy/MM/dd形式」にするには、次のようにformatDateTime関数を使用します

formatDateTime(①utcNow(),②’yyyy/MM/dd’)

①は変換対象です

②で表示形式を指定するのですが、シングルクオーテーションを使用します

ここがエクセルとの違いであり、注意点となります

文字列の発見

エクセルにはFIND関数という関数があり、文字列に含まれる指定文字列の位置を取得できます

Power automate でも同じような機能があります

関数ではないですが、ぜひこの記事で紹介しておきたいです

文字列で発見するには、「テキストの位置の検索」アクションを使用します

「テキストの位置の検索」アクションでは2つの項目を使用します

テキスト:操作対象文字列(123456789)

検索テキスト:検索文字列(6789)

上の画像では、テキストと検索テキストの内容は変数で事前に設定してあります

「テキストの位置の検索」アクション内では、動的コンテンツで設定した変数を参照しています

では、この「テキストの位置の検索」を実際に動かすとどうなるでしょうか?

上の画像では6ではなく「5」という結果になりました

これは0からカウント方法によります

このアクション内では1では0からカウントが始まるからです

<まとめ>

今回はPower Automateにて、文字列や表示を変換する方法を紹介しました

エクセルと方法が少し違いますが、違うパターンは決まっているのですぐに慣れていくと思います

特にSubstring関数はCSVを変換する時などよく使うので、今回を機会にぜひ慣れて頂くといいと思います

とにかくクラウド作業を省力化するにはPower Automateは欠かせません

ぜひ有効活用してみてください!

にほんブログ村 資格ブログ ビジネススキルへ

にほんブログ村

にほんブログ村 IT技術ブログ VBAへ

Formsに回答数の上限に達したら、Power Automateからメールをする方法

【Sharepointリストを使用し、簡単いFormsに回答数の上限を設定する方法を解説します!】

回答を集めるのに便利なFormsですが、回答数の上限を設定することはできません

 今回の記事では、回答数が事前に設定した上限数を超えたら取り急ぎPower Automateにてメールを送る対応について解説を行いたいと思います

しかも、かなり簡単な方法で行えるようにしたいと思います

ポイント

Sharepointリスト

事前にSharepointリストを作成しておき、質問別に上限数を設定しておくのが最大のポイントです

回答数についてもこちらのSharepointリストで管理できるようにします

変数

上記のSharepointリストの項目については、Power Automateのフロー内では変数を通じて管理を行います

・質問別上限数

・質問別回答数

後、メール内で「どの質問」が上限数を超えたかを管理するための変数を設定しておきます

Formsデータの取得

Formsの回答情報を取得するには、次の画像にある2つのアクションを組み合わせて使います

返信先の取得

返信先の宛先を取得するには次のアクション/ユーザープロフィールの取得(V2)を使用します

このアクションを使用すると、Formsの回答者のメールアドレスを基にして回答者の様々な情報を取得できます

例えば、「姓」「名前」とかが取得できます。こちらは後で回答者にメールを送る際に使用します

上限数・回答数の取得及び更新

ポイントで前述したように、変数は回答別に設定しておきます

変数を通じて、Sharepointリストの回答数を取得・更新します

Sharepointリストから回答数を取得するには「複数の項目の取得」アクションを使用し、変数に反映します

これは上限数も同様です

そして、Formsで回答があった質問の回答数を更新するには条件アクションの中で「empty関数」を使用します

指定した質問に回答があった場合は「empty」でないので、falseになります

こちらの「empty関数」の中にはFormsで取得した動的コンテンツを設定します

この「false」の場合に、回答数を1つ増やしてSharepointリストに反映します

*「変数の値を増やす」アクションを使用

Sharepointリストへの反映には「項目の更新」アクションを使用します

そして、ポイントで前述したように「どの質問」が上限数を超えたかを変数に設定します

こちらは「条件」アクションで上限数と回答数を比較して条件式を設定します

「はい」の場合は「文字列変数に追加」アクションで該当の質問名を設定します

メールの送信

フローの最後には、回答数が上限数を超えた場合にはメールが送れるように「条件」と「メールの送信」アクションを組み合わせて設定します

画像に alt 属性が指定されていません。ファイル名: image-12-644x496.png

「条件」アクションは「OR」で設定します

「メールの送信」アクション内では前述の「ユーザープロフィールの取得(V2)」で取得した内容を使用します

これで回答数が上限を超えた場合に、回答者にメールが送信されます

<まとめ>

今回はSharepointリストに上限数と回答数を設定した上で、Formsの回答数が上限数を超えた場合にメールをする方法を解説しました

記事内では触れませんでしたが、各種設定は質問別に行うのもポイントになります

こちらは質問数が多いとかなり手間になるので「スコープ」アクションを使用することをオススメします

「スコープ」アクションを使用すると、複数のアクションを一括で扱えるようになります

「スコープ」アクションをコピーしながら使うと、フローの作成自体が楽になります

にほんブログ村 資格ブログ ビジネススキルへ

にほんブログ村

にほんブログ村 IT技術ブログ VBAへ

Power Automateのフローがもし失敗したら~エラー対策~

【フローが失敗しても、気づかないまま・そんなことがないように対策を打ちましょう!】

エラー対策はPower Automateのようなローコードの開発でも重要です

Power Automateの場合は、トリガーが「ボタンを押す」以外のケースがほとんどなのでエラーが起こったことに気づきにくいです

今回は簡単な方法でエラー発生時に通知が来るようにしましょう!

ポイント

アクションの右上の三点リーダをクリックすると「実行条件の構成」というのが選べるのをご存じでしょうか?

実行条件の構成では、前ステップがエラーの場合のみアクションを動かすように設定を行うことができます

1段階目⇒単独実行

まず最初に、敢えてエラーを出すアクションを作成しましょう

データ操作コネクターの「作成」アクションで1÷0を指定します

数式はdivを使用します

割り算した時に分母が0なので必ずエラーになります

ここでポイントで解説した「実行条件の構成」を調整したフローを追加します

ここでは「メール通知を受け取る」アクションを使用します

このアクションは該当フローを作成したアカウントにメールを送信します

こちらのアクションの実行の構成を調整し、一つ前の「作成」アクションがエラーになった場合はメールの通知を行うようにします

これで「作成」アクションがエラーになったら「メール通知を受け取る」アクションが実行されます

逆に作成アクションをエラーにならないように中身を変えたらどうなるでしょうか?

この場合は、そもそもアクションが実行されません

2段階目⇒並列実行

前述のフローだと、エラーが発生しなければアクションは実行されません

ただ大抵の場合は、エラーが発生しない場合は後続処理を実行する必要があるケースが大半のはずです

その場合は「並列分岐の追加」を行います

これで、エラーが発生しない場合の後続処理を続けることができます

3段階目ー対象を複数アクションに拡大

前述の内容は、特定のアクションにてエラーが発生した場合のみエラー対策が実行されます

実際のフローではどこのアクションでエラーが発生するか分かりません

エラー対策のアクションを拡大する場合は「スコープ」アクションを使用します

こちらのアクションでは複数のアクションをまとめて活用できます

このスコープアクションを「実行条件の構成」の対象にすれば、スコープの中のどれか一つがエラーになるとエラー対策として設定したアクションが実行されます

エラー内容を知りたい場合

通知内容の中に「エラー内容」を入れたい場合は「actions関数」を使用します

上の画像のように()の中にエラー検知対象のアクションの名前を設定することにより、エラーの中身が取得できます

こちらが「メール通知を受け取る」アクションで通知された中身です

こちらだと情報が多すぎるという場合には、下の画像の黄色の部分に絞ってエラーの中身を抽出することができます

前述のactions関数に?を2つ続けます

actions(‘スコープ’)?[‘error’]?[‘message’]

これによりエラーメッセージの中身を絞り込むことができます

<まとめ>

今回は「実行条件の構成」を軸にPower Automateにおけるエラー対策について解説を行いました

Power Automateはローコードとはいえ、システム開発にエラー対策はつきものです

常にエラー対策は意識しておきましょう

にほんブログ村 資格ブログ ビジネススキルへ

にほんブログ村

にほんブログ村 IT技術ブログ VBAへ

MicrosoftのFormsにアップロードされた画像をForms外で共有する

【Forms内の回答以外でも、画像を共有するには2つの方法があります】

MicrosoftのFormsは瞬時に多くの人の情報を集められるのでとても便利です。但し、アップロードされた画像をForms外で共有するにはどうしたらいいか?

意外と頭を悩ませている人も多いのではないでしょうか?

こちらは2つ方法があります

1.FormsからSharepointサイトのドキュメントに共有

2.Power Automateにてメールを添付する

1.FormsからSharepointサイトのドキュメントに共有

Formsの画面下に「マイグループ」という欄があります

こちらのマイグループにはSharepointサイトが並びます

1つ選んでクリックするとグループフォームが作成できます

このグループフォームで画像をアップロードするだけで、該当のShaerpointサイトのドキュメントに画像が直接アップロードされます

この時、Shaerpointサイトのドキュメント内にフォルダ内には該当フォーム専用のフォルダが作成されています

こちらのフォルダ内にも、Forms内にアップロードされた画像がアップロードされます

2.Power Automateにてメールを添付する

Formsにアップロードされた画像をメールにて添付するフローは少し複雑になります

ポイントとしては2つあります

①Forms内にアップロードされた画像はOneDrive内に保存される

②メールを添付するには、ファイルの名前とファイルコンテンツ(中身)が別々に必要

こちらの2つのポイントをまずは押さえておきましょう

Formsの回答を取得

「新しい応答が送信されるとき」と「応答の詳細を取得する」この2つのアクションでFormsの回答を取得します

添付ファイルの名前を取得

添付ファイルの名前を取得するには「データ操作」コネクタを使用します

データ操作コネクタ内の「JSONの解析」アクションを使用するのですが、こちらはコード/スキーマが必要になってきます

「コンテンツ」にFormsの画像での回答を動的コンテンツで設定後、スキーマの欄に一旦「””」を入力してフローを動かします

これでスキーマが取得できます

上記の画像の出力欄/本文の「name」の欄が一番欲しいファイル名です

こちらの本文の内容を前述のスキーマにコピーします

この「JSONの解析」アクションで取得した内容から、「作成」アクションを通じて前述の「name」を抽出します

関数を使用するのですが、関数の中身は以下となります

first(body(‘JSON_の解析’)).name

これでファイル名が抽出できます

メールの送信

これでファイル名が取得できました

今度はファイルの中身/ファイルコンテンツを取得します

ファイルコンテンツの取得には「パスによるファイルコンテンツの取得」アクションを使用します

こちらはOneDrive内の「アプリ/Microsoft Forms」フォルダから取得します

前述したようにOneDriveにFormsのアップロード画像が保存されているのがポイントです

一度、ファイルパスは実際にOneDriveに保存されているファイルを設定し、動的コンテンツの「作成」アクションから出力された内容で置き換えます

これでファイル名とファイルコンテンツが揃ったので、メール作成アクションを設定します

前述したように、ファイル名とファイルコンテンツを分けて設定するのがポイントです

これでFormsに画像がアップロードされたらメールが行われます

<まとめ>

今回はMicrosoftのForms内でアップロードされた画像をForms外で共有する方法を2つ解説しました

解説した2つの方法のうち、2つ目のメールする方法は中々小難しいです

ここで、画像のアップロードが複数ある場合はどうするか?

という疑問を持った方もいらっしゃると思います

この場合は、アレイ.配列を使用します

配列に「ファイル名」「ファイルコンテンツ」を複数格納します

使用するアクションも通常の「変数の設定」ではなく「配列変数に追加」を使用しますし、文法もなかなか間違いやすいので注意が必要です

そして、一番分かりにくいのがメールの添付です

こちらはモードを切り替える必要があります

この画像を複数添付したメールを送付する方法はなかなか難解です

機会があれば詳細に解説したいです

にほんブログ村 資格ブログ ビジネススキルへ

にほんブログ村

にほんブログ村 IT技術ブログ VBAへ

Sharepointリストにエクセルファイルから一括でデータを大量追加する

【Power Automateを使えば、Sharepointリストを一気に操作することができます!】

Sharepointoリストはエクセルのように大量にデータを追加できない?そう思われている方も多くいらっしゃることと思います

実はPower Automate/クラウドフローを使えば簡単にエクセルから大量データを追加できます

但し、注意点も多いです

エクセルからPower Automateを使ってSharepointリストに流す方法を知っていても、256行で処理が止まってしまったという経験をされた方も多いと思います

行数の制限を回避する方法も後ほど解説したいと思います

自動追加フロー

準備するもの

追加するデータが含まれたエクセルファイルをSharepointのドキュメント内、もしくはOneDrive内に用意してください

但し、必ずテーブル化を行っておいてください

名前は後で参照するので、分かりやすいものが良いです

デスクトップの場合と違い、テーブル化の場合はショートカットキー/Ctrl+Tが使えないので挿入タブから操作を行ってください

Power Automateフロー

トリガー

「手動でフローをトリガーする」をトリガーにし、いつでもフローを起動できるようにします

エクセルファイルからデータ取得

「表内に存在する行を一覧表示」アクションにて追加するデータを取得します

アクション内では、ファイルとテーブルを指定します

リストへのデータ追加

取得したエクセルデータのリストへの追加は、Sharepointコネクタの「項目の作成」アクションで行います

こちらのアクションにて、取得したエクセルデータを列単位で指定します

下の画像のように、客期コードにカーソルを置くと現れる動的コンテンツから実際の指定は行います

一つでも動的コンテンツを指定すると、自動的に繰り返し処理/Apply to eachが適用されます

つまり、このアクションではN行エクセルデータを取得したらN回項目の作成を繰り返し、リストに追加を行っていきます

注意点

実は処理行数に制限があり、エクセルの追加行数が256行より多い場合でも処理が「256」で止まります

この場合は設定の変更で上限数を増やすことができます

改ページを「オン」にし、行数を増やします

理論上は10万行までは指定できるようです

但し、制限を外せてもかなりパフォーマンスは落ちるケースがありますのでご注意を

(参考)256行制限のまま大量の行数に対応するフロー

最後に、1度にエクセルから取得する行数を「256」に絞りながら処理するフローを紹介します

下の図のように、うまく取得位置をスキップさせながら制限行数の範囲内で処理を繰り返していきます

スキップ数の箇所は変数にして可変にするのもポイントです

こちらの変数は繰り返し処理/Do Untilの中で、繰り返し256行を増やしていきます

Do until内では別途変数(プール値:trueで初期化)を使用し、falseになるまで処理を継続するようにします

こちらの終了判定する変数は、処理の残り必要行数が256未満の時にfalseにします

処理の残り必要行数は「length関数」を使用して取得します

length(body(‘表内に存在する行を一覧表示’)?[‘value’])

残りの行数を取得し、256行未満であれば最後の「項目作成」を行い、変数をfalseに変えます

<まとめ>

今回はPower Automateを使用してエクセルのテーブルからまとめてSharepointリストにデータを追加する方法を解説しました

フロー自体は簡単なのですが、行数が増えてくると扱える行数に制限がかかったりするのが厄介ですので、そちらの対策も解説させて頂きました

最後に、

フローの実行が長引くと「フローがタイムアウト・・・」と出るケースがあります

但し、下の画面/実行履歴を確認すると実際にはまだ動いていることがありますので注意が必要です

この疑似的なものも含めてタイムアウトを防ぐために、下の設定を変えることで対策が行えます

この設定内に「期間」を設定する箇所があります

以下に記載例も示しておきます
PT1M ー1分

PT1H-1時間

にほんブログ村 資格ブログ ビジネススキルへ

にほんブログ村

にほんブログ村 IT技術ブログ VBAへ

Power Appsでエクセルを超える~列方向が可変のクロス表を作成

【工夫すれば、使い慣れたエクセルのクロス表をPower Apps内で使用が可能です】

エクセルは言わずと知れた、メールと並んで多くの方に利用されているツールです。

本当に素晴らしい機能が満載です

このブログもExcellent仕事術となっています

エクセルの特徴的な使い方の一つが、列方向に可変なクロス表による管理です

上のような画像のクロス表にて、列方向に「2023/08/05、2023/08/06・・・」と増やしていく使い方は良く行われていると思います

これはエクセルの表計算の仕組みを有効活用した手法です

但し、この表は確かに見やすくて便利なのですが、表が大規模になってくると幾つか問題が出てきます

・処理がセル単位になり、行列一括で処理が行えない

・一目で分かるようにシート別に区切って管理するので、データの一元管理が行えないケースもある

ですので、このクロス表の作業をシステム化しましょうという場合もあります

これはこれで問題があります

このクロス表のシステム化は結構、ハードルが高いのです

普段何気なく使用しているフィルター作業や並べ替えも縦方向ですよね?

システムは基本的にはデータの列を固定した上で、縦に並べるようにできています

エクセル以外のソフトだと、実用的なものをそれなりの低価格で作成するのはかなり困難だと言わざる負えません

エクセルのままであれば、特殊なVBAの使い方をすれば自動化はそれなりに可能ですが、様々な問題があります

何故かというと、エクセルは本来はあくまで表計算ソフトであり、Accessなどのデータベースソフトとは違うからです

私もプログラマーとして活動する中で、この問題には度々直面してきました

特殊な在庫管理業務など、この列数可変のクロス表でないと行えない作業が現実として世の中にあるからです

システム化を行わなくてはならない場合は、前述のようにエクセルとAccessを組み合わせるなどの特殊なVBAの使い方で乗り切ってきました

ただ、作成に時間もかかり作業画面も思うようには作成できませんでした

仕組みが複雑で、他の方に説明が難しいという問題もありました

ところが、Power Appsの登場で状況が変わりました

このクロスの列方向が可変の表を、Sharepointリストと組み合わせながら比較的、簡単に作成できるようになりました

下のGIF画像はPower Appsの画面です

横軸の「日付」はSharepointリストと連動しています

2023/08/11が最終日付でしたが、「2023/08/12」を追加すると列方向に追加されます

上記のGIF画像では一見、分かりずらいかもしれませんが、連番の動きに注目して頂ければと思います

最初、12番は空欄です

Sharepointリストに2023/08/12を追加すると12番に日付が追加されます

当然、下のGIF画像のように表の中身を新規に追加・更新もできます

そして、

通常のエクセル処理でもできない列フィルターも行えます

2023/08/04を指定すると、それ以降の日付のみに表示が変わります
エクセルVBAにて列フィルターを行うには、列を非表示にするという複雑な処理を行う必要がありました

ですので、非表示にしたものを再表示するなどの処理も必要です

後で詳細は紹介しますが、Power Appsであれば列フィルターも比較的に簡単に行えます

何より、Power Appsによりクラウド上で業務が完結できるのがいいです

この記事でPower Appsの魅力及び可能性を伝えられたら幸いです

それでは、まずは最初にポイントを大まかに2つ紹介します

1つ目はIndex関数、2つ目はキーを組み合わせる複合キーです

ポイント

Index関数

エクセルのIndex関数をご存じでしょうか?

Index関数とは指定範囲から、指定位置のセルの値を抽出します

INDEX(範囲, 行番号, [列番号])

Index関数を使えると、抽出するセル位置を可変にできます

下の画像であれば、指定範囲の1行目1列目~2行目2列目をそれぞれ抽出し、

下の画像であれば、指定範囲の2行目2列目~3行目3列目をそれぞれ抽出します

今回のPower AppsではこのIndex関数を、行列の表示数を固定のまま有効活用します

複合キー

下の画像をご覧ください

行列の見出しを組み合わせて複合キーを作成しています

この複合キーにより、表の中身の位置を示すことができます

例えば、範囲の1行目1列目の「8」は「A-2023/08/01の8」と表示することができます

この複合キーの活用により、行列双方向の表を列数固定の形式に並べ直すことができます

この複合キーの仕組みは実際には「引当テーブル」の中で有効活用します

準備するもの

Sharepointリストを3つ用意します

行方向用(行見出し)

行方向に並べる商品データを用意します

列方向用(列見出し)

こちらは日付データを用意します

中身用

こちらは複合キーを交えた引当データを用意します

*CTが中身の個数になります

複合キーはーなどの記号を入れると後で分かりやすくなります

それではいよいよ、Power Appsのキャンバスの作成に入ります

インデックス及びインデックスを動かす仕組み

前述のように、今回はIndex関数を使用します

まずはIndex関数が参照するインデックス(1,2,3・・・)とインデックスを動かす仕組みを作成します

ここで言うインデックスとは、具体的にはこちらのことになります

そして、インデックスを動かす仕組みはこちらの三角マークになります

インデックスを動かす各三角マークの「OnSelect」プロパティには、変数を設定するSet関数を埋め込みます

上の画像の下向きの矢印であれば、変数:num_Rowを1つ繰り上げて設定します

*上向き、左向きであれば1つ繰り下げます

この変数:num_Rowはインデックスの1番目/Label1_NOに反映されます

Label1_NO

但し、Max関数を使用することで1よりも小さくならないようにします

そして、インデックスの2番目/Label2_NOと3番目/Label3_NOはインデックスの1番目に1もしくは2を足した値を表示します

Label2_NOのTEXTプロパティ

こちらのインデックス/Labelを参照して、行列双方向で見出し用の値を抽出します

インデックス数/Labelは表示数を行列ともに固定にします

Index関数による見出し作成

上記のインデックス/Labelを基にして、Sharepointリストから見出し用の値を抽出します

繰り返しになりますが、こちらはIndex関数を使用します

Index関数の中身には2つ設定します

Index(テーブル,位置)

但し、上記のままだとレコードを抽出するだけなので、「.」を使用して抽出する列名を指定します

上記は行方向ですが、列方向も同じです

行方向、列方向ともに表示数は、インデックス数と同様に固定にします

クロス表の中身

クロス表の中身として、行列のインデックス数分の表示を行う仕組みを作成します

こちらは1:現状の中身を示す仕組みと2:中身を追加・もしくは更新する仕組みの2つに分かれます

1:現状の中身を示す仕組み

こちらは複合キーを作成して、SharepointリストからVLOOKUP関数を使用して値を抽出します

ポイントで前述した仕組みをまた活用します

画像に alt 属性が指定されていません。ファイル名: image-8.png

Power Appsの場合はセルの組み合わせではなく、次の画像のようにLabelの組み合わせ、VLOOKUP関数で値をSharepointリストから抽出します

LookUp(T_引当,
    fukugoukey=
     Label1_PRODUCTID.Text & “-” & Label1_DAYCOLUMN.Text
    ).CT

つまり、こちらのSharepointリストから、Labelを組み合わせた複合キーが一致する行を抜き出し、更に個数を表す列/CTを抽出して表示できるようにします

2:中身を追加・もしくは更新する仕組み

こちらはTextInputボックス内にIf関数を使い、新規にSharepointリストに追加する内容と更新を行う内容に区分します

If関数は「OnChange」プロパティに組み込み、入力があれば自動的にSharepointリストに反映されるようにします

条件式にはCountIf関数を使い、既に複合キーがSharepointリストに存在するかどうかを判定できるようにします

If
(
CountIf(T_引当,fukugoukey=Label1_PRODUCTID.Text &”-” & Label1_DAYCOLUMN.Text)=0,

もし、0の場合は「Patch関数」でSharepointリストに追加、0以外の場合は「CountIf関数」でSharepointリストの該当行を更新します

以下は式全体です

———————————————–

If
(
CountIf(T_引当,fukugoukey=Label1_PRODUCTID.Text &”-” & Label1_DAYCOLUMN.Text)=0,
Patch(T_引当,Defaults(T_引当),{fukugoukey:(Label1_PRODUCTID.Text &”-” & Label1_DAYCOLUMN.Text),                   ProductID:Label1_PRODUCTID.Text,
                 DAY:DateValue(Label1_DAYCOLUMN.Text),
                 CT:Value(TextInput11.Text)
                 }
),
UpdateIf(
T_引当,
fukugoukey=(Label1_PRODUCTID.Text &”-” & Label1_DAYCOLUMN.Text),
{
CT:Value(TextInput11.Text)
}
)
);
Reset(TextInput11)


最後にReset関数で、入力した値を消去しておきます

列フィルターを行う場合

エクセルとは違い、列フィルターは1つ関数を付け足すだけで行えます

前述のIndex関数の中にFILTER関数を使用し、第一引数のテーブルの絞り込みを行います

見出しを増やす場合

話を単純にするために、行列1つとして話を進めてきました

Power Appsであれば見出しを増やすことも簡単にできます

見出しを増やす場合は、Labelを追加し、VLOOKUP関数やIndex関数を使用してSharepointリストの値を抽出します

上の画像では、Index関数を使用していますが適時、適した方を選べば大丈夫です

<まとめ>

今回は、本来はシステム化が困難なエクセルの列数が可変な表を、Power Appsで実現する方法を解説しました

ポイントは行列の表示数を固定し、Index関数と複合キーをうまく活用することです

上記のポイントを押さえれば、比較的簡単に作成が行えます

何より、クラウド上で業務が完結するのがいいです

これからは、Power Appsでどこまで業務を変えられるか?しかも、簡単に作成できるか?に挑戦していきたいと思います

但し、今回は話をシンプルにするために省略しましたが、実際には「委任問題」など問題への対策なども必要なことも最後にお伝えしておきます

ちなみに先日、Power Appsでコネクト4というゲームも作成してみました

結構、簡単にできたので、他のゲーム作成も試してみたいです

Power Apps、本当にこれから面白くなってきます

にほんブログ村 資格ブログ ビジネススキルへ

にほんブログ村

にほんブログ村 IT技術ブログ VBAへ

Power Automateでフィルタークエリを使いこなす

【今回は便利だけど何気に難解なフィルタークエリを数パターン解説します】

エクセルでフィルターを使う機会は多いと思います。Power Automateでもフィルターは「フィルタークエリ」という形で使うことができます。ただ文法等が何気に分かりずらいので、今回は陥りやすいパターンになるべく絞って解説します

特にSharepointリストの内部名の指定やシングルクオーテーションの指定は何気に間違えやすいので注意が必要です

///2023年7月19日追加記事///

フィルタークエリに関しては、今現在、次の画像のような機能が活用できます

この機能であれば、フィルタークエリを通常の条件式と同じように扱えます

細かな文法の知識を駆使する必要はなく、直感的な操作で設定が行えます

この機能を活用するには、画面右上の以下の箇所を操作する必要があります

上の画像にて、黄色の箇所をクリックするとこの機能の「オン・オフ」が指定できます

あくまで実験的な機能という風に記されていますので、この点は注意が必要です

//////

使用データ

使用するデータは以下の画像の内容です

等しい:eq(equal)

例えば「名前」の列が「木塚 信之」の行を抽出したい場合には、次のようにeqを使用します

この時「シングルクオーテーション:’」を忘れないようにしてください(数値の場合は別扱い)

このフィルタークエリを実行すると次のように結果が得られます

尚、上記のフィルタークエリは「表内に存在する行を一覧表示」アクション内で使用しています

等しくない:ne(not equal)

次のようにフィルタークエリを書いてみます

名前が「木塚 信之」以外の行が出力されます

以上:ge(greater than equal)

ここからはSharepointリストをデータソースにして「複数の項目の取得」アクション内でフィルタークエリを実行します

~以上を抽出するには「ge」を使用します

では、次のようにフィルタークエリを書いてみます

そうするとエラーになります

これは「年齢」というSharepointリスト内の内部名を指定できていないからです

まずはSharepointリストの「リストの設定」画面にて、内部名をURLから取得します

該当箇所は「=」の次からの文字列になります

これで内部名を取得できたので、フィルタークエリを修正してみます

この時の出力は次の通りとなります

尚、内部名が「_X・・・」となるときがあります

上記で使用していたSharepointリストはエクセルから作成しました

「問合せ日」という列を加えると内部名が次の通りになります

この場合、フィルタークエリの書き方に工夫が必要です

内部名の前に「OData_」という文字を加える必要があります

なお、比較の演算子には「以上:ge」以外にも次のような内容があります

以下:le

~超:gt

未満:lt

startswith他

「文字列が特定の文字から始まる」という指定を行いたい場合はstartswithを使用します

出力される内容は次の通りとなります

「substringof」により文字列内の特定の文字が含まれる行を抽出することもできます

引数が「startswith」と逆なので注意が必要です

and条件やor条件

「且つ」や「又は」を指定することもできます

<まとめ>

今回は便利なフィルタークエリですが、陥りやすいパターンを中心に解説させて頂きました

尚、下の画像のような日付の関数などを使用した場合のシングルクオーテーションなども抜けやすいので注意していきましょう

ぜひフィルタークエリを有効活用してクラウドでの仕事を充実させていきましょう!

にほんブログ村 資格ブログ ビジネススキルへ

にほんブログ村

にほんブログ村 IT技術ブログ VBAへ

Power Automateから送るメール本文を人間が送るように装飾する方法

【ロボットから送るメールのフォントを変えたり、URLのリンクを埋め込んだりしてみよう】

RPAから自動にメールを送れるようにするのはいいけど「フォントの太さなども含めてメリハリを付けて送りたい」という時にはちゃんと方法があります

今回はフォントの変更を中心に解説を行います

準備

メールを送信するアクションにて、黄色の箇所に</>というマークがあります

そちらをクリックするとHTMLにて指定してメールを送れるようになります

フォントのサイズ

フォントのサイズは以下の文法で指定します

<font size=xx>の後の文字が指定のサイズの文字になります

</font>で指定が解除されます

フォントの色

フォントの色は<font color=xxx>で指定します

フォントの強調

フォントを太字にするには<b>で指定します

解除は</b>で指定します

フォントの種類

フォントの種類は<font face=xxx>で指定します

URLのリンク

フォントではないですが、良く聞かれるので紹介します

URL及び埋め込む文字は次の文法で指定します

<a HREF = URL>文字列</a>

上の事例では「Yahoo」の文字列にURLが埋め込まれます

<まとめ>

今回はPower Automateでメールを送る時にメール本文のフォントなどを変更する方法を解説しました

実はPower automate desktopでも同じ方法でフォントなどを変更できます

但し、Power automate desktopの場合は上記の画像の黄色の箇所をオンにしてください

にほんブログ村 資格ブログ ビジネススキルへ

にほんブログ村

にほんブログ村 IT技術ブログ VBAへ