Power AutomateでExcelのデータを元にTeamsに投稿する際に改行されない問題を改善する

はじめに

こちらの記事で、Power AutomateでExcelのデータを元にTeamsに自動通知を行うという事をやりましたが、

blog.jbs.co.jp

この際に、Excel内で入力していた改行がTeamsのメッセージに反映されない、という問題が残っていました。

今回はこの問題を何とかしたいと思います。

テスト用のデータとフローで検証する

テスト用のデータとフローを作成する

まず、改行コード周りに絞って動作を見るために、元のフローに足すのではなく、新たにテスト用のフローを作成します。

元のExcelにFlag列を設定し、テストで使いたいデータにフラグを立てます。

そして、このフラグの立った行を取得し、変数に入れるだけの簡単なフローを作成します。

データを解析する

フローの実行履歴で、どのようにデータが渡されているのかを一度確認してみます。

変数に格納された内容を「未加工入力の表示」で見ると、\nという改行コードとして認識されている事が分かります。

TeamsのメッセージはHTMLで書いているので、改行コードの\nをHTMLの改行である<br />に置換する事が出来れば、Excelの改行をTeamsでのメッセージにも反映できそうです。

改行コードを置換する

Power Automateには置換するための式としてreplace関数があります。

docs.microsoft.com

replace('<text>', '<oldText>', '<newText>')

という形式で文字列の置換できるので、これで\bを置換したいところです。

置換を試みる

変数に置換する時にrelace関数を使って

replace(outputs('行の取得')?['body/Detail'],'\n','<br />')

このように置換したかったのですが、残念ながら実行しても置換されません。

エスケープ文字列が必要なのかと試行錯誤したのですが、エスケープ文字でもダメでした。

改行コードを認識できない問題を解決する

この、改行コードを認識できない問題について、Qiitaに情報を載せてくれていた方がいました。

qiita.com

改行コードが認識できないなら、改行を入れた変数を用意すればいいじゃない、という目から鱗の方法です。こちらを参考に、改行だけ入れた文字列変数を用意します。

※ 分かりにくいのですが、値の部分で一度改行を実行しています

これをつかって、replace内の式を書き換えます。

replace(outputs('行の取得')?['body/Detail'],variables('LFcode'),'<br />')

これで、改行コードが<br />タグに置換されるようになりました。

Teams連携用に作成したフローに実装する

ここまで出来たので、同様の仕組みを「Power AutomateでExcelのデータを元にTeamsに自動通知を行う」で作ったフローに実装します。

まず、冒頭で改行コード格納用の変数を用意します。

また、繰り返し処理の中で式を使う際に、一旦変数に格納しないとうまくいかないので、そのための変数も用意しておきます。

繰り返し処理の中で用意した一時保管変数にExcelのDetailを格納し、それに対して改行コードの置換を実施します。

replace(variables('DetailTemp'),variables('LFcode'),'<br />')

これで、ちゃんと改行がTeamsでも反映されるようになりました。

おわりに

今回、Excelに入力してもらう際にHTMLで書いてもらうという回避策も考えたのですが、それも手間だったのでPower Automate側で処理できるようにしました。同じような悩みで困っている方の参考になれば幸いです。

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

舟越 匠

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

執筆記事一覧