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を使ってセル内改行を分割するサンプルフローは次の通りです。


「テキストの分割」アクションでは、「VBScriptの実行」アクションで生成された変数を指定しています。


コードは次の通りです。空のフローに貼り付ければ動作するのではないかと思います。

Excel.Attach DocumentName: $'''C:\\Test\\Book1.xlsx''' Instance=> ExcelInstance
Excel.ReadFromExcel.ReadCell Instance: ExcelInstance StartColumn: 1 StartRow: 1 ReadAsText: False CellValue=> ExcelData
Scripting.RunVBScript VBScriptCode: $'''WScript.StdOut.Write(vbLF)''' ScriptOutput=> VBScriptOutput ScriptError=> ScriptError
Text.SplitText.SplitWithDelimiter Text: ExcelData CustomDelimiter: VBScriptOutput IsRegEx: False Result=> TextList
LOOP FOREACH CurrentItem IN TextList
    Display.ShowMessageDialog.ShowMessage Message: CurrentItem Icon: Display.Icon.None Buttons: Display.Buttons.OK DefaultButton: Display.DefaultButton.Button1 IsTopMost: False ButtonPressed=> ButtonPressed
END


c:\test\book1.xlsx に次のように書いて開いておきます。

フローを実行すると次のように表示されます。


正規表現で一発解決

上の投稿を公開した後に、LFと','の両方に対応できるとええな、正規表現が使えればな、と思ったところで、ん? 正規表現!? 見たよそれ!!、と思いアクションを開くと正規表現のオプションが!! 早速 \n を指定してみたところ、サクッと動きました。


Excelのセル内改行を処理する場合には正規表現を使いましょう。

ちなみに、セル内改行でもカンマ区切りでも対応できるようにするには、区切り記号に次の文字列を指定します。

[\n,]

角括弧でくくることにより、\nもしくは「,」に該当するものが区切り文字として認識されます。

これでセル内改行されているデータもカンマ区切りされているデータも分割できるようになります。データを見やすいのはセル内改行。簡単に入力できるのはカンマ区切り。お好みで入力できます。


2022/11/19 追記

Power Automate for Desktopの正規表現のエンジンは .NET という事です。「Power Automate's regular expression engine is .NET.」

Build a custom selector 

正規表現のリンク先はこちらです。複雑な正規表現を組みたくなったらこちらを見ると良さそうです。

Regular Expression Language - Quick Reference


コメント

アクセス数の多い投稿

セキュリティ対策ソフトのノートンが詐欺ソフトまがいになってしまってショック

ZIPファイルを開こうとすると、展開を完了できません、と言われる

Windows セキュリティーのビックリマークが消えない

突然滅茶苦茶遅くなったPCがWindows Updateのキャッシュクリアで復活

Power Automate Desktopでブラウザでダウンロードしたファイルを処理する

NEC Aterm WX5400HP をセットアップ

Excel 2019 クエリが原因で日本語入力の一文字目が勝手に確定する

Excel VBAからODBCを使ってデータを簡単に取得する

Teamsで日本語入力すると左上に変換ウィンドウが出る

ChatGPTが日本語からVBAのコードを生成できてたまげる