メールを受け取った時に特定の文字列を探して抜き出したり、Teamsの投稿を別のサービスやツールに保存や転送する場合に使用できる、特定の文字列部分のみ送信する方法を解説します。
また、Power Automate側でExcelの関数を指定してみます。
この記事は、以下の記事の発展的内容です。
(2022/1/24追記)簡易版をコピペですぐに使用できるようにしました。
送信元、受信先テーブルの想定
送信元は、以下のようにフォーマットの決まったTeamsの投稿を想定しています。
このように:の後の内容が変化するものだと条件式で~を含むが使用できないためこの記事で紹介する方法を使用する必要があります。
受信先は、あらかじめ作成されてある以下のようなExcelのテーブルです。
それぞれの列に上記の投稿の内容を入力させます。
トリガーの設定
チャネルに新しいメッセージが追加されたときをアクションとして設定し、対象のチームとチャネルを選択します。
Htmlをテキストにする
TeamsからPower Automateで情報を取得すると、Htmlとして取得されます。
初心者の方にはそのまま扱うのが難しいので、テキスト形式にします。
Content Conversionの、Html to textアクションを選択してください。
対象文字列の位置を特定する
次に対象の文字列の位置を特定します。
テキスト位置の検索アクションを選択します。
テキストにHtml to textで作成したテキストを指定します。
これで投稿されたメッセージ内でそれぞれの文字の開始位置を特定することができます。
このままでは抜き出した文字列の位置が検索テキストの先頭になっていますので、検索テキストの文字数分を足さなくてはいけません。
変数と式を利用して文字数分を足します。
add関数を使用します。
関数の欄に以下のように入力します。「発表日時:」は5文字なので、引数の2つ目に5を入力します。
add(outputs('テキストの位置の検索')?['body'],5)
add()と入力した状態でかっこの中にカーソルを合わせてから動的なコンテンツを選択することでPower Automate内で作成した変数などを関数内に入力できます。
同様に他のテキスト位置も文字列を考慮して変更します。
全文字数を取得する
次に、全文字数を後ほど使用するため、変数として保存しておきます。
変数textlenを宣言し、値は以下のように入力します。
length(outputs('Html_to_text')?['body'])
または、式にlength()と入力し、動的なコンテンツからHtml to textを選択します。
抜き出す文字数を変数として保存する
部分文字列アクションでは、文字列を抜き出す開始位置と抜き出す文字数を指定しなくてはなりません。
抜き出す文字数を指定するために、二つ目の検索テキスト(発表内容:の発)の位置から、一つ目の検索テキストに検索テキストの文字数を足したTextposition1(発表日時:の:)の位置を引きます。
値に式を使用して以下のように入力します。
sub(outputs('テキストの位置の検索_2')?['body'],variables('Textposition1'))
二つ目から三つ目は同様に引きます。
sub(outputs('テキストの位置の検索_3')?['body'],variables('Textposition2'))
三つ目から最後までは全文字数から三つ目の検索テキストの位置までを引きます。
sub(variables('alltextlen'),variables('Textposition3'))
出力する文字列を作成する
これで必要な変数は揃いました。出力する文字列を作成していきます。
部分文字列アクションを選択します。
テキスト | Html to text |
開始位置 | Textpotision1 |
長さ | textlen1 |
のように入力します。
二つ目、三つ目も同様に入力していきます。
同様のアクションが続く場合はアクション右上の三つの点のボタンを押してコピーし、貼り付けて中身だけ変えるようにすると簡単です。
コピーしたものはアクション追加の際に自分のクリップボードからペースト出来ます。
Excelへ出力
最後に、抜き出した文字列をExcelへ入力していきます。
表に行を追加アクションを選択します。
それぞれの列に抜き出した文字列を入力していきます。
これで完成です。お疲れ様でした。
保存を押してテストしてみます。
出力してみる
Teamsで、以下のように投稿してみます。
この通り、Excelへきちんと出力されました。
このままでも十分使用可能ですが、ハイパーリンクが設定される可能性がある場合は追加で処理が必要です。
ハイパーリンクへの対応
投稿にハイパーリンクが設定されていると、Excelへは以下のように出力されます。
これは条件分岐でExcelでもハイパーリンクが設定されるよう対応しなくてはなりません。
ハイパーリンク対象文字列を変数へ格納
まず、ハイパーリンクの設定される可能性のある、ここまでで取得した文字列を変数に格納しておきます。
今回は発表者列のみハイパーリンクに対応させます。
条件分岐を設定
条件分岐を追加し、]で終わるもの(ハイパーリンクを含むもの)のみ変数を書き換えます。
URLの開始位置を取得
テキストの位置を検索アクションで、URLの開始位置("["のある位置)を検索します。
URLの長さを取得
URLの長さを取得してtextlen3変数へ格納します。
Sub(length(variables('subtext3')),outputs('テキストの位置の検索_4')?['body'])
URLの表示名を取得
部分文字列アクションを使用して、[の前までの文字列を取得します。
URLを取得
同様に部分文字列アクションを使用して、[から最後の]までを取得します。
このままでは両端の[]を含みますが、気にしなくて大丈夫です。
subtext3変数を書き換え
subtext3変数を書き換えます。
Power Automate側でExcelの関数を入力しておくことで、Excel側で関数として処理させることが出来ます。
Excelでハイパーリンクを表示させるために、HYPERLINK関数を使用します。
一つ目の引数にURL、二つ目の引数に表示名を指定します。
部分文字列アクションで取得したURLでは、最初と最後の[]が含まれていました。それを""に変換し、Excel内でURLと判定させます。
replace関数を使用し、式を以下のように入力します。
replace(replace(outputs('部分文字列_5')?['body'],'[','"'),']','"')
表示名の方の部分文字列の両端にダブルクォーテーション(")を入力するのを忘れないようにしてください。
Excelへの入力を変更
ここまで部分文字列としていたものをsubtext3とします。
出力してみる
Teamsで以下のように投稿します。発表者にはハイパーリンクを設定してあります。
以下のように出力されました。青色の部分をクリックするとリンク先へ移動することも出来ました。
以下のように、Excelの関数として入力出来ています。
まとめ
Teamsで投稿された文章を部分的に切り取ってExcelへ入力する方法を解説しました。
今回は列数が少なく、簡単に説明するために変数のみを使用しましたが、列数が多い場合は配列を使用しましょう。
配列での出力方法は別記事で解説します。
コメント
[…] →Power AutomateでTeamsの投稿などから特定の文字列を抽出する […]