はじめに
こちらの記事で、Power AutomateでExcelのデータを元にTeamsに自動通知を行うという事をやりましたが、
この際に、Excel内で入力していた改行がTeamsのメッセージに反映されない、という問題が残っていました。
今回はこの問題を何とかしたいと思います。
テスト用のデータとフローで検証する
テスト用のデータとフローを作成する
まず、改行コード周りに絞って動作を見るために、元のフローに足すのではなく、新たにテスト用のフローを作成します。
元のExcelにFlag列を設定し、テストで使いたいデータにフラグを立てます。
そして、このフラグの立った行を取得し、変数に入れるだけの簡単なフローを作成します。
データを解析する
フローの実行履歴で、どのようにデータが渡されているのかを一度確認してみます。
変数に格納された内容を「未加工入力の表示」で見ると、\n
という改行コードとして認識されている事が分かります。
TeamsのメッセージはHTMLで書いているので、改行コードの\n
をHTMLの改行である<br />
に置換する事が出来れば、Excelの改行をTeamsでのメッセージにも反映できそうです。
改行コードを置換する
Power Automateには置換するための式としてreplace関数があります。
replace('<text>', '<oldText>', '<newText>')
という形式で文字列の置換できるので、これで\b
を置換したいところです。
置換を試みる
変数に置換する時にrelace関数を使って
replace(outputs('行の取得')?['body/Detail'],'\n','<br />')
このように置換したかったのですが、残念ながら実行しても置換されません。
エスケープ文字列が必要なのかと試行錯誤したのですが、エスケープ文字でもダメでした。
改行コードを認識できない問題を解決する
この、改行コードを認識できない問題について、Qiitaに情報を載せてくれていた方がいました。
改行コードが認識できないなら、改行を入れた変数を用意すればいいじゃない、という目から鱗の方法です。こちらを参考に、改行だけ入れた文字列変数を用意します。
※ 分かりにくいのですが、値の部分で一度改行を実行しています
これをつかって、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編集長を兼任。2024年8月からキーマンズネットでPower Automateの連載を開始。好きなサービスはPower AutomateやLogic Apps。好きなアーティストはZABADAKとSound Horizon。
担当記事一覧