SharePointリストに列を追加する際、手動で1つずつ設定するのに手間がかかるかと思います。
特に列数が多いリストでは、同じ作業を何度も繰り返すことになります。
今回の記事では、Excelテンプレートに列の定義を記入するだけで、SharePointリストの列をまとめて作成できるPower Automateフローを紹介します。
完成イメージ
Excelファイルに列の定義(リスト名・列名・型・必須かどうかなど)を記入し、SharePointにアップロード


上記ExcelファイルのURLとSharePointサイトURLを指定してフローを実行する

指定したSharePointサイトに列が作成される
(Excelに入力されたリスト名が存在しない場合、リストも自動作成されます)


対応している列のデータ型は「1行テキスト」「複数行テキスト」「数値」「通貨」「はい/いいえ」「日付と時刻」「ハイパーリンクまたは画像」「ユーザーまたはグループ」「画像(縮小表示)」「選択肢」「参照」の11種類です。
フローの作成方法
フローの作成・トリガー設定
Power Automateポータルの「作成」メニューから「インスタント クラウド フロー」を選択します。フロー名を設定し、トリガーは「フローを手動でトリガーする」を選択してください。


フロー編集画面に入ったら、トリガーを選択して入力を追加していきます。
以下のように2つのテキスト入力を追加してください。フローの実行エラーを避けるため、必ずこの順序で作成してください。
| # | 入力種類 | 入力名 | 説明書き |
|---|---|---|---|
| 1 | テキスト | SiteUrl | 作成先となるSharePointサイトのURLを入力してください |
| 2 | テキスト | ExcelUrl | 列定義が記載されたExcelファイルの共有URLを入力してください |


「変数の初期化」アクションの追加
4つの「変数の初期化」アクションを追加していきます。
初期化するだけなので、値には何も入れずに作成してください。
| # | 変数名 | タイプ | 値 |
|---|---|---|---|
| 1 | ExistingListArray | 配列 | (なし) |
| 2 | ListGUID | 文字列 | (なし) |
| 3 | ErrorMessageArray | 配列 | (なし) |
| 4 | SchemaXml | 文字列 | (なし) |





スコープの追加とJSONの貼り付け
続いて、以下のコードをコピーします。
右下に表示されている青いコピーボタンをご利用ください。
{ "nodeId": "スコープ(列作成処理)", "serializedValue": { "type": "Scope", "actions": { "作成(SiteUrl)": { "type": "Compose", "inputs": "@concat(uriScheme(triggerBody()?['text']),'://',uriHost(triggerBody()?['text']),'/',split(uriPath(triggerBody()?['text']),'/')?[1],'/',split(uriPath(triggerBody()?['text']),'/')?[2])", "metadata": { "operationMetadataId": "a8793beb-5d51-46bc-bf17-081c36b89779" } }, "For_each(Excel各行処理)": { "type": "Foreach", "foreach": "@outputs('表内に存在する行を一覧表示')?['body/value']", "actions": { "条件(エラー確認)": { "type": "If", "expression": { "and": [ { "equals": [ "@empty(variables('ErrorMessageArray'))", "@true" ] } ] }, "actions": { "作成(RequestBody)": { "type": "Compose", "inputs": { "parameters": { "__metadata": { "type": "SP.XmlSchemaFieldCreationInformation" }, "SchemaXml": "@{variables('SchemaXml')}", "Options": 24 } } }, "SharePoint_に_HTTP_要求を送信します(列作成)": { "type": "OpenApiConnection", "inputs": { "parameters": { "dataset": "@outputs('作成(SiteUrl)')", "parameters/method": "POST", "parameters/uri": "_api/web/lists(guid'@{variables('ListGUID')}')/fields/createfieldasxml", "parameters/headers": { "Content-Type": "application/json;odata=verbose", "Accept": "application/json;odata=verbose" }, "parameters/body": "@outputs('作成(RequestBody)')" }, "host": { "apiId": "/providers/Microsoft.PowerApps/apis/shared_sharepointonline", "connection": "shared_sharepointonline", "operationId": "HttpRequest" }, "retryPolicy": { "type": "fixed", "count": 1, "interval": "PT30S" } }, "runAfter": { "作成(RequestBody)": [ "Succeeded" ] }, "limit": { "timeout": "PT2M" }, "metadata": { "operationMetadataId": "7257698a-0247-46dd-be3b-5ad3ac1001e0" } }, "行の更新(作成成功)": { "type": "OpenApiConnection", "inputs": { "parameters": { "source": "@outputs('作成(Source)')", "drive": "@outputs('作成(Drive)')", "file": "@outputs('作成(File)')", "table": "@outputs('作成(Table)')", "idColumn": "列ID", "id": "@items('For_each(Excel各行処理)')?['列ID']", "item": { "作成結果": "成功" } }, "host": { "apiId": "/providers/Microsoft.PowerApps/apis/shared_excelonlinebusiness", "connection": "shared_excelonlinebusiness", "operationId": "PatchItem" }, "retryPolicy": { "type": "fixed", "count": 1, "interval": "PT30S" } }, "runAfter": { "SharePoint_に_HTTP_要求を送信します(列作成)": [ "Succeeded" ] }, "limit": { "timeout": "PT2M" } }, "行の更新(作成失敗)": { "type": "OpenApiConnection", "inputs": { "parameters": { "source": "@outputs('作成(Source)')", "drive": "@outputs('作成(Drive)')", "file": "@outputs('作成(File)')", "table": "@outputs('作成(Table)')", "idColumn": "列ID", "id": "@items('For_each(Excel各行処理)')?['列ID']", "item": { "作成結果": "失敗", "エラーメッセージ": "予期しないエラーが発生しました。入力内容が正しいか確認し、必要に応じてフロー実行履歴を確認してください" } }, "host": { "apiId": "/providers/Microsoft.PowerApps/apis/shared_excelonlinebusiness", "connection": "shared_excelonlinebusiness", "operationId": "PatchItem" }, "retryPolicy": { "type": "fixed", "count": 1, "interval": "PT30S" } }, "runAfter": { "SharePoint_に_HTTP_要求を送信します(列作成)": [ "TimedOut", "Failed" ] }, "limit": { "timeout": "PT2M" } } }, "else": { "actions": { "行の更新(参照列取得失敗)": { "type": "OpenApiConnection", "inputs": { "parameters": { "source": "@outputs('作成(Source)')", "drive": "@outputs('作成(Drive)')", "file": "@outputs('作成(File)')", "table": "@outputs('作成(Table)')", "idColumn": "列ID", "id": "@items('For_each(Excel各行処理)')?['列ID']", "item": { "作成結果": "失敗", "エラーメッセージ": "@{join(variables('ErrorMessageArray'),outputs('作成(改行)'))}" } }, "host": { "apiId": "/providers/Microsoft.PowerApps/apis/shared_excelonlinebusiness", "connection": "shared_excelonlinebusiness", "operationId": "PatchItem" }, "retryPolicy": { "type": "fixed", "count": 1, "interval": "PT30S" } }, "runAfter": { "作成(改行)": [ "Succeeded" ] }, "limit": { "timeout": "PT2M" } }, "作成(改行)": { "type": "Compose", "inputs": "\n" } } }, "runAfter": { "スイッチ(データ型確認)": [ "Succeeded", "TimedOut", "Skipped", "Failed" ] } }, "スイッチ(データ型確認)": { "type": "Switch", "expression": "@items('For_each(Excel各行処理)')?['データ型']", "default": { "actions": { "配列変数に追加(データ型不正エラー)": { "type": "AppendToArrayVariable", "inputs": { "name": "ErrorMessageArray", "value": "・「データ型」が不正です。入力を確認・修正して再実行してください。" } } } }, "cases": { "Case(一行テキスト)": { "actions": { "変数の設定(一行テキストSchemaXML)": { "type": "SetVariable", "inputs": { "name": "SchemaXml", "value": "@concat('<Field Type=\"Text\" DisplayName=\"',outputs('作成(表示列名エスケープ)'),'\" Name=\"',outputs('作成(内部列名エスケープ)'),'\" Required=\"',if(equals(items('For_each(Excel各行処理)')?['必須'],'はい'),'TRUE','FALSE'),'\" Description=\"',outputs('作成(詳細説明エスケープ)'),'\" xmlns=\"http://schemas.microsoft.com/sharepoint/v3\" />')" }, "metadata": { "operationMetadataId": "43f47219-ba84-4ce2-a36e-a0dabab52d3f" } } }, "case": "一行テキスト" }, "Case(複数行テキスト)": { "actions": { "変数の設定(複数行テキストSchemaXML)": { "type": "SetVariable", "inputs": { "name": "SchemaXml", "value": "@concat('<Field Type=\"Note\" DisplayName=\"',outputs('作成(表示列名エスケープ)'),'\" Name=\"',outputs('作成(内部列名エスケープ)'),'\" Required=\"',if(equals(items('For_each(Excel各行処理)')?['必須'],'はい'),'TRUE','FALSE'),'\" Description=\"',outputs('作成(詳細説明エスケープ)'),'\" xmlns=\"http://schemas.microsoft.com/sharepoint/v3\" />')" }, "metadata": { "operationMetadataId": "81a87c01-388d-4200-ae73-081c152baf0a" } } }, "case": "複数行テキスト" }, "Case(数値)": { "actions": { "変数の設定(数値SchemaXML)": { "type": "SetVariable", "inputs": { "name": "SchemaXml", "value": "@concat('<Field Type=\"Number\" DisplayName=\"',outputs('作成(表示列名エスケープ)'),'\" Name=\"',outputs('作成(内部列名エスケープ)'),'\" Required=\"',if(equals(items('For_each(Excel各行処理)')?['必須'],'はい'),'TRUE','FALSE'),'\" Description=\"',outputs('作成(詳細説明エスケープ)'),'\" xmlns=\"http://schemas.microsoft.com/sharepoint/v3\" />')" }, "metadata": { "operationMetadataId": "8b79240a-fc00-4b94-b0a5-52643a00e724" } } }, "case": "数値" }, "Case(通貨)": { "actions": { "変数の設定(通貨SchemaXML)": { "type": "SetVariable", "inputs": { "name": "SchemaXml", "value": "@concat('<Field Type=\"Currency\" DisplayName=\"',outputs('作成(表示列名エスケープ)'),'\" Name=\"',outputs('作成(内部列名エスケープ)'),'\" Required=\"',if(equals(items('For_each(Excel各行処理)')?['必須'],'はい'),'TRUE','FALSE'),'\" Description=\"',outputs('作成(詳細説明エスケープ)'),'\" xmlns=\"http://schemas.microsoft.com/sharepoint/v3\" />')" }, "metadata": { "operationMetadataId": "5cb8b724-79d9-4b87-a9c9-7527d908f91a" } } }, "case": "通貨" }, "Case(はいいいえ)": { "actions": { "変数の設定(はいいいえSchemaXML)": { "type": "SetVariable", "inputs": { "name": "SchemaXml", "value": "@concat('<Field Type=\"Boolean\" DisplayName=\"',outputs('作成(表示列名エスケープ)'),'\" Name=\"',outputs('作成(内部列名エスケープ)'),'\" Required=\"',if(equals(items('For_each(Excel各行処理)')?['必須'],'はい'),'TRUE','FALSE'),'\" Description=\"',outputs('作成(詳細説明エスケープ)'),'\" xmlns=\"http://schemas.microsoft.com/sharepoint/v3\" />')" }, "metadata": { "operationMetadataId": "e4fce143-d7f1-4ad0-acc0-c93c6137d061" } } }, "case": "はい/いいえ" }, "Case(日付のみ)": { "actions": { "変数の設定(日付のみSchemaXML)": { "type": "SetVariable", "inputs": { "name": "SchemaXml", "value": "@concat('<Field Type=\"DateTime\" DisplayName=\"',outputs('作成(表示列名エスケープ)'),'\" Name=\"',outputs('作成(内部列名エスケープ)'),'\" Required=\"',if(equals(items('For_each(Excel各行処理)')?['必須'],'はい'),'TRUE','FALSE'),'\" Format=\"DateOnly\" Description=\"',outputs('作成(詳細説明エスケープ)'),'\" xmlns=\"http://schemas.microsoft.com/sharepoint/v3\" />')" }, "metadata": { "operationMetadataId": "1783541e-b663-409c-95e3-9cac9afb2003" } } }, "case": "日付のみ" }, "Case(日付と時刻)": { "actions": { "変数の設定(日付と時刻SchemaXML)": { "type": "SetVariable", "inputs": { "name": "SchemaXml", "value": "@concat('<Field Type=\"DateTime\" DisplayName=\"',outputs('作成(表示列名エスケープ)'),'\" Name=\"',outputs('作成(内部列名エスケープ)'),'\" Required=\"',if(equals(items('For_each(Excel各行処理)')?['必須'],'はい'),'TRUE','FALSE'),'\" Format=\"DateTime\" Description=\"',outputs('作成(詳細説明エスケープ)'),'\" xmlns=\"http://schemas.microsoft.com/sharepoint/v3\" />')" }, "metadata": { "operationMetadataId": "23a40cae-6e8b-4a2e-9545-ce5bfb705b09" } } }, "case": "日付と時刻" }, "Case(ハイパーリンク)": { "actions": { "変数の設定(ハイパーリンクSchemaXML)": { "type": "SetVariable", "inputs": { "name": "SchemaXml", "value": "@concat('<Field Type=\"URL\" DisplayName=\"',outputs('作成(表示列名エスケープ)'),'\" Name=\"',outputs('作成(内部列名エスケープ)'),'\" Required=\"',if(equals(items('For_each(Excel各行処理)')?['必須'],'はい'),'TRUE','FALSE'),'\" Description=\"',outputs('作成(詳細説明エスケープ)'),'\" xmlns=\"http://schemas.microsoft.com/sharepoint/v3\" />')" }, "metadata": { "operationMetadataId": "7a1b68da-d50a-4bbe-9c09-0209a3bf5b5f" } } }, "case": "ハイパーリンク" }, "Case(ユーザーまたはグループ)": { "actions": { "条件(複数ユーザーまたはグループ)": { "type": "If", "expression": { "and": [ { "equals": [ "@items('For_each(Excel各行処理)')?['複数選択']", "@string('はい')" ] } ] }, "actions": { "変数の設定(複数ユーザーまたはグループSchemaXML)": { "type": "SetVariable", "inputs": { "name": "SchemaXml", "value": "@concat('<Field Type=\"UserMulti\" DisplayName=\"',outputs('作成(表示列名エスケープ)'),'\" Name=\"',outputs('作成(内部列名エスケープ)'),'\" Required=\"',if(equals(items('For_each(Excel各行処理)')?['必須'],'はい'),'TRUE','FALSE'),'\" UserSelectionMode=\"0\" Mult=\"TRUE\" Description=\"',outputs('作成(詳細説明エスケープ)'),'\" xmlns=\"http://schemas.microsoft.com/sharepoint/v3\" />')" }, "metadata": { "operationMetadataId": "04f703a5-f1df-4bd0-83ad-10975b8ad36a" } } }, "else": { "actions": { "変数の設定(単一ユーザーまたはグループSchemaXML)": { "type": "SetVariable", "inputs": { "name": "SchemaXml", "value": "@concat('<Field Type=\"User\" DisplayName=\"',outputs('作成(表示列名エスケープ)'),'\" Name=\"',outputs('作成(内部列名エスケープ)'),'\" Required=\"',if(equals(items('For_each(Excel各行処理)')?['必須'],'はい'),'TRUE','FALSE'),'\" UserSelectionMode=\"0\" Description=\"',outputs('作成(詳細説明エスケープ)'),'\" xmlns=\"http://schemas.microsoft.com/sharepoint/v3\" />')" }, "metadata": { "operationMetadataId": "04f703a5-f1df-4bd0-83ad-10975b8ad36a" } } } } } }, "case": "ユーザーまたはグループ" }, "Case(画像)": { "actions": { "変数の設定(画像SchemaXML)": { "type": "SetVariable", "inputs": { "name": "SchemaXml", "value": "@concat('<Field Type=\"Thumbnail\" DisplayName=\"',outputs('作成(表示列名エスケープ)'),'\" Name=\"',outputs('作成(内部列名エスケープ)'),'\" Required=\"',if(equals(items('For_each(Excel各行処理)')?['必須'],'はい'),'TRUE','FALSE'),'\" Description=\"',outputs('作成(詳細説明エスケープ)'),'\" xmlns=\"http://schemas.microsoft.com/sharepoint/v3\" />')" }, "metadata": { "operationMetadataId": "4efc291b-e36d-4afa-8613-cc1774b8128a" } } }, "case": "画像 (縮小表示)" }, "Case(選択肢)": { "actions": { "作成(選択肢エスケープ)": { "type": "Compose", "inputs": "@replace(replace(replace(items('For_each(Excel各行処理)')?['選択肢'],'&','&'),'<','<'),'>','>')" }, "条件(複数選択可能選択肢)": { "type": "If", "expression": { "and": [ { "equals": [ "@items('For_each(Excel各行処理)')?['複数選択']", "@string('はい')" ] } ] }, "actions": { "変数の設定(選択肢複数SchemaXML)": { "type": "SetVariable", "inputs": { "name": "SchemaXml", "value": "@concat('<Field Type=\"MultiChoice\" DisplayName=\"',outputs('作成(表示列名エスケープ)'),'\" Name=\"',outputs('作成(内部列名エスケープ)'),'\" Required=\"',if(equals(items('For_each(Excel各行処理)')?['必須'],'はい'),'TRUE','FALSE'),'\" Description=\"',outputs('作成(詳細説明エスケープ)'),'\"><CHOICES><CHOICE>',join(split(replace(trim(outputs('作成(選択肢エスケープ)')),decodeUriComponent('%0D%0A'),decodeUriComponent('%0A')),decodeUriComponent('%0A')),'</CHOICE><CHOICE>'),'</CHOICE></CHOICES></Field>')" } } }, "else": { "actions": { "変数の設定(選択肢単一SchemaXML)": { "type": "SetVariable", "inputs": { "name": "SchemaXml", "value": "@concat('<Field Type=\"Choice\" DisplayName=\"',outputs('作成(表示列名エスケープ)'),'\" Name=\"',outputs('作成(内部列名エスケープ)'),'\" Required=\"',if(equals(items('For_each(Excel各行処理)')?['必須'],'はい'),'TRUE','FALSE'),'\" Format=\"Dropdown\" Description=\"',outputs('作成(詳細説明エスケープ)'),'\"><CHOICES><CHOICE>',join(split(replace(trim(outputs('作成(選択肢エスケープ)')),decodeUriComponent('%0D%0A'),decodeUriComponent('%0A')),decodeUriComponent('%0A')),'</CHOICE><CHOICE>'),'</CHOICE></CHOICES></Field>')" } } } }, "runAfter": { "作成(選択肢エスケープ)": [ "Succeeded" ] } } }, "case": "選択肢" }, "Case(参照)": { "actions": { "スイッチ(参照リスト数確認)": { "type": "Switch", "expression": "@length(body('アレイのフィルター処理(参照リスト表示名フィルター)'))", "default": { "actions": { "配列変数に追加(参照リスト重複エラー)": { "type": "AppendToArrayVariable", "inputs": { "name": "ErrorMessageArray", "value": "・「参照リスト名(表示名)」に一致するリストが複数見つかりました。リスト名を変更するなど、重複を解消してから再実行してください。" } } } }, "cases": { "Case(0個)": { "actions": { "配列変数に追加(参照リストなしエラー)": { "type": "AppendToArrayVariable", "inputs": { "name": "ErrorMessageArray", "value": "・「参照リスト名(表示名)」に一致するリストが見つかりませんでした。リスト名(表示名)を確認・修正して再実行してください。" } } }, "case": 0 }, "Case(1個)": { "actions": { "SharePoint_に_HTTP_要求を送信します(参照列有無確認)": { "type": "OpenApiConnection", "inputs": { "parameters": { "dataset": "@outputs('作成(SiteUrl)')", "parameters/method": "GET", "parameters/uri": "_api/web/lists(guid'@{body('アレイのフィルター処理(参照リスト表示名フィルター)')?[0]?['Id']}')/fields?$select=InternalName,TypeAsString&$filter=InternalName eq '@{items('For_each(Excel各行処理)')?['参照列名(内部名)']}'", "parameters/headers": { "Accept": "application/json;odata=verbose" } }, "host": { "apiId": "/providers/Microsoft.PowerApps/apis/shared_sharepointonline", "connection": "shared_sharepointonline", "operationId": "HttpRequest" }, "retryPolicy": { "type": "fixed", "count": 1, "interval": "PT30S" } }, "limit": { "timeout": "PT2M" } }, "条件(参照列有無確認)": { "type": "If", "expression": { "and": [ { "equals": [ "@length(body('SharePoint_に_HTTP_要求を送信します(参照列有無確認)')?['d']?['results'])", "@int(1)" ] } ] }, "actions": { "条件(参照列データ型確認)": { "type": "If", "expression": { "and": [ { "equals": [ "@contains(createArray('Text','Number','DateTime','Lookup'),body('SharePoint_に_HTTP_要求を送信します(参照列有無確認)')?['d']?['results']?[0]?['TypeAsString'])", "@true" ] } ] }, "actions": { "条件(複数参照)": { "type": "If", "expression": { "and": [ { "equals": [ "@items('For_each(Excel各行処理)')?['複数選択']", "@string('はい')" ] } ] }, "actions": { "変数の設定(複数参照SchemaXML)": { "type": "SetVariable", "inputs": { "name": "SchemaXml", "value": "@concat('<Field Type=\"LookupMulti\" DisplayName=\"',outputs('作成(表示列名エスケープ)'),'\" Name=\"',outputs('作成(内部列名エスケープ)'),'\" Required=\"',if(equals(items('For_each(Excel各行処理)')?['必須'],'はい'),'TRUE','FALSE'),'\" List=\"{',body('アレイのフィルター処理(参照リスト表示名フィルター)')?[0]?['Id'],'}\" ShowField=\"',outputs('作成(参照列内部名エスケープ)'),'\" Mult=\"TRUE\" Description=\"',outputs('作成(詳細説明エスケープ)'),'\" xmlns=\"http://schemas.microsoft.com/sharepoint/v3\"/>')" } } }, "else": { "actions": { "変数の設定(単一参照SchemaXML)": { "type": "SetVariable", "inputs": { "name": "SchemaXml", "value": "@concat('<Field Type=\"Lookup\" DisplayName=\"',outputs('作成(表示列名エスケープ)'),'\" Name=\"',outputs('作成(内部列名エスケープ)'),'\" Required=\"',if(equals(items('For_each(Excel各行処理)')?['必須'],'はい'),'TRUE','FALSE'),'\" List=\"{',body('アレイのフィルター処理(参照リスト表示名フィルター)')?[0]?['Id'],'}\" ShowField=\"',outputs('作成(参照列内部名エスケープ)'),'\" Description=\"',outputs('作成(詳細説明エスケープ)'),'\" xmlns=\"http://schemas.microsoft.com/sharepoint/v3\"/>')" } } } }, "runAfter": { "作成(参照列内部名エスケープ)": [ "Succeeded" ] } }, "作成(参照列内部名エスケープ)": { "type": "Compose", "inputs": "@replace(replace(replace(replace(items('For_each(Excel各行処理)')?['参照列名(内部名)'],'&','&'),'<','<'),'>','>'),'\"','"')" } }, "else": { "actions": { "配列変数に追加(参照列データ型不正エラー)": { "type": "AppendToArrayVariable", "inputs": { "name": "ErrorMessageArray", "value": "・参照列の設定に失敗しました。参照列に設定できるのは「一行テキスト」「数値」「日付のみ」「日付と時刻」「参照列(単一選択)」のデータ型を持つ列のみです。" } } } } } }, "else": { "actions": { "配列変数に追加(参照列なしエラー)": { "type": "AppendToArrayVariable", "inputs": { "name": "ErrorMessageArray", "value": "・「参照列名(内部名)」に一致する列が見つかりませんでした。参照列名(内部名)を確認・修正して再実行してください。" } } } }, "runAfter": { "SharePoint_に_HTTP_要求を送信します(参照列有無確認)": [ "Succeeded" ] } }, "配列変数に追加(参照列有無確認失敗)": { "type": "AppendToArrayVariable", "inputs": { "name": "ErrorMessageArray", "value": "・「参照列名(内部名)」の重複チェック時に予期しないエラーが発生しました。フローの実行履歴を確認してください。" }, "runAfter": { "SharePoint_に_HTTP_要求を送信します(参照列有無確認)": [ "TimedOut", "Failed" ] } } }, "case": 1 } }, "runAfter": { "アレイのフィルター処理(参照リスト表示名フィルター)": [ "Succeeded" ] } }, "アレイのフィルター処理(参照リスト表示名フィルター)": { "type": "Query", "inputs": { "from": "@variables('ExistingListArray')", "where": "@equals(item()?['Title'],items('For_each(Excel各行処理)')?['参照リスト名(表示名)'])" } } }, "case": "参照" } }, "runAfter": { "スイッチ(リスト数確認)": [ "Succeeded", "TimedOut", "Skipped", "Failed" ] }, "metadata": { "operationMetadataId": "fd341c56-509a-441c-be45-f24dcba8d78d" } }, "作成(表示列名エスケープ)": { "type": "Compose", "inputs": "@replace(replace(replace(replace(items('For_each(Excel各行処理)')?['列名(表示名)'],'&','&'),'<','<'),'>','>'),'\"','"')", "runAfter": { "変数の設定(エラー配列リセット)": [ "Succeeded" ] } }, "作成(内部列名エスケープ)": { "type": "Compose", "inputs": "@replace(replace(replace(replace(items('For_each(Excel各行処理)')?['列名(内部名)'],'&','&'),'<','<'),'>','>'),'\"','"')", "runAfter": { "作成(表示列名エスケープ)": [ "Succeeded" ] } }, "スイッチ(リスト数確認)": { "type": "Switch", "expression": "@length(body('アレイのフィルター処理(リスト表示名フィルター)'))", "default": { "actions": { "配列変数に追加(リスト表示名重複エラー)": { "type": "AppendToArrayVariable", "inputs": { "name": "ErrorMessageArray", "value": "・「リスト名(表示名)」に一致するリストが複数見つかりました。リスト名を変更するなど、重複を解消してから再実行してください。" } } } }, "cases": { "Case(リストなし)": { "actions": { "SharePoint_に_HTTP_要求を送信します(新規リスト作成)": { "type": "OpenApiConnection", "inputs": { "parameters": { "dataset": "@outputs('作成(SiteUrl)')", "parameters/method": "POST", "parameters/uri": "_api/web/lists", "parameters/headers": { "Content-Type": "application/json;odata=verbose", "Accept": "application/json;odata=verbose" }, "parameters/body": "{\n \"__metadata\": { \"type\": \"SP.List\" },\n \"BaseTemplate\": 100,\n \"Title\": \"@{replace(replace(items('For_each(Excel各行処理)')?['リスト名(表示名)'],'\\','\\\\'),'\"','\\\"')}\"\n}" }, "host": { "apiId": "/providers/Microsoft.PowerApps/apis/shared_sharepointonline", "connection": "shared_sharepointonline", "operationId": "HttpRequest" }, "retryPolicy": { "type": "fixed", "count": 1, "interval": "PT30S" } }, "limit": { "timeout": "PT2M" } }, "変数の設定(新規リストGUID)": { "type": "SetVariable", "inputs": { "name": "ListGUID", "value": "@body('SharePoint_に_HTTP_要求を送信します(新規リスト作成)')?['d']?['Id']" }, "runAfter": { "SharePoint_に_HTTP_要求を送信します(新規リスト作成)": [ "Succeeded" ] } }, "配列変数に追加(作成リスト情報)": { "type": "AppendToArrayVariable", "inputs": { "name": "ExistingListArray", "value": { "Id": "@body('SharePoint_に_HTTP_要求を送信します(新規リスト作成)')?['d']?['Id']", "Title": "@body('SharePoint_に_HTTP_要求を送信します(新規リスト作成)')?['d']?['Title']" } }, "runAfter": { "変数の設定(新規リストGUID)": [ "Succeeded" ] } }, "配列変数に追加(新規リスト作成失敗)": { "type": "AppendToArrayVariable", "inputs": { "name": "ErrorMessageArray", "value": "・新規リスト作成時に予期しないエラーが発生しました。フローの実行履歴を確認してください。" }, "runAfter": { "SharePoint_に_HTTP_要求を送信します(新規リスト作成)": [ "TimedOut", "Failed" ] } } }, "case": 0 }, "Case(リスト1個)": { "actions": { "変数の設定(既存リストGUID)": { "type": "SetVariable", "inputs": { "name": "ListGUID", "value": "@body('アレイのフィルター処理(リスト表示名フィルター)')?[0]?['Id']" } }, "SharePoint_に_HTTP_要求を送信します(内部名有無確認)": { "type": "OpenApiConnection", "inputs": { "parameters": { "dataset": "@outputs('作成(SiteUrl)')", "parameters/method": "GET", "parameters/uri": "_api/web/lists(guid'@{variables('ListGUID')}')/fields?$filter=InternalName eq '@{items('For_each(Excel各行処理)')?['列名(内部名)']}'&$select=Title,InternalName", "parameters/headers": { "Accept": "application/json;odata=verbose" } }, "host": { "apiId": "/providers/Microsoft.PowerApps/apis/shared_sharepointonline", "connection": "shared_sharepointonline", "operationId": "HttpRequest" }, "retryPolicy": { "type": "fixed", "count": 1, "interval": "PT30S" } }, "runAfter": { "変数の設定(既存リストGUID)": [ "Succeeded" ] }, "limit": { "timeout": "PT2M" } }, "条件(内部名有無確認)": { "type": "If", "expression": { "and": [ { "greaterOrEquals": [ "@length(body('SharePoint_に_HTTP_要求を送信します(内部名有無確認)')?['d']?['results'])", "@int(1)" ] } ] }, "actions": { "配列変数に追加(内部列名重複エラー)": { "type": "AppendToArrayVariable", "inputs": { "name": "ErrorMessageArray", "value": "・「列名(内部名)」に一致する列が既に存在します。新たに列を作成したい場合は、列名(内部名)を変更してから再実行してください。" } } }, "else": { "actions": {} }, "runAfter": { "SharePoint_に_HTTP_要求を送信します(内部名有無確認)": [ "Succeeded" ] } }, "配列変数に追加(内部列有無確認失敗)": { "type": "AppendToArrayVariable", "inputs": { "name": "ErrorMessageArray", "value": "・「列名(内部名)」の重複チェック時に予期しないエラーが発生しました。フローの実行履歴を確認してください。" }, "runAfter": { "SharePoint_に_HTTP_要求を送信します(内部名有無確認)": [ "TimedOut", "Failed" ] } } }, "case": 1 } }, "runAfter": { "アレイのフィルター処理(リスト表示名フィルター)": [ "Succeeded" ] } }, "作成(詳細説明エスケープ)": { "type": "Compose", "inputs": "@replace(replace(replace(replace(replace(replace(items('For_each(Excel各行処理)')?['詳細説明'],'&','&'),'<','<'),'>','>'),'\"','"'),decodeUriComponent('%0D%0A'),' '),decodeUriComponent('%0A'),' ')", "runAfter": { "作成(内部列名エスケープ)": [ "Succeeded" ] } }, "アレイのフィルター処理(リスト表示名フィルター)": { "type": "Query", "inputs": { "from": "@variables('ExistingListArray')", "where": "@equals(item()?['Title'],items('For_each(Excel各行処理)')?['リスト名(表示名)'])" }, "runAfter": { "作成(詳細説明エスケープ)": [ "Succeeded" ] } }, "変数の設定(エラー配列リセット)": { "type": "SetVariable", "inputs": { "name": "ErrorMessageArray", "value": [] } } }, "runAfter": { "変数の設定(ExistingListArray)": [ "Succeeded" ] }, "metadata": { "operationMetadataId": "61b3f446-a672-46b1-9a48-c509df2e887a" } }, "テーブルの取得": { "type": "OpenApiConnection", "inputs": { "parameters": { "source": "@outputs('作成(Source)')", "drive": "@outputs('作成(Drive)')", "file": "@outputs('作成(File)')" }, "host": { "apiId": "/providers/Microsoft.PowerApps/apis/shared_excelonlinebusiness", "connection": "shared_excelonlinebusiness", "operationId": "GetTables" }, "retryPolicy": { "type": "fixed", "count": 2, "interval": "PT30S" } }, "runAfter": { "作成(File)": [ "Succeeded" ] }, "limit": { "timeout": "PT3M" } }, "SharePoint_に_HTTP_要求を送信します(Excelファイル取得)": { "type": "OpenApiConnection", "inputs": { "parameters": { "dataset": "@outputs('作成(SiteRootUrl)')", "parameters/method": "GET", "parameters/uri": "_api/v2.0/shares/@{outputs('作成(EncodedUrl)')}/driveItem?$select=id,parentReference,sharepointIds", "parameters/headers": { "Accept": "application/json;odata=verbose" } }, "host": { "apiId": "/providers/Microsoft.PowerApps/apis/shared_sharepointonline", "connection": "shared_sharepointonline", "operationId": "HttpRequest" }, "retryPolicy": { "type": "fixed", "count": 1, "interval": "PT30S" } }, "runAfter": { "作成(EncodedUrl)": [ "Succeeded" ] }, "limit": { "timeout": "PT2M" } }, "作成(EncodedUrl)": { "type": "Compose", "inputs": "@concat('u!',replace(replace(replace(base64(triggerBody()?['text_1']),'+','-'),'/','_'),'=',''))", "runAfter": { "作成(SiteRootUrl)": [ "Succeeded" ] } }, "作成(Source)": { "type": "Compose", "inputs": "@concat('sites/',body('SharePoint_に_HTTP_要求を送信します(Excelファイル取得)')?['sharepointIds']?['siteId'])", "runAfter": { "SharePoint_に_HTTP_要求を送信します(Excelファイル取得)": [ "Succeeded" ] } }, "作成(Drive)": { "type": "Compose", "inputs": "@body('SharePoint_に_HTTP_要求を送信します(Excelファイル取得)')?['parentReference']?['driveId']", "runAfter": { "作成(Source)": [ "Succeeded" ] } }, "作成(File)": { "type": "Compose", "inputs": "@body('SharePoint_に_HTTP_要求を送信します(Excelファイル取得)')?['id']", "runAfter": { "作成(Drive)": [ "Succeeded" ] } }, "アレイのフィルター処理": { "type": "Query", "inputs": { "from": "@outputs('テーブルの取得')?['body/value']", "where": "@equals(item()?['name'],string('SchemaTable'))" }, "runAfter": { "テーブルの取得": [ "Succeeded" ] } }, "表内に存在する行を一覧表示": { "type": "OpenApiConnection", "inputs": { "parameters": { "source": "@outputs('作成(Source)')", "drive": "@outputs('作成(Drive)')", "file": "@outputs('作成(File)')", "table": "@outputs('作成(Table)')", "$filter": "作成対象 eq 'はい'" }, "host": { "apiId": "/providers/Microsoft.PowerApps/apis/shared_excelonlinebusiness", "connection": "shared_excelonlinebusiness", "operationId": "GetItems" }, "retryPolicy": { "type": "fixed", "count": 2, "interval": "PT30S" } }, "runAfter": { "作成(Table)": [ "Succeeded" ] }, "limit": { "timeout": "PT5M" }, "runtimeConfiguration": { "paginationPolicy": { "minimumItemCount": 100000 } }, "metadata": { "tableId": "@outputs('作成(Table)')", "operationMetadataId": "f0d5eb2c-aa1b-43e4-8b97-94d5caff8b05" } }, "作成(SiteRootUrl)": { "type": "Compose", "inputs": "@concat(uriScheme(triggerBody()?['text']),'://',uriHost(triggerBody()?['text']))", "runAfter": { "作成(SiteUrl)": [ "Succeeded" ] } }, "作成(Table)": { "type": "Compose", "inputs": "@first(body('アレイのフィルター処理'))?['id']", "runAfter": { "アレイのフィルター処理": [ "Succeeded" ] } }, "SharePoint_に_HTTP_要求を送信します(リスト取得)": { "type": "OpenApiConnection", "inputs": { "parameters": { "dataset": "@outputs('作成(SiteUrl)')", "parameters/method": "GET", "parameters/uri": "_api/web/lists?$select=Id,Title&$filter=Hidden eq false&$top=5000", "parameters/headers": { "Accept": "application/json;odata=nometadata" } }, "host": { "apiId": "/providers/Microsoft.PowerApps/apis/shared_sharepointonline", "connection": "shared_sharepointonline", "operationId": "HttpRequest" }, "retryPolicy": { "type": "fixed", "count": 2, "interval": "PT30S" } }, "runAfter": { "表内に存在する行を一覧表示": [ "Succeeded" ] }, "limit": { "timeout": "PT3M" } }, "変数の設定(ExistingListArray)": { "type": "SetVariable", "inputs": { "name": "ExistingListArray", "value": "@body('SharePoint_に_HTTP_要求を送信します(リスト取得)')?['value']" }, "runAfter": { "SharePoint_に_HTTP_要求を送信します(リスト取得)": [ "Succeeded" ] } }, "終了(Excelファイル取得失敗)": { "type": "Terminate", "inputs": { "runStatus": "Failed", "runError": { "message": "Excelファイルの取得に失敗しました。Excelファイルの共有URLを修正してください。\n解消されない場合は、直前のアクションのエラー内容を確認してください。" } }, "runAfter": { "SharePoint_に_HTTP_要求を送信します(Excelファイル取得)": [ "TimedOut", "Failed" ] } }, "終了(SharePointリスト取得失敗)": { "type": "Terminate", "inputs": { "runStatus": "Failed", "runError": { "message": "SharePointリストの取得に失敗しました。SharePointサイトのURLを修正してください。\n解消されない場合は、直前のアクションのエラー内容を確認してください。" } }, "runAfter": { "SharePoint_に_HTTP_要求を送信します(リスト取得)": [ "TimedOut", "Failed" ] } } }, "runAfter": { "変数を初期化する(SchemaXml)": [ "Succeeded" ] }, "metadata": { "operationMetadataId": "02a35856-c846-4261-abdd-9bf8198b5aad" } }, "allConnectionData": { "SharePoint_に_HTTP_要求を送信します(列作成)": { "connectionReference": { "api": { "id": "/providers/Microsoft.PowerApps/apis/shared_sharepointonline" }, "connection": { "id": "/providers/Microsoft.PowerApps/apis/shared_sharepointonline/connections/YOUR_CONNECTION_ID" }, "connectionName": "YOUR_CONNECTION_NAME" }, "referenceKey": "shared_sharepointonline" }, "行の更新(作成成功)": { "connectionReference": { "api": { "id": "/providers/Microsoft.PowerApps/apis/shared_excelonlinebusiness" }, "connection": { "id": "/providers/Microsoft.PowerApps/apis/shared_excelonlinebusiness/connections/YOUR_CONNECTION_ID" }, "connectionName": "YOUR_CONNECTION_NAME" }, "referenceKey": "shared_excelonlinebusiness" }, "行の更新(作成失敗)": { "connectionReference": { "api": { "id": "/providers/Microsoft.PowerApps/apis/shared_excelonlinebusiness" }, "connection": { "id": "/providers/Microsoft.PowerApps/apis/shared_excelonlinebusiness/connections/YOUR_CONNECTION_ID" }, "connectionName": "YOUR_CONNECTION_NAME" }, "referenceKey": "shared_excelonlinebusiness" }, "行の更新(参照列取得失敗)": { "connectionReference": { "api": { "id": "/providers/Microsoft.PowerApps/apis/shared_excelonlinebusiness" }, "connection": { "id": "/providers/Microsoft.PowerApps/apis/shared_excelonlinebusiness/connections/YOUR_CONNECTION_ID" }, "connectionName": "YOUR_CONNECTION_NAME" }, "referenceKey": "shared_excelonlinebusiness" }, "SharePoint_に_HTTP_要求を送信します(参照列有無確認)": { "connectionReference": { "api": { "id": "/providers/Microsoft.PowerApps/apis/shared_sharepointonline" }, "connection": { "id": "/providers/Microsoft.PowerApps/apis/shared_sharepointonline/connections/YOUR_CONNECTION_ID" }, "connectionName": "YOUR_CONNECTION_NAME" }, "referenceKey": "shared_sharepointonline" }, "SharePoint_に_HTTP_要求を送信します(新規リスト作成)": { "connectionReference": { "api": { "id": "/providers/Microsoft.PowerApps/apis/shared_sharepointonline" }, "connection": { "id": "/providers/Microsoft.PowerApps/apis/shared_sharepointonline/connections/YOUR_CONNECTION_ID" }, "connectionName": "YOUR_CONNECTION_NAME" }, "referenceKey": "shared_sharepointonline" }, "SharePoint_に_HTTP_要求を送信します(内部名有無確認)": { "connectionReference": { "api": { "id": "/providers/Microsoft.PowerApps/apis/shared_sharepointonline" }, "connection": { "id": "/providers/Microsoft.PowerApps/apis/shared_sharepointonline/connections/YOUR_CONNECTION_ID" }, "connectionName": "YOUR_CONNECTION_NAME" }, "referenceKey": "shared_sharepointonline" }, "テーブルの取得": { "connectionReference": { "api": { "id": "/providers/Microsoft.PowerApps/apis/shared_excelonlinebusiness" }, "connection": { "id": "/providers/Microsoft.PowerApps/apis/shared_excelonlinebusiness/connections/YOUR_CONNECTION_ID" }, "connectionName": "YOUR_CONNECTION_NAME" }, "referenceKey": "shared_excelonlinebusiness" }, "SharePoint_に_HTTP_要求を送信します(Excelファイル取得)": { "connectionReference": { "api": { "id": "/providers/Microsoft.PowerApps/apis/shared_sharepointonline" }, "connection": { "id": "/providers/Microsoft.PowerApps/apis/shared_sharepointonline/connections/YOUR_CONNECTION_ID" }, "connectionName": "YOUR_CONNECTION_NAME" }, "referenceKey": "shared_sharepointonline" }, "表内に存在する行を一覧表示": { "connectionReference": { "api": { "id": "/providers/Microsoft.PowerApps/apis/shared_excelonlinebusiness" }, "connection": { "id": "/providers/Microsoft.PowerApps/apis/shared_excelonlinebusiness/connections/YOUR_CONNECTION_ID" }, "connectionName": "YOUR_CONNECTION_NAME" }, "referenceKey": "shared_excelonlinebusiness" }, "SharePoint_に_HTTP_要求を送信します(リスト取得)": { "connectionReference": { "api": { "id": "/providers/Microsoft.PowerApps/apis/shared_sharepointonline" }, "connection": { "id": "/providers/Microsoft.PowerApps/apis/shared_sharepointonline/connections/YOUR_CONNECTION_ID" }, "connectionName": "YOUR_CONNECTION_NAME" }, "referenceKey": "shared_sharepointonline" } }, "staticResults": {}, "isScopeNode": true, "mslaNode": true }
先ほど作成した「変数の初期化」アクションの下の「+」ボタンを右クリックし、「アクションを貼り付ける」>「アクションを貼り付ける」を選択します。
貼り付けが成功すると、「スコープ(列作成処理)」というスコープが自動で表示されます(表示されない場合、何度かリトライor必要に応じてクリップボードを許可してください)


接続の設定
JSONを貼り付けた直後は、SharePointおよびExcel Onlineの接続が自分のアカウントに紐付いていないため、エラーが表示されます。赤くなっているアクションを1つずつクリックし、「接続を変更する」自分のアカウントで接続し直してください。

接続が作成されていない場合は、左のようにサインインを求められる場合があります。
接続が作成されている場合は、右のように表示されている接続のどれかを選択してください。



同様の操作を繰り返し、すべての接続エラー(計11カ所)を解消します。

エラーなく保存ができたら、フローの作成は完了です。

フローの概要
今回貼り付けたフローの概要は以下の通りです。
構造が複雑なため、すべてを理解する必要はないかと思います。
- 入力されたURLから、Excelファイルの内容を読み取る
- リスト名や列名の重複がないかを確認
- Excelに記載された列の設定情報を、SchemaXML形式に変換
- 3を利用してSharePointにHTTPリクエストを行い、結果をExcelに書き込む
フローの利用方法
リスト/列の作成先決定・URL取得
まず、どのSharePointサイトにリスト/列を作成したいのかを決定します。
決定したら、そのサイトの「設定」>「サイトコンテンツ」に移動し、ブラウザのURLバーに表示されるURLをコピー・どこかに控えておきます。
(後でフローを実行する際にこのURLを利用します)


Excelファイルのダウンロード
下記リンクからExcelテンプレートをダウンロードしてください。
(「入力例付き」「入力例なし」の2パターンを用意しています。フローを試すだけであれば「入力例付き」を、自分好みにリスト/列を作成したい場合は「入力例なし」をダウンロードしてください)
ダウンロード後は、ファイル名を自由に変更していただいて構いません。
Excelファイルの記入
ダウンロードしたExcelファイルを開き、「列定義」シートに作成したい列の情報を記載していきます。
必須項目の入力
列ヘッダーがオレンジ色の部分は必須項目になります。
どのデータ型を選択するかに関わらず、必ず入力してください。

| 列名 | 説明 | 入力規則 |
|---|---|---|
| リスト名(表示名) | 列作成先となるSharePointリストの表示名 ※既に存在する場合はそのリストに列が作成され、存在しない場合は自動でリストが作成されます | ・255文字以内 ・改行やタブ文字は入力不可 |
| 列名(表示名) | 列の表示名 (リスト画面に表示される名前) | ・255文字以内 ・改行やタブ文字は入力不可 |
| 列名(内部名) | 列の内部名 (Power AppsやURLで利用される名前) | ・半角英数字・アンダースコア(_)のみ利用可能 ・32文字以内 ・1文字目は数字不可 |
| データ型 | 列のデータ型 | ドロップダウンから選択 |
| 必須 | 入力を必須にするか | ドロップダウンから選択 |
任意項目の入力
列ヘッダーが水色の部分は任意項目になります。
必要に応じて/選択したデータ型に応じて、追加で入力してください。

| 列名 | 説明 | 入力規則 |
|---|---|---|
| 詳細説明 | 列の用途や詳しい説明 | 特になし |
| 複数選択 | 複数選択できるか ※データ型で「選択肢」「ユーザーまたはグループ」「参照」を選んだ場合に指定 | ドロップダウンから選択 |
| 選択肢 | 選択肢の項目 ※データ型で「選択肢」を選んだ場合に指定 | 特になし |
| 参照リスト名(表示名) | 参照したいリストの表示名 ※データ型で「参照」を選んだ場合に指定 | ・255文字以内 ・改行やタブ文字は入力不可 |
| 参照列名(内部名) | 参照したいリストの内部名 ※データ型で「参照」を選んだ場合に指定 | ・半角英数字・アンダースコア(_)のみ利用可能 ・32文字以内 ・1文字目は数字不可 |
50行分の入力欄を用意していますが、足りない場合はテーブル右下を引っ張って拡張いただければと思います。

作成対象かの確認
入力が完了したら、紺色の「作成対象」列を確認します。
ここが「はい」になっている行のみ、SharePointリスト/列が作成されます。

「いいえ」となってしまっている場合は、以下2点を確認してください。
- 必要な情報が入力されていること
(特にデータ型で「選択肢」「ユーザーまたはグループ」「参照」を選択した場合、必須項目に加えて一部任意項目も入力されていること) - 「作成結果」列に「はい」が入っていないこと
(すでにフローが実行された場合は「はい」が入っており、重複作成を避ける仕組みになっています。もう一度作成したい場合は「はい」の値をクリアしてください)
※「作成対象」や「列ID」は手動で変更しないよう注意してください (関数が入っているため)
ここまでの記入、確認が完了したらExcelを上書き保存します。
SharePointリストへのアップロード・共有URL取得
続いて、保存したExcelを任意のSharePointドキュメントライブラリにアップロードします。
(リスト/列作成先のSharePointサイトでなくても構いません)

アップロードしたファイルの「…」>「リンクのコピー」を選択し、共有URLを取得しておきます。
※必ずこの手順で共有URLを取得してください


これでフロー実行前の前準備は完了です。
Power Automateフローの実行
Power Automateポータルのフロー一覧から、フローの実行ボタンをクリックします。

接続の許可後、これまでの手順で取得しておいたURLを入力します。
| 名前 | 概要 | 手順リンク |
|---|---|---|
| SiteUrl | リスト/列作成先のURL | リスト/列の作成先決定・URL取得 |
| ExcelUrl | Excelの共有URL | SharePointリストへのアップロード・共有URL取得 |
フローの実行ボタンを押すとフローが開始されます。


実行結果の確認
Excelファイル
フロー完了後にExcelファイルを確認すると、「作成結果」列に結果が書き込まれています。

- 成功:列の作成が正常に完了
- 失敗:列の作成に失敗
失敗した場合は、エラーメッセージやフロー実行履歴を確認して対応・修正してください。
SharePointリスト
SharePointリストの「リストの設定」または「列の追加」画面から、列が意図通りに追加されているか必ず確認してください。


まとめ
今回の記事では、SharePointリスト・列を一括作成するフローを紹介しました。
このフローを使うことで、SharePointリストへの列の一括追加を大幅に効率化できます。
- Excelに列定義を記入するだけで、複数のリスト・複数の列をまとめて作成可能
- 11種類のデータ型に対応
- 実行結果がExcelに自動記録されるため、どの列が作成済みかを管理しやすい

