「CSVファイルから読み取る」を使う場合に、取得したCSVが意図したファイルかを確認する方法を考えました。
全く違うCSVを読み取ってエラーで停止という症状を回避したいためです。
ついでに複数条件のIFの説明もあります。
目次
実行環境
- Windows 11 Pro 22H2
- Power Automate Desktoop バージョン 2.34.187.23206
作業手順
1. CSVファイルを列名含めて読み取る
- CSV ファイルから読み取るフローを作成。
- 最初の行に列名が含まれていますをONにします。
2. 条件IFで列名をチェックする
正解は1列目が「ライブラリー」2列目が「データベースID」のCSVとします。
- IFのフローを作成。
- 最初のオペランドを次のように指定します。
%CSVTable.ColumnHeadersRow[0] = ‘ライブラリー’ AND CSVTable.ColumnHeadersRow[1] = ‘データベースID’%
- 演算子を「と等しくない(<>)」、2 番目のオペランドに true を設定します。
- 最初のオペランドを次のように指定します。
ふぅたこ
列数が2つ以下の場合にエラーが出てしまう課題発見・・・。
3. 正しくない列名の場合は処理を止める
- 2. の条件と違ったCSVファイルを読み込んだ場合はIFの処理に進みます。
- エラーメッセージを表示したり、フローを停止する処理を入れればOKです。
今回のソース
Power Automate Desktop
コピー貼り付けで利用できます
Display.SelectFileDialog.SelectFile Title: $'''CSVファイルを指定してください。''' FileFilter: $'''*.csv''' IsTopMost: False CheckIfFileExists: True SelectedFile=> SelectedFile ButtonPressed=> ButtonPressed
IF ButtonPressed = $'''Cancel''' THEN
EXIT Code: 0
END
File.ReadFromCSVFile.ReadCSV CSVFile: SelectedFile Encoding: File.CSVEncoding.SystemDefault TrimFields: True FirstLineContainsColumnNames: True ColumnsSeparator: File.CSVColumnsSeparator.SystemDefault CSVTable=> CSVTable
IF (CSVTable.ColumnHeadersRow[0] = 'ライブラリー' AND CSVTable.ColumnHeadersRow[1] = 'データベースID') <> $'''true''' THEN
Display.ShowMessageDialog.ShowMessage Title: $'''エラーです''' Message: $'''指定のCSVではありません。
列名は\'ライブラリー, データベースID\'の形式にしてください。
''' Icon: Display.Icon.ErrorIcon Buttons: Display.Buttons.OK DefaultButton: Display.DefaultButton.Button1 IsTopMost: False
EXIT Code: 0
END
テスト用のCSVファイル
正しい判定になるCSV
誤った判定になるCSV
まとめ
意図したCSVファイルと違ったファイルを読み込み、「よくわからないエラーが出る」という相談を受けたため解決方法を考えてみました。
複数条件のIF文も使い方がわかったため他のパターンでも使えそうです。
コメント