【MS Flow】Excelからは最大256行しか取得できない！？

皆さん、Microsoft Flow（以降、MS Flow）利用されてますか？便利ですよね。さて、今回は MS Flow で、Excelのテーブルからデータを取得した際に罠にはめられた話題です。
(*-ω-)｡ｏ○（記事タイトルでネタバレしてるんですけどねｗ）

# おことわり
この記事は、2019年8月23日時点のOffice 365環境で確認しています。今後のVerUP等で動作が変更・改善される可能性がありますのでご認識のうえご確認ください。

# 経緯
MS FlowのExcel Online（Business）を利用して、Excelファイル上のデータをSharePoint Online（SPO）のカスタムリストへ登録しようと思ったんですよ。およそ、1,000行ぐらいｗ

データは下イメージのように、「値」と「カウント」がある単純なテーブルです。データを登録する先のSPO リストも同様の列情報です。
![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215892/50dcf694-787e-c7b4-9117-3a63783fe692.png)

PowerApps で作ったアプリの検証で利用する予定でした。それが、あんなことになるなんて・・・。

# 発生した課題
Excelからデータを取得する際、全て（今回の場合、約1,000行）を取得すると思うじゃないですか？

**256行のデータしか取得してない** んですよ・・・。

ホントに(。´･ω･)?
そう思いますよね？疑いますよね？
検証してみました。

# 検証用Flow全体像
Excelからデータを移行できればよいので、トリガーは手動。データ格納場所がOneDrive for Business なので、アクションは「Excel Online（Business）」の［表内に存在する行を一覧表示］です。このアクションで、OneDrive上に格納した該当Excelと、データ取得したいテーブルを指定します。
![02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215892/3128a027-2d10-d391-5070-a318c7d52618.png)

最後に「Notifications」で終了通知をしています。本来やりたかったコトは、Excelからデータを一覧で全て取得 → EorEach で 全データをSPOへ登録、というFlowになるので前述の「Notification」の部分がSPOのリストへ登録する処理になります。

# 実際に動かしてみた
Flowをテスト実行して、結果を確認してみました。「表内に存在する行を一覧表示」のステップで取得している内容が”本文”の箇所で確認できます。ガッっと末尾まってもっていくと・・・
![04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215892/3c743306-4b91-5b75-2994-4f1c66b3a1e1.png)

ほら！最後が **”256”** になってますよね！！
（Excel の Count ＝ 画面の赤枠箇所にあるデータ）
何回試してみても、256行以上のデータは取得できませんでした。。。

# Flow のアクション 詳細設定なんじゃないの？
そう、思って確認してみました。必須設定以外は初期のままです。
![03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215892/728a0a48-c468-4db1-6d93-052e788f9460.png)

なんなら、［上から順に取得］の要素にある説明は”規定値 ＝ すべて”ですよ！

規定値とは・・・。
”すべて”とは・・・。

256行しか取れないじゃないかッ！ヽ(`Д´)ﾉﾌﾟﾝﾌﾟﾝ

# アクションやAPIの仕様なんじゃないの？
そう思って、調べてみました。

■アクション
[Excel Online（Business）](https://docs.microsoft.com/ja-jp/connectors/excelonlinebusiness/#/providers/microsoft.powerapps/apis/shared_excelonlinebusiness/apioperations/getitems)

■Graph API
[Microsoft Graph REST API v1.0／List rows](https://docs.microsoft.com/en-us/graph/api/table-list-rows?view=graph-rest-1.0&tabs=http)

記事作成時点では、どこにも”256”という数値は確認できておりません・・・。

つまり、この記事を書いてる時点では（当方が調べた限りでは）「Excelのテーブルから MS Flow が値を取得可能なのは最大256行」という制約があり、それは公式サイトには明記されていない、という状況であると言えます。

# 制約に対する１つの対策（あるいは、当方が実施した回避方法）
さて、これ以上の時間を「制約なのか否か？」の調査に時間を割くのは無駄だと判断した当方。対策を実施して、制約を回避するコトにしました。その対策とは？
![05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215892/a09bf89f-378b-670b-5373-cec2167d0af0.png)


上画像の[スキップ数]を＋256して、4回 Flow を実行したのです。256行 * 4回、これで1,000行はデータ投入されますよね？

当方の目的は、あくまでSPO リストへデータが登録されること、でした。そして、作成したFlowは使い捨てで問題ありません。手動で4回実行するぐらい大したロスではありませんよね。

これがシステムのアーキテクチャーに組み込まれている場合はハナシが別だと思います。その際は、このExcelに関するアクションの外側にLoop（繰り返し）処理を置いて、変数などで[スキップ数]を操作するか、[フィルタ クエリ]を操作するかになるかな、と思います。少し大がかりになってしまいますが、256行しかExcelからデータを取得ができないんですもん・・・しょうがないですね(￣▽￣;)

# まとめ
- 「Excel Online（Business）」の［表内に存在する行を一覧表示］で取得可能な行数は**最大256行**
- 調べても、公式情報で制約があることは確認できない
- 回避するには、スキップ数 や フィルタ クエリ を利用する

こういうトラブル（？）があると、原因解明や調査などが楽しくなって、ついつい本題を忘れちゃいますよね？当方の場合は”SPOへデータ登録ができること”が目的で、MS FlowのExcelアクションにおける制約を調査することが目的ではないのですよ。（楽しくなって、調査しちゃって、この記事に至るワケなんですがｗ）
途中で我に返って、手動で対応した次第なんですが、皆さんも目的（あるいは”やるべきコト”や”本題”）を忘れないようご注意ください。あ、あと、256行がMaxぽいんで、そちらもご注意されたしです。

それでは、皆さま。素晴らしい Power Platform Life を！