Introduction
Power Automate for desktopでCSVデータテーブルを操作する場合、EXCELファイルに変換し「SQL ステートメントを実行する」アクションで操作することができます。しかしデータテーブルに「007」「008」のような数値をテキストとして扱いたい列を含むときはEXCEL変換時、数値に変更されてしまうため困ることがあるかもしれません。
そこで「PowerShellスクリプトの実行」アクションを使ってCSVデータテーブルを操作するフローを紹介します。PowerShellは直接CSVファイルを読み込むことができ、SQLのようにデータテーブルの操作が可能です。今回は「007」「008」のようなテキストとして扱いたい列を維持しながら日付列を操作します。
sample.csv
RowID,Name,TextValue,Created,Modify
dd3341fb-bb89-ec11-93b0-000d3a40692d,AZX,00765,2022/02/09 15:21,2022/02/09 15:21
1cdf548a-8468-ec11-8943-000d3a40fca2,XZZ,0345,2021/12/29 8:51,2021/12/29 8:51
ef162ef4-8468-ec11-8943-000d3a40fca2,XZy,0385,2021/12/29 8:54,2021/12/29 8:54
d007bc9b-0967-ec11-8f8f-002248622feb,MVS,0787,2021/12/27 11:39,2021/12/27 11:39
236685ce-0967-ec11-8f8f-002248622feb,PAD,00888,2021/12/27 11:40,2021/12/27 11:40
Modify列の日付を操作します。
Note
- 自己責任でお願いします。
- Windows 10 Pro 21H2
- Power Automate for desktop 2.23.114.22217
- 2022年8月の情報です。
Flow Description
デスクトップにsample.csvを作っておきます。このフローでは一時ファイルを作成し、PowerShellスクリプトの実行アクションでデータテーブルを操作、一時ファイルに書き出すところがポイントです。
-
Get special folder
デスクトップフォルダーを取得します。 -
Get temporary file
一時ファイルを生成します。 -
Run PowerShell script
PowerShell scriptを実行します。一時ファイルに書出時 -NoTypeInformationを忘れないようにします。
# CSVを読み込み
$datatable = Import-Csv "%SpecialFolderPath%\sample.csv" -Encoding utf8
# Modify列をdatetimeオブジェクトに変更
$datatable | ForEach-Object{$_.Modify = [datetime]($_.Modify)}
# Modify列の値に+7日
$datatable | ForEach-Object{$_.Modify = ($_.Modify).AddDays(+7)}
# 一時ファイルにデータを書き込み
$datatable | Export-Csv -Path "%TempFile%" -NoTypeInformation -Encoding utf8
⒋ Read from CSV file
Tempファイルからデータを読み込みます。
DateTime Manipulation Options
参考 DateTime Struct
今回使用したDateTime.AddDays(Double) Methodの他にも日時操作に関するメソッドが多数用意されています。
たとえばToStringメソッドを利用することで書式を変更できます。
Data Table Operations
Select-Objectで列を選択したりWhere-Objectを利用することで値をフィルターできます。
参考
Conclusion
「PowerShellスクリプトの実行」アクションを使用することで、テキストとして扱いたい列を維持しながらCSVデータテーブルを操作しました。今回は一時ファイルを利用しましたが、データによってはJSONで出力した方が便利な時もあります。
Power Automate for desktop「最初に知りたかったデータテーブルの扱い方」
今回の記事はMicrosoft Power Automate Community Forumの質問をネタに書きました。
細かな使い方ですが便利だと思います!
CSV to PAD Table - How to query table using sql? Loops to change column data takes way to long.