Power AutomateでExcelを読み取って処理をする際、Excel側で列を非表示にしていたことが原因で処理が失敗していたのですが、気づくのに少し時間がかかりました。
再表示して処理は成功したのですが、Excel側の非表示設定がどこまでPower Automateへ影響するのか気になったので、実験をしてまとめてみました。
準備
Excelデータの用意
まず、Excelのデータを用意します。テーブル設定してあれば何でもいいです。今回は、以前記事を書くときに使ったデータをそのまま流用します。
Power Automateの用意
手動でトリガーして「表内に存在する行を一覧表示」でExcelのデータを取得するだけの簡単なフローを作成します。
今回はフィルタークエリとして書籍名 ne '赤いくつ'
と設定しておきます。今回遭遇した処理の失敗はフィルタークエリを設定していた環境で発生したためです。*1
念のため、この状態でフローが成功する事を確認しておきます。
実験
列を非表示にした場合
まずは、Excelで列を非表示にしてみます。今回はB列を非表示にしました。
フローの中でフィルタとして使っているのは「書籍名」の列で、これはフィルタに影響が無さそうなのですが、実行結果はエラーとなります。
エラーメッセージは下記の通りです。
{ "status": 400, "message": "Unable to match columns in the filtered view. Filtered columns count: 2, actual columns count: 3. To use ordering or filtering, please try to make all the columns visible.
列の数が合わないので、フィルタや並び替えの時は非表示にしては駄目なようですね。
行を非表示にした場合
では、行を非表示にした場合はどうでしょうか?ここでは、行を右クリックして「行を表示しない」を選ぶことで4行目を非表示にします。
この状態では、フローの実行は成功しました。
フローの実行結果を見ると、非表示にした行もデータに含まれている事が分かりました。
行をフィルタした場合:クエリフィルタと同じ列
Excelで行をフィルタして表示する場合と、行を右クリックして「行を表示しない」で挙動が変わるのか、についても確認しました。
先ほどと同じ「人魚の姫」の行を、今度はフィルタを使って非表示にします。今回はクエリフィルタと同じ「書籍名」の列でフィルタしています。
この場合は、先ほどの行を右クリックして「行を表示しない」を行った時と同様、非表示になっている行もデータを取得していました。
行をフィルタした場合:クエリフィルタと別の列
今度は、同じ行のフィルタでも、クエリフィルタとは別の列である「貸出日」でフィルタしてみます。非表示にするのは先ほどと同じ「人魚の姫」の行です。
すると、今度はフィルタされた行はフローの出力に含まれていませんでした。
同じフィルタでも、列によって挙動が異なるようです。
まとめ
Excelをデータソースとしたフローを作成する場合、Excelでの行や列の非表示、フィルタには気を付けたほうが良さそうです。
今回の実験結果からの推測なので、見落としがあるかもしれませんが、Power Automateのフローで「表内に存在する行を一覧表示」を使い、かつそのアクション内でクエリーフィルタを設定している際の挙動をまとめます。
- Excelで列を非表示にしている場合はフローが失敗する
- Excelで「行を表示しない」で行を非表示にしていても、フローでデータは読み込む
- Excelでフィルタを使っている場合は、列によって挙動が異なる
- クエリーフィルタと同じ列でフィルタしている場合は、非表示の列もフローでデータを読み込む
- クエリーフィルタと別の列でフィルタしている場合は、非表示の列はフローでも読み込まない
Excelをデータソースとしたフローを作成する際にはご注ください。編集するためのExcelとは別に、クエリで読み込んだフロー連携用のExcelを別途用意する方が安全かもしれません。
*1:記事を書くにあたって検証した限りでは、フィルタークエリを設定していない場合はエラーが発生しませんでした
舟越 匠(日本ビジネスシステムズ株式会社)
人材開発部に所属。社内向けの技術研修をしつつ、JBS Tech Blog編集長を兼任。2024年8月からキーマンズネットでPower Automateの連載を開始。好きなサービスはPower AutomateやLogic Apps。好きなアーティストはZABADAKとSound Horizon。
担当記事一覧