Power Automate で CSV ファイルを取り込む

Published: feedback 共有

こんにちは、Power Platform サポートの瀬戸です。
今回は、Power Automate で CSV ファイルを取り込む方法をご紹介します。
標準コネクタのみで実現する方法なので、多くの方に活用していただけます。

前提条件

  • CSV ファイルの文字コードは UTF-8 に対応しています。
    • Shift_JIS など他の文字コードでは、日本語が文字化けしますのでご注意ください。
  • CSV ファイルの列数・行数はあまり多くないことを前提としています。
    • 列数・行数が増えると、その分アクション数が増えてフローも長大になる可能性があるのでご注意ください。

今回取り込む CSV ファイル

上図が今回使用した Excel シートです。これを、ファイルの種類を「CSV UTF (コンマ区切り)」へ変更して保存しました。その CSV ファイルをメモ帳で開いた様子が下図です。

特徴は下記の通りです:

  • ヘッダー行 : 無し
  • 引用符 : 無し
  • 文字コード : UTF-8 (BOM付き)
  • 改行コード : CRLF

フローの例

今回の例では、以下の状況を想定しています。

  • トリガー: CSV ファイルが OneDrive に作成されたとき
  • やりたいこと:SharePoint リストに CSV ファイルの内容を登録する

↓やりたいことイメージ図

フローの全体図は下記の通りです。

ここから、フローの詳細を順を追って解説いたします。

CSVファイルの内容を行ごとに分割する

CSV ファイルを処理する前に、まずは改行を格納する変数を用意します。

式:decodeUriComponent('%0D%0A')

今回の例では、decodeUriComponent 関数 を使用します。パラメータの %0D%0A は改行コード (CRLF) を表しています。

次に、トリガーアクションの「ファイルコンテンツ」を変数「CSVコンテンツ」に格納します。その後、「CSVコンテンツ」を「改行コード」で分割してアレイ変数に格納します。
指定の文字で分割するには、split 関数 を使います。

式:split(variables('CSVコンテンツ'), variables('改行コード'))

列ごとの値を入れる変数の準備

次に、列を分割した後の値を入れるアレイ変数 (列配列) と、CSV ファイルに定義されている列と同じ変数を初期化します。

今回は 商品、単価、個数の3つの列があるので、それぞれ同じ名前で変数を作りました。

空の行を取り込まないようにする分岐

ここから、行ごとの繰り返し処理 (Apply To Each) に入ります。

繰り返し処理の初めに条件を指定し、行が空ではないときだけ「はいの場合」が実行されるようにします。

条件式の左辺:length(item())

length(item()) が 0 より大きい」ときに「はい」になるようにしています。item() は行配列の各要素を表しているので、行が空でなければ「はい」になります。
この条件を入れておくと、CSV ファイルの最後の行が空の場合に、空のまま取り込んでしまうのを防止できます。

この条件分岐なしでフローを作成すると、取込先の SharePoint リストに空のデータが入ってしまいます。

カンマごとに列を分割する

ここからは、条件分岐の「はいの場合」のときの処理です。

まず、行データをカンマで分割し、「列配列」変数へ格納します。その後、列配列の各要素を、商品、単価、個数の変数へ格納します。

それぞれの変数名と値は下記の通りです。

  • 列配列 : @{split(item(), ',')}
  • 商品 : @{variables('列配列')?[0]}
  • 単価 : @{variables('列配列')?[1]}
  • 個数 : @{variables('列配列')?[2]}

分割した値を取り込む

最後に 商品、単価、個数を SharePoint リストへ登録します。

あらかじめ作成しておいた SharePoint リストを選択すれば自動的に列が表示されますので、それぞれ対応した変数を指定します。

詳細の解説は以上です。

ヘッダー行がある場合

先ほどの例は CSV ファイルにヘッダー行がありませんでしたが、ヘッダー行がある場合は、ヘッダー行を取り込んでしまわないような処理が必要です。

例えば、CSV ファイルの行を読み取るたびに何行目かをカウントし、1行目だけ読み飛ばすようにします。そのために、まずは先ほどのフローの Apply to each の前に、新しい変数の初期化を挿入します。

  • 名前 : 行カウンタ
  • 種類 : 整数
  • 値 : 1

次に、Apply to each の中の条件分岐の条件式を追加します。

「行カウンタが1より大きい」となるように条件を設定します。
これで、行カウンタが1のときは「いいえの場合」になるので SharePoint リストへの登録が行われなくなります。

最後に、条件分岐が終わった後に「変数の値を増やす」アクションを追加します。行配列を読み込むごとに、1ずつカウントアップします。これで、2行目以降は 「はいの場合」になります。

最後に

以上、Power Automate で CSV ファイルを取り込む方法をご紹介いたしました。
SharePoint リストへの登録の部分を他のアクションへ置き換えることで、様々な状況で活用していただけます。参考になりましたら幸いです。

※本情報の内容(添付文書、リンク先などを含む)は、作成日時点でのものであり、予告なく変更される場合があります。