コルネの進捗や備忘録が記されたなにか

進捗や成果物や備忘録てきななにかを雑に更新していきます。

Power AutomateでExcelに対してBulk Insertを行う


スポンサードリンク

はじめに

この記事は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を活用します。

learn.microsoft.com

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ですね。

learn.microsoft.com

三者に共有、実行する際は権限周り意識してくださいね。


スポンサードリンク