Power Automateでシングルクォートをエスケープする

はじめに

Excelに保存してあるブログ記事一覧をタイトルでフィルタして抽出する、という事をやっていたのですが、時々エラーになり、調査するとタイトルにシングルクォートが含まれているのが原因だとわかりました。

この対応策をまとめました。

問題の整理

Excelで複数の項目を読み込む時にフィルタクエリを使っていますが、クエリはこのようになります。

Title eq 'search text'

クエリの文章をシングルクォートで囲う必要があるので、検索ワード自体にシングルクォートが入っていれば、まぁエラーになりますよね。

こういう例ですね。

Title eq 'Let's Go'

現象の再現

実際に簡単なテストデータで現象を再現してみます。

Excelでこのようなデータを作成しました。

No Title
1 Let's Go!
2 Let's Play!
3 Test

また、ごく簡単なPower Automateを作りました。

入力がTestだと普通にフィルタ出来るのですが

入力がLet's Go!だとエラーになります。

方針を考える

今回もreplace関数でなんとかしてみようと思います。

この手の特殊な文字はreplace関数で単純に置換するのは難しいのですが、幸い、似たような前例がありました。

blog.jbs.co.jp

改行コードを認識させるために変数に改行を入れて利用していたので、今回も同様にシングルクォートを入れた変数を用意した上でreplace関数による置換を試みたいと思います。

フローの修正

先ほどの検証用フローに変数を二つ追加します。

一つは、シングルクォート用、もう一つは、エスケープするためにシングルクォートを2つ重ねたものです。

そして、フィルタクエリをreplace関数で置き換えます。

replace(triggerBody()['text'],variables('single-quote'),variables('single-quote-esc'))

動作確認

では実際に動かしてみましょう。

ちゃんと動きました。

フィルタークエリを見ると、ちゃんとTitle eq 'Let''s Go!'と文中のシングルクォートがエスケープされていることがわかります。

おわりに

ということで、シングルクォートを置換してエスケープし、希望の動作を実現できました。

実際には、分岐を入れて、記事タイトルにシングルクォートが入っている時だけこの処理で置換するような作りにしています。

改行に引き続きシングルクォートでも変数が上手く活用出来ました。なかなか応用が効きますね、このやり方。

投稿者プロフィール
舟越 匠

舟越 匠

人材戦略部に所属。社内向けの技術研修をメインにしつつ、JBS Tech BlogやMS認定資格取得の推進役もやっています。資格としてはAzure Solutions Architect Expertを所持。Power AutomateやLogic Appsで楽をするのが好きです。

執筆記事一覧