結論
・256行制限 → Office Scriptsで回避
・データ整形 → JSONの解析(Parse JSON)
・型エラー → スキーマ修正で回避
Power AutomateクラウドフローのExcel処理では、
・標準アクションで対応できる部分はそのまま使う
・対応できない部分をOffice Scriptで補う
という組み合わせで設計するのが現実的です。
アクションの流れ
[トリガー]
↓
[スクリプトの実行(Run script)]
↓
(JSON配列を取得)
↓
[JSONの解析(Parse JSON)]
↓
[Apply to each]
↓
[各列の値を利用(条件分岐・登録など)]
背景と今回の選択
256行制限に当たった
Power Automateの
「テーブル内に存在する行を一覧表示(List rows present in a table)」
これは、標準設定では最大256行までしか返りません。
約10,000行のテーブルを扱う場合、
このままではデータを取り切れません。
ページネーションという選択肢
回避策として、ページネーションがあります。
設定を有効にすれば、しきい値は最大100,000まで設定できます。
設定手順:
- アクション右上の「…」
- 「設定」
- 「ページネーション」をON
- しきい値を設定
Microsoft Learn
https://learn.microsoft.com/en-us/connectors/excelonlinebusiness/
※実際の取得件数は、ページネーション設定・フローの種類・コネクタの制限などの影響を受けます。
公式ドキュメントではページネーションで全件取得できる前提ですが、実運用ではフローの種類や実行条件によって制約を受けることがあります。
また、スケジュールフローでは 5,000 を超える設定で保存できないケースがある、という報告もあります。
https://elliskarim.com/2025/04/19/power-automate-how-to-read-more-than-256-rows-from-an-excel-table/
今回ページネーションを採用しなかった理由
理由はシンプルで、
・.xlsm(マクロファイル)を扱いたかった
・できるだけ高速にテーブルデータを取得したかった
この2点です。
そのため今回は、
データ取得をOffice Scriptで行う構成にしました。
Office Script
久しぶりにJavaScriptに触れたく、
自分で書きました。
無事に値が返ると嬉しいですよね。
・シート名
・テーブル名
を引数として受け取る形で実装しています。
本番環境でも、
この構成に近い形で使用しています。
function main(workbook: ExcelScript.Workbook, sheetName: string, tableName: string) {
const table = workbook.getWorksheet(sheetName).getTable(tableName);
const range = table.getRangeBetweenHeaderAndTotal();
if (!range) return [];
const values = range.getValues();
const headers = table.getHeaderRowRange().getValues()[0];
return values.map(row => {
let obj = {};
headers.forEach((h, i) => obj[h] = row[i]);
return obj;
});
}
出力形式
[
{
"社員番号": 1001,
"氏名": "山田太郎",
"金額": 5000
}
]
1行=1オブジェクトの配列になります。
JSONの解析
このままだと、列単位でデータを扱えません。
なぜか
Power Automate側が、
JSONの構造を認識できていないためです。
その結果、
・列名で値を取れない
・動的コンテンツに出てこない
状態になります。
JSONの解析を挟む
ここで「JSONの解析(Parse JSON)」を使います。
やることはシンプルです。
- JSONの解析を追加
- コンテンツに出力を指定
- 「サンプルから生成」でJSONを貼り付け
これだけで、
・列ごとに値を取得できる
・動的コンテンツに表示される
ようになります。
「JSONの解析」の詳細はbaku2san(taka)様の以下記事をご確認ください。
ハマりポイント
スキーマは、サンプルデータを元に生成されます。
そのため、
5000(数値)
null / ""(空値)
のように型が混在すると、
Invalid type. Expected Integer but got String.
といったエラーが発生します。
解決方法
JSONの解析のスキーマを修正し、
複数の型を許容します。
"金額": {
"type": ["number", "string", "null"]
}
これで解消できます。
まとめ
Power AutomateのExcel処理は、
標準アクションだけでは限界があるケースがあります。
特にデータ量が多い場合は、
・Excel側でデータ取得(Office Scripts)
・Power Automate側で処理(JSON解析)
の組み合わせ使うことで、
安定したフローを構築できます。