ルドルフもわたるふもいろいろあってな

Microsoft 365、Power Platform、PowerShellについて調べたことや検証したことなどを投稿します。技術の話は面白い。

【質問回答】【Power Automate】CSVの特定の行以降を取り込む

ましゅまろで質問をいただいたので回答します。

こんなましゅまろをいただきました。

質問内容は「CSVで指定した行以降のデータをフローで取り込むにはどうすれいいか」ですね。

回答:skip関数を使う

Power Automateには skip関数があります。skip関数を使うと配列(アレイ)の先頭から任意の数の要素を削除することができます。

skip(【①】, 【②】)
【①】・・・ 削除する対象の配列
【②】・・・ 削除する件数

解説:skip関数を使ってCSVで指定した行以降のデータを取り込む

このフローを例にして解説します。
wataruf.hatenablog.com

注目するべき箇所は以下の2つのアクションです。

  • CSVを改行でスプリットするアクション
  • CSVのデータを1行目(= 列名)を除いて取り込むアクション

CSVを改行でスプリットするアクション

※この章はフローの解説記事に記載している内容の再掲です。

「データ操作」>「作成」アクションです。ここではトリガーのアクションから取得したデータを行ごとに区切ります。

"inputs": "@split(triggerOutputs()?['body'], decodeUriComponent('%0D%0A'))"

CSVから読み込んだデータはその時点では1行のテキストです。
 ※トリガーの出力をテキストエディタで表示しています

このアクションでは、CSVから取得した1行のテキストをsplit関数を使ってテキスト分割します。分割を行う区切り文字として使用しているのが「decodeUriComponent('%0D%0A'))」から返される値です。

decodeUriComponent関数はURLエンコードされた文字列をデコードする関数です。

ここでデコードしているのは「%0D%0A」という文字列です。デコードした結果得られる値が改行コードを表す「r\n\」です。手入力で「r\n\」を入力してもPower Automateは改行コードとして認識できないため「decodeUriComponent('%0D%0A'))」という指定をしています。


CSVのデータを1行目(= 列名)を除いて取り込むアクション

次に、前述のアクションで得たCSVの配列を入力として1行目(= 列名)を除いた出力を取得します。ここでskip関数を使います。

これはCSVの全行を表す配列から最初の1行、つまり列名を表す行を削除することを表します。削除した残った行(= 2行目以降)がこの関数の出力として得られます。

skip(outputs('作成-CSVの全行'),1)

これがアクションの入力です。そしてこのアクションの出力が、、


こちらです。期待通り列名が削除されました。

質問でいただいた『csvの15行目以降を取り込む』のやりかた

skip関数を使えば、質問でいただいた要件にも対応できます。

要件がこちらです。

csvの15行目以降を取り込む』(14行目までは常に無視する、15行目がヘッダ、16行目以降が値)

データとして取り込みたいのが15行目以降なので、削除したいのは1~15行目の15行ですね。

なので、skip関数を以下の通り記載します。配列のほうは、章「CSVを改行でスプリットするアクション」の出力をいれてください。

skip(【CSVのデータを改行でスプリットした配列】,15)


解説は以上です。

最後に

参照元のブログ記事の解説編その1 でコメントをいただきました。はい、8月中に書きたいと思います。


今回は以上です。