前回の記事ではメール本文から文字列を検索して抽出しましたね。
前回の記事では切り抜く文字が固定の文字数でしたので抽出しやすかったのですが、今回は文字数がわからない場合のケースを想定して文字列を抽出してみたいと思います。
この記事でわかること
- メール(テキスト)から文字列を抽出する方法について理解できる。
- 商品名のような固定長ではない文字列を抽出する方法が理解できる。
Outlookなどのメールから文字列を抽出したい
下記の要件でメールから文字列を抽出します。今回は商品名のような文字数が多岐に渡るケースを想定しています。
要件
- 下記のような決まったメールフォーマットから商品名を抽出する。
- 商品名の文字数は様々
◇◇ 株式会社
〇〇 様
平素よりお世話になっております。
下記の注文をさせていただきます。何卒よろしくお願い致します。
–
・商品名:猫用おやつ ちゃ〇ちゅ~る
・製品番号:123-T4567
・数量:500個
・納品希望日:2021年11月25日
・納入希望場所:株式会社てじらぼ A倉庫
–
以上、宜しくお願いします。
—
じょじお
今回もsubstring関数を使います。
まず、抽出の方法としては、前回の記事と同様にsubstring関数を使用します。substring関数には、①商品名の開始位置と、②切り取る文字数(商品名の文字数)が必要でした。
substring関数の第1引数 抽出開始位置
商品名の開始位置は、indexOf関数で良さそうです。indexOf(‘メール本文’,’・商品名:’)で検索できました。実際に取得されるのは・商品名:
の先頭の文字’・’の位置です。実際には5文字後ろから取得したいので5を足します。
開始位置add( indexOf('メール本文','・商品名:') ,5)
substring関数の第2引数 文字数
商品名の文字数がわからないので、次の行の開始位置から商品名の開始位置を引いた数を商品名の文字数としたいと思います。下の図のイメージです。
つまり下記のようになります。Sub関数は1番目に渡した引数から2番目に渡した引数を引き算する関数です。
sub( sub(indexOf('メール本文','・製品番号:'),1), add(indexOf('メール本文','・商品名:') ,5) )
引き算はsub関数を使う!
https://docs.microsoft.com/ja-jp/azure/logic-apps/workflow-definition-language-functions-reference#add
Power Automateのフローの作成手順
それでは実際にフローを作成していきたいと思います。
今回はテストのため、インスタントクラウドフローで作成していきたいと思います。
関数の入力にはPower Automateの試験的な機能の有効化を強くおすすめします。入力領域が広くなり入力がしやすくなります。この記事ではこの機能が有効化されていること前提で解説します。
今回は文字列操作のテストが目的ですので、Outlookコネクタではなく「作成」アクションを受信メールに見立ててフローを作成したいと思います。
ではまず「データ操作」コネクタの中の「作成」アクションを追加します。見つからない場合は「データ操作」というキーワードで検索してみてください。
アクションを追加したらパラメータとして上記のメール本文を張り付けます。
indexOf(outputs('作成'),'・商品名:')
▲step2と同様に「作成」アクションを追加します。
Power Automate関数の入力の仕方
▲入力ボックスを一度クリックすると右側に青いボタンが表示されますので「fx」のマークのボタンをクリックして関数入力モードにします。
▲関数入力モードになるのでここに関数を入力します。
▲関数を入力したら右上の×をクリックして閉じます。
indexOf(outputs('作成'),'・製品番号:')
substring( outputs('作成'), add(outputs('作成(商品名)'),5), sub( sub(outputs('作成(製品番号)'),1) ,add(outputs('作成(商品名)'),5) ) )
▲こちらが最終的に商品名を取得するためのsubstring関数です。
2行目は、第1引数としてメール本文を渡しています。
3行目は、第2引数として抽出開始位置を渡しています。
4行目~7行目は、第3引数として商品名の文字数を渡しています。わかりづらい場合は先の画像「substring関数に渡す抽出文字数の考え方」をご覧いただき、1行ずつ確認してみてください。
関数の入力ができているか注意してください。
Power Automateでは関数として認識されている場合はカード表示になります。逆に関数として認識されていない場合はただの文字列表示になります。
ただの文字列になってしまっている場合は、関数入力モードに切り替えてから関数を再入力するようにしてください。
まとめ
以上、この記事ではsubstring関数を使って文字数のわからない文字列を抽出する方法について解説しました。次回は正規表現を使ってさらに柔軟に文字列を抽出する方法について解説します。
>次の記事 正規表現を使って文字列抽出(準備中)
Power Automate学習教材
▲Kindleと紙媒体両方提供されています。デスクトップフロー、クラウドフロー両方の解説がある書籍です。解説の割合としてはデスクトップフロー7割・クラウドフロー3割程度の比率となっています。両者の概要をざっくり理解するのにオススメです。
▲Power Automate for Desktopの基本をしっかり学習するのにオススメです。この本の一番のメリットはデモWebシステム・デモ業務アプリを実際に使ってハンズオン形式で学習できる点です。本と同じシステム・アプリを使って学習できるので、本と自分の環境の違いによる「よく分からないエラー」で無駄に躓いて挫折してしまう可能性が低いです。この点でPower Automate for desktopの一冊目のテキストとしてオススメします。著者は日本屈指のRPAエンジニア集団である『ロボ研』さんです。
▲Power Automate クラウドフローの入門書です。初心者の方には図解も多く一番わかりやすいかと個人的に思っています。
Microsoft 365/ Power Automate / Power Platform / Google Apps Script…
▲Udemyで数少ないPower Automateクラウドフローを主題にした講座です。セール時は90%OFF(1200円~2000円弱)の価格になります。頻繁にセールを実施しているので絶対にセール時に購入してくださいね。満足がいかなければ返金保証制度がありますので安心してご購入いただけます。