Power Automate DesktopでExcelのセル内改行(LF)を処理する
Power Automate DesktopでExcelのセル内改行を処理する必要が生じたので、調べてみました。
(正規表現を使えば一発でした。お急ぎの方は最後をご覧ください)
標準のアクションでは難しい
Excelから取得したセルデータに対して、とりあえずダメもとで「テキストの分割」アクションを使って分割を試みましたがやっぱりだめでした。
Excelのセル内改行コードはCRLF(0x0D0A)ではなく、LF(0x0A)なので、改行とは認識されませんでした。
スクリプトを使って取得する
改行文字を指定するには「テキストの分割」アクションになんとかLFを指定する必要があります。ところが、Power Automate DesktopのアクションにはExcelのCHARのような関数は見当たりません。
検索すると次のページがヒットしました。
Power Automate Desktopで、改行コード(CRLF)を使用する方法
なるほど、スクリプトを使って生成するわけですね。
VBScriptを使った方法
上の例ではPowerShellを使って取得していますが、VB使いの私としては、試しにVBScriptを使って取得してみました。実行するコードは次の通りです。
WScript.StdOut.Write(vbLF)
コードの説明は次のページに書かれています。なおvbLFはLF文字を表すVBScriptの定数です。
atmarkit - 第3回 WScriptオブジェクトの詳細(1)
可読性という意味ではVBScriptの方が良いかもしれませんが、簡単なのはPowerShellです。
サンプル
LFを使ってセル内改行を分割するサンプルフローは次の通りです。
コードは次の通りです。空のフローに貼り付ければ動作するのではないかと思います。
Excel.Attach DocumentName: $'''C:\\Test\\Book1.xlsx''' Instance=> ExcelInstancec:\test\book1.xlsx に次のように書いて開いておきます。
フローを実行すると次のように表示されます。
正規表現で一発解決
上の投稿を公開した後に、LFと','の両方に対応できるとええな、正規表現が使えればな、と思ったところで、ん? 正規表現!? 見たよそれ!!、と思いアクションを開くと正規表現のオプションが!! 早速 \n を指定してみたところ、サクッと動きました。
Excelのセル内改行を処理する場合には正規表現を使いましょう。
ちなみに、セル内改行でもカンマ区切りでも対応できるようにするには、区切り記号に次の文字列を指定します。
[\n,]
角括弧でくくることにより、\nもしくは「,」に該当するものが区切り文字として認識されます。
これでセル内改行されているデータもカンマ区切りされているデータも分割できるようになります。データを見やすいのはセル内改行。簡単に入力できるのはカンマ区切り。お好みで入力できます。
2022/11/19 追記
Power Automate for Desktopの正規表現のエンジンは .NET という事です。「Power Automate's regular expression engine is .NET.」
正規表現のリンク先はこちらです。複雑な正規表現を組みたくなったらこちらを見ると良さそうです。
Regular Expression Language - Quick Reference
コメント
コメントを投稿