Power AutomateでExcelのデータを元にTeamsに投稿する際にURLにハイパーリンクが設定されない問題を改善する

はじめに

Power AutomateでExcelのデータを元にTeamsに投稿するシリーズの続きとなります。

実は、上記の記事の通りに実行すると、Excel内でURLがあった場合に、Teams側でハイパーリンクが設定されない、という問題がありました。

今回はこれを改善したいと思います。

※ 初出時に条件によってフローが正常に動作しない問題があったので、2022/4/12に追記しました。初出時の情報を参考にして問題が発生してしまった方は申し訳ありません。

Power Automateを修正する

今回の対応は、改行コードをフロー内で処理できる仕組みが必要となっています。そのため、Power AutomateでExcelのデータを元にTeamsに投稿する際に改行されない問題を改善する - JBS Tech Blogで修正済みのフローを使います。

前回は、改行コードをbrタグに置換する、というのがキモの部分でした。

今回は、改行したデータを配列形式の変数に格納して処理をする、ということが必要になりますので、 ここを置換ではなく分割に変更します。

このようなイメージです。

元のデータ

Detail
みんな見てね!
https://blog.jbs.co.jp
舟越の記事はこちら!
https://blog.jbs.co.jp/archive/author/jbs_tfunakoshi

分割後のデータ

Detail
みんな見てね!
https://blog.jbs.co.jp
舟越の記事はこちら!
https://blog.jbs.co.jp/archive/author/jbs_tfunakoshi

変数を準備する

そのために、分割したデータを格納する変数を用意しておきます。また、分割して加工した後、結合する変数も必要になりますので、これも用意します。 イメージです。

用意した変数です。

改行コードで分割する

Excelで受け取ったデータをまずDetailTempという変数に格納します。ここまでは同じですが、この後、relplace関数を使って分割します。

どの文字で分割するか、の部分で、改行コードを格納した変数を使います。

split(variables('DetailTemp'),variables('LFcode'))

すると、このように、改行コードでデータが分割された、複数のデータとしてDetailArrayに保管されます。

URLかどうかで分岐する

分割したデータですが、URLかどうかで、実行したい処理が異なってきます。*1

データ 実行したい処理
JBS Tech Blog 更新中 末尾に改行を入れる
みんな見てね! 末尾に改行を入れる
https://blog.jbs.co.jp ハイパーリンクの設定を行い、末尾に改行を入れる
舟越の記事はこちら! 末尾に改行を入れる
https://blog.jbs.co.jp/archive/author/jbs_tfunakoshi ハイパーリンクの設定を行い、末尾に改行を入れる

これを実現するために、DetailArrayに対して繰り返し処理を行います。

今回は、URLかどうかは、「先頭の文字がhttps://ではじまるかどうか」で判断するようにしました。

データを処理する

URLとして判断したものは、その値であるURL自身を使って、ハイパーリンク用のaタグを生成します。

<a href="@{items('Apply_to_each_2')}">@{items('Apply_to_each_2')}</a><br />

そうでないものは、単純に末尾にbrタグを追記します。

@{items('Apply_to_each_2')}<br />

これを文字列関数Detailに追加します。

実際に生成される値はこのようになります。

URLの場合

<a href="https://blog.jbs.co.jp">https://blog.jbs.co.jp</a><br />

URLではない場合

JBS Tech Blog 更新中<br />

Teamsに投稿する

最後に、すべての文字列を追加して結合した変数Detailを、Teamsのメッセージに指定します。

動作確認をする

実行すると、無事、ハイパーリンクが設定されたメッセージが投稿されました。

制限事項

今回の仕組みを使うための制限事項です。

  • URLをExcelに書くときは、URLだけが1行に書かれている
  • URLがhttps://から始まっている

重要な追記

この章は2022/4/12に追記しました。

失敗例

同じタイミングでTeamsに投稿する記事が複数ある場合、このままだと生成される文章がおかしくなってしまいます。

Excelのデータ

生成されるメッセージ

後者のメッセージに、最初のメッセージも含まれてしまう事が分かります。

修正方法

Teamsに投稿する際、ループの中で一度変数Detailの中身をリセットする場所を作ります。

Before

After

ここでは、変数Detailに半角スペースを一度セットしています。この時、「変数への追加」ではなく、「変数の設定」を使う必要があります。

動作確認

これで、複数のメッセージを正常に投稿する事が出来ました。

おわりに

最初は、「ハイパーリンクに自動でタグ設定なんか無理…」と思っていたのですが、夜寝る前に急に閃いて、翌朝試したら意外と簡単に実装出来ました。

URLをコピーして使うか、直接クリックするか、は使い勝手にかなり影響があるので、同様のケースでお困りの方は、ぜひ試してみてください。

*1:厳密には最終行の改行はいらないのですが、処理上削るのが難しいので途中と同じ処理にしてしまいます

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

舟越 匠

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

執筆記事一覧