Power Automate for Desktop で複数行のテキスト列を連結する
Power Automate for Desktop(PAD)で、Excelの次のような複数行の文字列を持つセル同士を横に連結しようとしたところ、そう簡単ではありませんでした。
UNIXならpaste
UNIXならそんなことは簡単にできたという記憶があったため、検索してみたところ、pasteでした。
pasteコマンドについて詳しくまとめました 【Linuxコマンド集】
PowerShellにはないらしい
UNIXにできるのなら、PowerShellにもできるだろうと、検索したけれど見つかりませんでした…
(PowerShellはPADから実行可能です)
Pythonにはあるらしいけど、PADでは使えない
それならPython(PADから実行可能)にはあるだろうと思ったら、Pandasというライブラリーを使えばできそうでした。
しかし、それには Python 3が必要で、PADに搭載されているのはPython 2でした。
PADも外部モジュールを使えばできるのかもしれませんが、それだと各PCにいちいちPythonのインストールが必要そうで面倒です。(共有フォルダーからロードできるのでしょうか?)
それに、Pandasを使ったからと言って、簡単にできるとかいうと、そうではなさそうでした。(DataFrameというデータ構造を理解する必要があり、単純なリスト構造より複雑そうでした)
結局PADで実装
結局、仕方がないのでPADで実装することにしました。
全体のフローは次の通りです。クリックで拡大できます。
2, 3
「Excelワークシートから読み込み」アクションを使って、A1とB1セルを読み込みます。
4, 5
読み込んだセルを、「テキストの分割」アクションを使ってリストに変換します。
Power Automate DesktopでExcelのセル内改行(LF)を処理する
6
1から、リストの数までLoopします。
7
リストのインデックスは0から始まっているため、LoopIndexから1引きます。
8
IndexLoopが1の場合、つまり初回の場合。
9
リストのインデックスを使ってリストから値を取り出し、Resul変数に代入します。
今回は半角スペースで区切っています。必要に応じてカンマやタブを使うとよいでしょう。
10, 11
初回でなければ、「テキストに行を追加」アクションを使って、行を追加していきます。
コード
上記のコードは次の通りです。PADにコピペできると思います。
Excel.LaunchExcel.LaunchAndOpenUnderExistingProcess Path: $'''C:\\NKTemp\\PADSample.xlsx''' Visible: True ReadOnly: True Instance=> ExcelInstance
Excel.ReadFromExcel.ReadCell Instance: ExcelInstance StartColumn: $'''A''' StartRow: 1 ReadAsText: False CellValue=> uCellA
Excel.ReadFromExcel.ReadCell Instance: ExcelInstance StartColumn: $'''B''' StartRow: 1 ReadAsText: False CellValue=> uCellB
Text.SplitText.SplitWithDelimiter Text: uCellA CustomDelimiter: $'''\\n''' IsRegEx: True Result=> uListA
Text.SplitText.SplitWithDelimiter Text: uCellB CustomDelimiter: $'''\\n''' IsRegEx: True Result=> uListB
LOOP LoopIndex FROM 1 TO uListA.Count STEP 1
SET uListIndex TO LoopIndex - 1
IF LoopIndex = 1 THEN
SET Result TO uListA[uListIndex] + ' ' + uListB[uListIndex]
ELSE
Text.AppendLine Text: Result LineToAppend: uListA[uListIndex] + ' ' + uListB[uListIndex] Result=> Result
END
END
Excel.CloseExcel.Close Instance: ExcelInstance
というわけで、PowerShellやPythonを使えばサクッと数行で実装できるのかと思いましたが、私の調べた限りでは見つかりませんでした。
長くなるのなら、メンテナンス性(他の人が保守すること)を考えるとPADで実装した方が良さそうです。
パフォーマンスを考えるとまた別かもしれませんが。
コメント
コメントを投稿