はじめに
この記事はPower Automateで色々なデータソースに対してBulk Insertを行うのExcel編です。
登録を行う元データは上記記事の「Bulk Insert」セクションを参照してください。
Power Automateではデータソースに対してレコードを作成するアクションを標準で搭載してはいますが、どれも1件ずつの登録しかできません。
これでは例えば500件のデータを登録したい場合など、ループアクションが必要になり、APIコール数もこれだけで500回も消費してしまいます。
このような事態を避けるためにも1回のアクションで複数件のデータを登録する方法をこの記事ではまとめています。
あくまでもここで紹介しているのは一例に過ぎないのでご注意ください。
Excelに対してBulk Insertを行う
登録を行うExcelには以下のようなテーブルが存在しています。
列名 | 説明 | 元データとのマッピング |
---|---|---|
GUID | GUIDが含まれています | GUID |
Number | 数値が含まれています | Number |
Text | 文字列が含まれています | Text |
Date | 日付が含まれています | Date |
Excelに対してBulk Insertを行うにはOffice Scriptを活用します。
Office ScriptはExcelの以下から編集を行うことが可能です。
コードは右のコードエディタにて記載します。
今回作成してスクリプトは以下です。
function main( workbook: ExcelScript.Workbook, jsonData: object[] ): number { // Get workSheet "Sheet1" let worksheet = workbook.getWorksheet("Sheet1"); // Get Table let table = worksheet.getTable("テーブル1"); const actionRows: ActionRow[] = jsonData as ActionRow[]; // Add each object in the array of JSON objects to the table. const tableValues = actionRows.map(row => [row.GUID, row.Number, row.Text, row.Date]); table.addRows(-1, tableValues); // Returns the number of rows created return table.getRangeBetweenHeaderAndTotal().getRowCount(); } // Defining the JSON Structure interface ActionRow { GUID: string; Number: number; Text: string; Date: string; }
このスクリプトではPower Automateから登録を行うためのJSONデータを受け取って、そのデータをもとに予め指定しておいたテーブルに対して行を作成しています。
* 例外処理は行っていないです。
最後に登録後のテーブルのデータ件数を返すようにしています。
Power Automateから渡されるJSONの構成は固定としています。
データを加工する必要があるのであればPower Automate側でしてね。という設計です。
ちゃんとした運用を行うのであれば例外処理とか入れてエラーとか返してあげるといいかもですね。
シート名やテーブル名、データのマッピングなんかは自身の環境に合わせて修正してくださいね。
Power Automateからは以下のようにスクリプトを呼んで値を渡しています。
おわりに
Office Scriptをどこに保存したか?で第三者への共有やフローの実行が変わる(はず)のでご注意を。
Office Scriptの保存先はOneDriveまたは、SharePointですね。
第三者に共有、実行する際は権限周り意識してくださいね。