9
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

PowerAutomateで正規表現マッチ

Last updated at Posted at 2021-06-10

Office365(Microsoft365)で、ユーザーオペやスケジュールをトリガーに自動起動する連携処理を実装するのに便利なPowerAutomateですが、実際に業務の中で使おうとするといろいろな制約があります。
そのような制約を克服するため思いついたり調べたりした内容をご紹介していこうと考えています。

Problem

PowerAutomateの性質上、ユーザーから送られてきたメールやTeamsメッセージを解析して、その結果次第で何かしらのアクションを実行するというシナリオは、大いに有り得るものだと思います。
しかし、PowerAutomateには正規表現マッチを行うための組み込みの方法が存在しません。
サードパーティの提供するアクションで正規表現による処理を提供してくれるものもあるのですが、組織のポリシーなどの関係で、それを利用できないということもしばしばあります。

Solution

以前ご紹介した方法で対処します。
「きれいな方法」とは言い難いですが、比較的シンプルで、PowerAutomateの他の制約の克服も含めた一般的な課題解決にも応用可能という意味で、気に入っているものです。
対策検討にあたりこちらの記事を参考にさせていただきました。こちらのブログではPowerAutomate活用のヒントがたくさん紹介されています。

1. O365上でExcelファイルを用意

まずはO365上にExcelファイルを用意します。
PowerAutomateから(PowerAutomateのフローを実行するユーザーから)参照可能なところであればどこでも結構です。

2. OfficeScriptでソートを実装

先程作成したExcelファイルを開くとメニューに「自動化」というタブが表示されます(ファイルを開いてから数秒待たないと表示されないことがあります):

image.png

ここから「自動化」→「すべてのスクリプト」→「+新しいスクリプト」と進み、表示されたコードエディターで関数を定義します:

image.png

function main(
  workbook: ExcelScript.Workbook,
  searchString: string,
  regexPattern: string,
  regexFlags: string
) : Array<string> {
  return searchString.match(new RegExp(regexPattern, regexFlags)) ?? [];
}

配列ソートの例では、スクリプトが Array<object> を戻り値とすることができないという問題がちょっとした障碍になりましたが、 Array<string> ならば問題ありません。

他のユーザーのフローからも実行する可能性がある場合は、「すべてのスクリプト」の一覧で「...」→「共有」をクリックしておきましょう:

image.png

3. 「スクリプトの実行」アクションをセットアップ

PowerAutomateのフロー側で「スクリプトの実行」アクションをセットアップします:

image.png

ちなみにこの画面キャプチャにあるアクションを実行すると結果は以下のようなJSONになります:

{
  "result": [
    "foo",
    "bar",
    "baz",
    "123"
  ],
  "logs": []
}

以上で、任意の文字列に対して、任意の正規表現パターンを使ったテストができるようになりました。

9
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?