ささみ学習帳 - sasami's study book

ささみ学習帳

Microsoft365 や Power Platform について学んだこと・アイデアのメモ

Excelブック のテーブルをソートするPower Automate クラウドフロー (Office スクリプトで)

Power Automate でつかえる Excel Online (Business)コネクタにはソート機能がありません。

テーブルデータを読み込んでソートという手段もありますが、"餅は餅屋"理論でOfficeスクリプトを呼び出す形でも並び替えが可能です。

説明

  • 今回のOfficeスクリプトは第3ソートキーまで対応しています。 第2、第3ソートキーは省略可能としています。
  • スクリプトを実行しているだけなのでAPI要求数が少ないメリットがあります。
  • OfficeスクリプトVBAと異なり特定のExcelブックに紐づかないのでこういう使い方もできて便利です。

Microsoft 365 E3 / E5 の環境で動作確認しています。 OfficeスクリプトとPowerAutomateが使える法人向けのライセンスであれば使えのではないかと思います。

実際にソートを実行するOfficeスクリプトを作成する

Excel online で空白のブックを作成し、自動化→新しいスクリプト

下記のコードをコピーしてコードエディターに張り付け、名前を付けてスクリプトを保存

function main(
    workbook: ExcelScript.Workbook,
    tableName: string,
    key1st: number,                  //colunm number 0-
    key1stOrder: number,   //1:ascending other:descending
    key2nd?: number,             //colunm number 0-
    key2ndOrder?: number,   //1:ascending other:descending
    key3rd?: number,             //colunm number 0-
    key3rdOrder?: number   //1:ascending other:descending
) {

    let ____1 = workbook.getTable(tableName);

    if (typeof key3rd != "undefined" && typeof key3rdOrder != "undefined") {
        // Custom sort on table ____1
        ____1.getSort().apply([{ key: key1st, ascending: Boolean(key1stOrder) }, { key: key2nd, ascending: Boolean(key2ndOrder) }, { key: key3rd, ascending: Boolean(key3rdOrder) }], false);
    } else if (typeof key2nd != "undefined" && typeof key2ndOrder != "undefined") {
        // Custom sort on table ____1
        ____1.getSort().apply([{ key: key1st, ascending: Boolean(key1stOrder) }, { key: key2nd, ascending: Boolean(key2ndOrder) }], false);
    } else {
        // Custom sort on table ____1
        ____1.getSort().apply([{ key: key1st, ascending: Boolean(key1stOrder) }]);
    }

    return 1;
}

Officeスクリプトのソートメソッドを各種パラメータをPowerAutomateフローから指定できるようにパラメータ化しただけのお手軽スクリプトです。

Power Automate クラウドフローから呼び出す

パラメータ 説明
場所 ソートしたいExcelブックの場所
ドキュメントライブラリ ソートしたいExcelブックのドキュメントライブラリ
ファイル ソートしたいExcelブック
スクリプト 上の手順で作成したOfficeスクリプト
tableName 【Officeスクリプトのパラメータ】Excelブックに定義されているテーブル名
key1st 【Officeスクリプトのパラメータ】第1ソートキー列(0から)
key1stOrder 【Officeスクリプトのパラメータ】第1ソートキーの昇順(1)・降順(1以外)
key2nd 【Officeスクリプトのパラメータ】第2ソートキー列(0から)
key2ndOrder 【Officeスクリプトのパラメータ】第2ソートキーの昇順(1)・降順(1以外)
key3rd 【Officeスクリプトのパラメータ】第3ソートキー列(0から)
key3rdOrder 【Officeスクリプトのパラメータ】第3ソートキーの昇順(1)・降順(1以外)

実行してみる

ソート条件

  1. 都道府県:昇順
  2. 年齢:昇順
  3. 性別:降順

実行結果

  • before

  • after