タグ別アーカイブ: Power Automate

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へ

ファイルのアップロードを行えるようにするアプリ作成~Power Apps~

【どうしても煩雑になりがちなファイルの管理をPower Appsで行いましょう!】

今回の記事では、Power AppsからSharepointサイトのドキュメントにファイルをアップロードするアプリを作成します

このアプリを使用することで、ファイルの保存場所を管理しやすくなります

また、手間なファイルのアップロードの処理を簡略化できます

アプリ作成はそんなに手間暇かかりません

ただし注意点がが幾つかあります

記事の中でそちらについては明記してありますので、都度ご確認の程よろしくお願いします

ポイント

今回のアプリはPower Automateのフローと連携します

添付ファイルの内容をPower AppsからPower Automateフローに渡します

Power Automateフローでは、Power Appsから受けとった添付ファイルの内容を基にして指定Sharepointサイトのドキュメントにファイルを作成します

このファイルの受け渡し方が少々、とっつきにくいです

ファイルを添付する仕組みの作成~Power Apps~

最初にPower Appsでスクリーンを2つ用意します

そのうちの1つのスクリーンでフォームを作成します

フォームのデータソースは何でも構いません

欲しいのは「添付ファイル」のパーツです

下の画像のパーツを切り取り、別のスクリーンに貼ります

別のスクリーンにパーツを貼り付けた後は、元のスクリーンは削除しましょう

次に貼り付けたパーツのプロパティを以下のように設定します

・Items ⇒Blank()
・DisplayMode ⇒DisplayMode.Edit               ・MaxAttachments ⇒1

*パーツには扱いやすい名前を付けましょう!

ファイル作成をするフローの作成~Power Automate~

トリガー

ここからPower Automateフローを作成します

トリガーはPower Appsからファイルの中身を受け取れるように「ファイルコンテンツ」を指定します

ここで重要な注意点があります

必ず3点リーダーから「フィールドを必須にします」を指定しておきます

この設定が抜けるとうまく行きませんので確実に指定しましょう!

ファイル作成

次にファイル作成アクションを作成します

サイトのアドレスとフォルダーのパスには、ファイルの保管先を指定します

問題は次からです

まずファイル名です

こちらはそのまま以下をコピーしてください

triggerBody()[‘file’][‘name’]

コピー先は下の画像の「」の箇所ですので、間違いがないように注意をお願いします

コピー後は下のOKボタンを押します

すると以下のようになります

OKボタンを押した瞬間は上の画像のように、ファイル名が関数の表示になっています

こちらはフローを実行後は表示が変わるようになっています

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

最後にファイルコンテンツを指定します

こちらはトリガーで受け取った内容を動的コンテンツから指定します

仕上げ~Power Apps~

それでは最後にPower Appsを仕上げます

Power Automateフローを動かすボタンを作成します

こちらのボタンでは、Power Automateフローに添付ファイルの内容を渡せるようにします

添付ファイルの内容は2つあります

こちらの2つの内容の渡し方が少し癖があります

下のように{}を使用します

UploadFile_Ver1.Run(   

     {     

      ①contentBytes:First( AttachmentFile.Attachments).Value,     

      ②name:First( AttachmentFile.Attachments).Name   

}

)

上記の①②の中身ですが、下の画像の名前を使用します

①contentBytes:First( AttachmentFile.Attachments).Value

②name:First( AttachmentFile.Attachments).Name

こちらの内容については、上記の内容をそのままコピーし、パーツ名だけを変更することをおすすめします

これで指定した箇所に、Power Appsを通じてファイルを保管できるようになります

<まとめ>

今回はPower Appsを通じてファイルを指定箇所にアップロードできるようにしました

そんなにアプリ作成には時間がかからないはずですが、何点か注意点があります

・Power Automate ⇒トリガーで必ず「必須」を指定する

・Power Automate ⇒ファイル作成アクションでファイル名を記事のコピーで作成する

・Power Apps ⇒Power Automateにファイル内容を渡す際、{}を使用して2つ引数を指定する

そのままアップロードしたエクセルファイルの内容をPower Apps内で使用する場合には、テーブルを事前に作成しておけば大丈夫です!

これでファイルの管理も楽になります

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

にほんブログ村

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

ガッツの日記 第8回 Microsoft社のAI Builderを使用してみた

【AI Builderがどれだけ手軽か試してみた!やはりかなり手軽に活用できそうです!!】

ChatGPTが登場してAIも身近にはなってきていますが、AIの魅力を知るのに一番AI Builderが手軽だとおもっています

今回の記事ではPDFの請求書から自動で情報を抽出してみます

そして、

抽出した情報はPower AppsもしくはPower Automateで利用できるようにします

大まかな流れとしては以下の3つの事を順に行います

①請求書情報/学習用データの準備

②請求書情報の学習

③Power AppsもしくはPower Automateで情報を利用できるようにする

①~③の流れの中で「コード」は一切書かかないのが大きな特徴です

②の請求書情報の学習では、読者の多くの方が利用されたことがあると思いますが「タグ付け」も行います

記事の最後にはAIが身近、手軽になったことを実感してもらえたら幸いです

請求書情報/学習用データの準備

PDFの請求書を5つ用意します

全て同じフォーマットで揃えます

別途、学習後のテストデータも準備しておきましょう

請求書情報の学習

AI Builderの該当画面を開く

Power AutomateからAIモデルを開きます

こちらの画面には様々なメニューがあります

こちらの中から「請求書から情報を抽出する」というメニューをクリックします

すると次に開いた画面の左下に「新しいアップロード」というボタンがあります

こちらのボタンから学習用データの1つをAI Builderに取り込めます

取り込んだデータはしばらくこんな感じです

この揺れ方がとてもリアルです

いかにも学習しているという感じです

学習が終わると画面右横に情報が抽出されています

これで請求書から抽出する項目がリストされた形になります

ちなみにこれはまだ1段階目の学習です

また次で学習用データの追加が出てくるので違和感を感じるかもしれませんが、1段階目では単に項目を抽出したにすぎません

学習用データの追加

1つ目のデータの学習が終わったら画面右下から「カスタムモデルを作成する」をクリックします

次に開く画面では、リストアップされた項目に対して項目の追加を行います

ただ、今回は解説をスキップして次に行きます

次に開いた画面ではコレクションに学習用データを全て追加します

ここでいうコレクションとは学習用データ一式という意味合いになります

上記の作業を繰り返して学習用データ一式を揃えると画面は次のような形になります

それでは次に行きます

項目調整

次に開いた画面では、追加したデータに赤い印が表示されていました

これは一旦設定した項目がうまく拾えていないことを意味していますので調整が必要です

うまく拾えている項目は「緑」の線で囲まれ、画面上にエラー表示*がありません

*肌色の部分

うまく抽出できていない項目は、もしも必要がなければ取り消すこともできます

もし、うまく抽出できていない項目がある場合は「タグ付け」処理を行います

*上記処理は1つ前の画像と違う学習データで処理しています

では、表となっている各項目の場合はどうするのか?と思われる方もいらっしゃると思います

この場合は、このマークをクリックします

そして、抜けいている部分をクリックしてからタグ付けを行います

タグ付け等の抜けがなくなり、コレクションの赤いマークが消えたら次に行きます

モデルの公開

次は「モデルの公開」なのですが、その前にモデルをトレーニングします

トレーニングには数分かかる場合もあります

トレーニングが終了すると、モデルの精度が確認できるとともに「公開」処理が行えます

Power AppsもしくはPower Automateで情報を利用できるようにする

モデルを公開すると「モデルの使用」と表示されますので、こちらをクリックします

すると、モデルの使用方法が複数表示されます

Power Apps

次に「・・・アプリを構築する」をクリックします

これだけでPower Appsで「フォームプロセッサ」が設定されたアプリが自動構築されます

このフォームプロセッサには新たな請求書をアップロードできます

但し、これだけだとアップロードしてAIで処理した内容が見れません

ですので、ギャラリーを設置します

ギャラリーのItemsにはフォームプロセッサ名と「Results」を設定します

ラベルには「ThisItem.XXX」に加えて「.Value」を加えると正しく表示されます

これでAIで抽出した項目はギャラリーで表示できるようになりました

ただ、以下のようなテーブルの内容はどうするか?という問題がまだ残ります

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

テーブルの内容を表示するには、ギャラリー内に更にギャラリーを追加します

入れ子のギャラリーのItemsには「ThisItem.items」を設定します

ラベルの中身には「ThisItem.~.Value」を前述と同じように使用します

Power Automate

前述の「モデルの使用法を選択してください」にて、「インテリジェントな自動化を構築する」を選択するとPower Automateで作成したAIモデルを活用できます

Power Appsを使用した時には請求書のPDFをアップロードしましたが、今回は指定のアドレスに指定の件名でPDFを添付ファイルとして送ります

そして、AIモデルのから出力された内容が、これまた指定のメールアドレスにメール本文に含まれて返ってくるようにします

前述の「インテリジェントな自動化を構築する」をクリックしたら、次の画面では受け取り方法を選択します

そして上記画像のように「Microsoft365Outlook作業アカウント」を選択してください

すると、途中で「続行」の指定をする画面が出てきますが、そちらで「続行」を指定するともうPower Automateフローができています

デフォルトではトリガーでは件名を次のように指定するようになっていますので、必ずテストする際にはご確認ください

Power Automateフローの最後の「メール送信」アクションは本文を丸ごと修正して、受け取りたい項目を動的コンテンツから指定してください

これで添付ファイルをメールすれば、添付ファイルの請求書の内容を受け取れます

仮に、複数行が出現するテーブルの項目を受け取る項目に指定した場合はメールが複数送信されるようになります

<まとめ>

今回はAI Builderの「請求書から情報を抽出する」メニューで請求書のPDFから情報を取り出しました

学習のプロセスが意外と簡単だと感じられたのではないかと思います!

AIモデルを学習したら、簡単にPower AppsやPower Automateで結果を出力できるのも大きなポイントです

とうとうAIも本当に身近になったと、今回の記事を通じて感じて頂けたら嬉しいです

実際にAI Builderを使用するにはライセンスが必要です

決してべらぼうに高額というわけではありません

もし、一定期間試してみたいという場合には期間限定の「試用版」もありますで、ぜひご利用してみてはいかがでしょうか?

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

にほんブログ村

にほんブログ村 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へ

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 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へ