Power Automate「Excel Online(Business):表に行を追加」アクションの空白行問題 #Power Platformリレー

こんにちは、あおいです。
久しぶりに三田製麺所のつけ麺が食べたくなってきました。特に灼熱つけ麺が食べたいです。


DataverseのデータをPower AutomateでExcelに転記して書類の自動発行をする #Power Platformリレー | cloud.config Tech Blog
以前紹介したこちらのブログで実際にハンズオンをされた方、次のようなことが発生されたかもしれません。

最初の行が空白行となってしまい、2行目からデータが追加されてしまっていて違和感がある。。。
また、書類の見た目も正直良いとはないですね。


なぜこうなってしまったのか色々調べてみましたが、結局未解決のままです。
力不足で本当に申し訳ないです。。。


そこで、今回のブログはこの空白行の問題を解決する方法を2パターン紹介します。

<注意点>これから紹介する方法は根本的な解決とはなっていませんので、あくまでも最終手段として参考にしてください。


1つ目は「Excel Online(Business)」コネクタの「行の削除」アクションで最初の空白行を削除する方法です。

まずは請求書テーブルの品名列のセル内に適当なワードを入力してくだい。今回は品名のセルと入力します。
次に、「Excel Online(Business)」コネクタの「行の削除」を選択してください。
場所「ドロップダウンから該当の場所を選択」、ドキュメントライブラリ「ドキュメント」、ファイル「動的なコンテンツからId(ファイルの作成)を選択」、テーブル「カスタム値の入力を選択して請求書と入力」、キー列「カスタム値の入力を選択して品名と入力」、キー値「品名のセルと入力」など各項目を設定していきます。



試しにフロー実行をしてファイルを確認してみましょう。



空白行は削除されてきちんと1行目からデータが追加されていますね。
これで1つ目の方法の紹介は終了です。


2つ目は変数と条件分岐を利用して、1行目の空白行に「行の更新」アクション・2行目以降に「表に行を追加」アクションでデータを追加していく方法です。
こちらの方法は若干難易度が上がるので、頑張って分かりやすいように説明していきます。

難易度は上がるといってもやりたいことはシンプルです。
まず条件分岐でループ処理されるデータが空白行(1行目)に追加したいデータ、つまり品名がWindowsPCかであるかを判定します。次に、品名がWindowsPCのデータの場合は、空白行(1行目)にデータを更新します。それ以外のデータは2行目以降に追加していきます。

Power Automateの実装イメージはこのようになります。



やりたいことは条件分岐で右辺にループ処理される各データ、左辺に品名がWindowsPCのデータをセットすることです。つまり、取得すべき情報はループ処理される各データと品名がWindowsPCのデータの2つです。
少々分かりずらいかもしれませんが、条件分岐の中身はこのようなイメージになります。




いったん、ここで「コントロール」コネクタの「条件Apply to each」アクションで、どのような形式で各データが行に追加されているのかループ対象「value」の中身の情報を確認してみましょう。

まず「データ操作:作成」アクションを選択して、動的なコンテンツからループ対象となっている「value」ついでに「body/value-項目」を入力欄にセットします。フロー実行させて中身を確認しましょう。

valueの値は [ ]の記号で括られているのでArray型、body/value-項目 の値は { }の記号で括られているのでオブジェクト型としてそれぞれ情報が格納されていると分かります。



変数をそれぞれ設定して「value」「body/value-項目」の中身の詳細な情報を確認します。


「value」「body/value-項目」の中身を確認すると以下のようになっています。
「value」・・・ WindowsPCのデータ, Microsoft365ライセンスのデータ, 技術サポート支援のデータ, クラウド費用のデータ, アプリ開発費用のデータ, セキュリティソフトのデータ, 機器貸与のデータのようにArray(配列)型で各データが格納されています。
「body/value-項目」・・・WindowsPCのデータ}{Microsoft365ライセンスのデータ}{技術サポート支援のデータ}{クラウド費用のデータ}{アプリ開発費用のデータ}{セキュリティソフトのデータ}{機器貸与のデータのようにオブジェクト型で各データが格納されています。この各データがループ処理でExcel請求書テーブルの各行にはめ込まれます。つまり、今回取得すべき情報である「ループ処理される各データ」が「body/value-項目」に該当します。

もう1つの取得すべき情報である「品名がWindowsPCのデータ」は Array(配列)型の「value」からコレクション関数のfirst関数を使えば取得できそうですね。


後は以下の通りにPower Automateのフローを作成すれば完成です。

まずオブジェクト型の変数を初期化します。
次に「変数の設定」アクションでfirst関数を使って「value」から「品名がWindowsPCのデータ」を取得します。
first関数の引数には動的なコンテンツから「value」を選択してください。



そして、条件分岐の右辺には動的なコンテンツから「body/value-項目」、左辺には動的なコンテンツから設定した変数をそれぞれ選択してください。
また1つ目の方法と同様に、請求書テーブルの品名列のセル内に適当なワードを入力してくだい。今回は品名のセルと入力します。



試しにフロー実行をしてファイルを確認してみましょう。

空白行はきちんと更新されて2行目以降もデータが追加されていますね。
これで2つ目の方法の紹介は終了です。

今回のブログでは空白行の問題を解決する方法を2パターン紹介しましたが、前述した通り根本的な解決策にはなっていません。もし、空白行の原因が分かる方がいらっしゃれば、是非教えていただけると嬉しいです!!!今でも頭の中がモヤモヤしています。