Power Automate を使っていて、SharePointのリストやFormsからアイテムを取得した際に、しばしば以下のような表示を目にしたことがあるのではないでしょうか。(赤文字の部分)
これらは複数行テキストの列に格納されたデータを取得した時に発生します。例えば1個目の場合には改行コードが\n
として見えています。
2個目の場合は、配列が文字列化されていますね。Formsで複数選択の設問をつくるとこんな感じで取れます。
このように、複数行テキストを値に持つようなケースにどう対応したらよいでしょうか?
例: 改行を消したい
1個目のような例で、改行を消したい場合。よくやりがちなのは「\n
が余分だからreplace(....,'\n','')
で消してしまおう」というアプローチです。
残念ながらこの操作では期待通りの結果は得られません。
ではどうするのかというと、改行コードを指定して消す です。
上の例のように \n
の場合 (LF)では、decodeUriComponent('%0A')
が改行コードを表します。
※改行コードについてはこちらを参考に
または \r\n
で改行されている場合 (CRLF) には、decodeUriComponent('%0D%0A')
が改行コードを表します。
これらを踏まえて、改行を消す場合の式は
replace(....,decodeUriComponent('%0A'),'') //LF(\n)の場合
replace(....,decodeUriComponent('%0D%0A'),'') //CRLF(\r\n)の場合
例: 改行で分割したい
例でいうと下図のように改行で分割して配列にするようなケースです。これもまあまあありますね。
この時も改行コードで分割するということを念頭に置くと、必要な式は
split(....,decodeUriComponent('%0A')) //LF(\n)の場合
split(....,decodeUriComponent('%0D%0A')) //CRLF(\r\n)の場合
となります。
例: JSON/配列をJSON/配列として扱いたい
最後にJSONオブジェクトや配列が文字列になっているケースです。これもよくやりがちなのは「ダブルクォーテーションが \"
となっているから "
で置換しよう」です。
もちろんうまくいきません。
こんなケースでは素直にjson()
関数を利用します。
単純な1個の関数で対象の列を囲んであげると・・・
期待通り、配列になってくれています。オブジェクトの場合にも同様です。
おわり
複数行テキストって便利なんですが、加工して利用しようと思うと少しハードルがありますね。
あとはAPIの仕様によっても、JSONが文字列化されて返されるケースもあります。
そんなときには今回ご紹介したようなアプローチを試してみてください。
MoreBeerMorePowerもよろしくね!