はじめに
Power Automate Desktop(以下 PAD)をはじめて触ったとき、
CSV ファイルのレコードを1行ずつ更新する処理を作ろうとしました。
少しでもプログラミング経験があると、
CSV を配列(テーブル)として読み込んで、for 文で index 指定すればいいのでは?
と考えると思います。
ところが PAD を使ってみると、
for 文が見当たらない……。
この記事では、PAD 初心者の自分がCSVを1行ずつ更新する際に
For each と インデックス変数 を使って for 文っぽく処理した体験を共有します。
これから PAD を触る方々の参考になれば幸いです。
やりたかったこと
今回やりたかった処理は以下です。
- CSV ファイルを読み込む
- 1行ずつデータを処理する
- 特定の列の値を更新する
- 更新後の CSV を保存する
いわゆる CSV の全レコードを1行ずつ更新する処理 です。
困ったポイント:for 文がない
PAD で繰り返し処理を探すと、見つかるのは For each のみでした。
For each は、テーブルやリストの 要素そのもの を1件ずつ処理するという動きです。
しかし今回やりたかったのは、
- 「今、何行目を処理しているか」
-
CSVTable[0],CSVTable[1]のように 行番号(index)で指定して更新
という処理でした。
そのまま For each を使うと、
行番号を使った更新がしづらいと感じました。
解決策:インデックス変数を用意して for 文っぽくする
最終的に行き着いた結論はこれです。
インデックス用の変数を自分で用意して、For each の中で増やす
これで「for 文っぽい処理」ができました。
実際の処理の流れ
① CSV ファイルを読み込む
- 「CSV ファイルから読み取る」
- 出力先:
CSVTable
PAD では CSV は データテーブル として扱われます。
② インデックス用の変数を初期化
Index = 0
- 数値型の変数を作成
- 先頭行を指すため 0 から開始します
③ For each で CSV を回す
For each CurrentItem in CSVTable
ここでは CurrentItem 自体はほとんど使わず、
「いまは Index 行目を処理している」という考え方で進めます。
④ Index を使って CSV の行を更新する
- CSVTable[Index] で行番号を指定
- 列名(または列番号)を指定して値を更新
For each の中なのに、
やっていることは for (i = 0; i < n; i++) に近い処理です。
⑤ Index を 1 増やす
ループの最後でインデックスを進めます。
Index = Index + 1
⑥ CSV ファイルに書き戻す
最後に、
- 「CSV ファイルに書き込む」
- 更新後の CSVTable を保存
これで CSV を1行ずつ更新できます。
さいごに(感想)
内容としてはとても簡単なものですが、はじめて使うサービスで
「自分がよく使う機能が見当たらない」と、少しビビりますよね~。
