【プレミアムアクション未使用】Power AppsでCSVをインポートする

業務でPower Appsを使う際に、普通のプログラム言語だと簡単に出来ることがなかなか出来ずに悩むことがあります。
今回はそんな処理の中から「CSVファイルをインポートする」ことをやってみたいと思います。

また、少し前にネットで検索した際、プレミアムアクションを使う例があり自分も試したのですが、寧ろプレミアムアクションを使用したものが何故か上手くいかなかったこともあり少々ハマり気味だったので、プレミアムアクションを使わない方法で解決してみました。


前提条件

  • 読み込むCSVは予めフィールドを知っていることとします

  • 使用するのは Power Apps、Power Automate(通常アクションのみ)

前提としては上記とします。
なので、得体の知れないCSVを読み込むことはせず、予めどんな列がどの位あるのか位は把握しているものとします。
(そもそもローコードな環境でよく知らないCSVを上手に加工するようなアプリを作らないとは思いますが)


Power Automate


Power Automate 側の処理は特に変わったことはせず、トリガーv2 で受け取ったファイルを何もせずに返すだけです。
これで単純に全部の行が1行になった文字列だけが返ります。

Power Automate 側の処理

ただ、Power Apps 側からファイルを投げる方がやや面倒な感じなので、そこが簡単になると良いなぁ、とは思います。

編集フォーム貼って、SharePointのリストに接続して添付ファイルのコントロールだけ取ってフォーム消して…

このファイル添付のコントロールだけ挿入で追加したい

Power Apps

さて読み込みの方ですが、こんな感じのデータにしてみます。
一応二重引用符の内側には半角のカンマ有りで、単純な Split は出来ないケースとします。

Column1,Column2,Column3,Column4
1,a,"b",c
2,"a,b",c,d
3,a,b,"c,d,f"

単純に Split するとこんな感じの残念な感じのよくありそうなやつです。

ありがちな残念なやつ

とりあえず、前述のフォームからファイルを投げると1つの長いテキストで返ってくるので、キャリッジリターン CR = Char(13) を消すことと、ラインフィード LF = Char(10) で分割するところまでは至って普通です。

Set(
    _csv,
    // Power Automate にファイルを投げて、中身を受け取る
    CSVLoad.Run(
        {
            file: {
                name: First(uploadFile.Attachments).Name,
                contentBytes: First(uploadFile.Attachments).Value
            }
        }
    )
);
Set(
    _lineSplitted,
    // 改行コードで行単位に分割
    Split(
        Substitute(
            _csv.result,
            Char(13),
            ""
        ),
        Char(10)
    )
)

で、行をそのまま Split すると残念な結果にしかならないので、良い感じに
分割するとこんな感じになる訳です。
二重引用符の内側も無害な読点に変換されていることがわかります。
もちろん別の記号が良ければ任意の記号に置き換えることが出来ます。

こんな感じ

その関数郡としては次の様なコードになります。
まぁ、単純に ForAll と正規表現を使ってエイッてやつです。
下記の様なコードで二重引用符内の半角カンマも考慮しつつ、CSVを読み込めたかと思います。

Power Apps の関数だけで意外と出来るもんだなぁ、と思いました。
応用も効きそうなので、よければ是非とも活用してもらえたらと思います。

ここから先は

3,423字

¥ 500

日常が少しでも良くなるように工夫したこと、アイディアなどを書き留めていこうと思います。 もしよろしければサポートをお願いします。