Power Automate を使用した Office スクリプトの実行

Power Automate では、より大規模で自動化されたワークフローに Office スクリプトを追加できます。Power Automate を使用すると、ワークシートのテーブルにメールの内容を追加したり、ブックのコメントに基づいてプロジェクト管理ツールでアクションを作成したりできます。

概要

Power Automate を初めて使用する場合は、「Power Automate に関する入門情報」にアクセスすることをお勧めします。 そちらで、利用可能なすべてのオートメーションの可能性について詳しく学ぶことができます。 このドキュメントでは、Power Automate での Office スクリプトの動作と、それが Excel エクスペリエンスの改善にどのように役立つかに重点が置かれています。

Power Automate と Office スクリプトの統合を開始するには、チュートリアル「Power Automate でスクリプトの使用を開始する」に従ってください。 単純なスクリプトを呼び出すフローの作成方法について学ぶことができます。 このチュートリアルと「自動で実行される Power Automate フロー内で、データをスクリプトに渡す」のチュートリアルが完了したら、こちらに戻り、Office スクリプトを Power Automate フローに接続する方法の詳細をご確認ください。

Excel Online (Business) コネクタ

コネクタは、Power Automate とアプリケーション間のブリッジです。 Excel Online (Business) コネクタを使用すると、フローに Excel ブックへのアクセスが提供されます。 "スクリプトの実行" アクションにより、選択したブックからアクセスできるすべての Office スクリプトを呼び出すことができます。 また、フローによってデータを提供したり、フローの後の手順用にスクリプトで情報を返したりできるよう、スクリプトに入力パラメーターを指定することもできます。

重要

"スクリプトの実行" アクションにより、Excel コネクタを使用するユーザーにブックとそのデータへの重要なアクセス権が付与されます。 さらに、「Power Automate からの外部呼び出し」で説明されているとおり、外部 API の呼び出しを行うスクリプトにセキュリティ上のリスクがあります。 管理者が機密性の高いデータの流出を懸念している場合は、Excel Online コネクタをオフにするか、Office スクリプト管理者制御で Office スクリプトへのアクセスを制限することができます。

スクリプトのフローでのデータ転送

Power Automate を使用すると、フローのステップ間でデータの一部を渡すことができます。 スクリプトを構成して、必要な種類の情報を受け入れたり、フローに必要なものをブックから返したりすることができます。 スクリプトの入力は、(workbook: ExcelScript.Workbook に加えて) main 関数にパラメーターを追加することによって指定されます。 スクリプトからの出力は、main に戻り値の型を追加することによって宣言されます。

注意

フローで "スクリプトの実行" ブロックを作成すると、承認されたパラメーターと返された型が入力されます。 スクリプトのパラメーターまたは戻り値の型を変更する場合は、フローの "スクリプトの実行" ブロックを再実行する必要があります。 これにより、データが正しく解析されていることが確認されます。

次のセクションでは、Power Automate で使用されるスクリプトの入力と出力の詳細について説明します。 このトピックについて学ぶための実践的なアプローチが必要な場合は、「自動で実行される Power Automate フロー内で、データをスクリプトに渡す」チュートリアルを試すか、タスクの自動アラームのサンプル シナリオを確認してください。

main パラメーター: スクリプトにデータを渡す

すべてのスクリプト入力は、main 関数の追加パラメーターとして指定されます。 たとえば、入力として名前を表す string をスクリプトで受け入れるようにする場合は、main 署名を function main(workbook: ExcelScript.Workbook, name: string) に変更します。

Power Automate でフローを構成する場合、スクリプト入力を静的な値、、または動的なコンテンツとして指定できます。 個々のサービスのコネクタの詳細については、Power Automate コネクタに関するドキュメントを参照してください。

入力の制限

スクリプトの main 関数に入力パラメーターを追加する場合は、次の上限や制限を検討してください。 これらは、スクリプトの戻り値の型にも適用されます。

  1. 最後のパラメーターは ExcelScript.Workbook の型にする必要があります。 パラメーター名は関係ありません。

  2. stringnumberbooleanunknownobject、および undefined がサポートされています。

  3. 前述の型の配列 ([]Array<T> スタイルの両方) がサポートされています。 入れ子になった配列もサポートされています。

  4. 共用体型は、単一の型に属するリテラルの共用体 ("Left", 5 ではなく、"Left" | "Right" など) の場合に許可されます。 undefined を含むサポートされる型の共用体 (string | undefined など) もサポートされます。

  5. オブジェクト型は、型 stringnumberboolean、サポートされている配列、または他のサポートされているオブジェクトのプロパティが含まれる場合に許可されます。 次の例は、パラメーターの型としてサポートされる入れ子にされたオブジェクトを示しています。

    // The Employee object is supported because Position is also composed of supported types.
    interface Employee {
        name: string;
        job: Position;
    }
    
    interface Position {
        id: number;
        title: string;
    }
    
  6. オブジェクトのインターフェイスまたはクラス定義はスクリプトで定義されている必要があります。 次の例のように、オブジェクトをインラインで匿名で定義することができます。

    function main(workbook: ExcelScript.Workbook): {name: string, email: string}
    

省略可能なパラメーターと既定のパラメーター

  1. 省略可能なパラメーターは許可され、省略可能な修飾子 ? で示されます (例: function main(workbook: ExcelScript.Workbook, Name?: string))。

  2. 既定のパラメーター値は許可されています (例: function main(workbook: ExcelScript.Workbook, Name: string = 'Jane Doe'))。

スクリプトからデータを返す

スクリプトではブックからデータを返すことができ、Power Automate フローの動的なコンテンツとして使用することができます。 前述の型制限 が戻り値の型に適用されます。 オブジェクトを返すには、戻り値の型構文を main 関数に追加します。 たとえば、スクリプトから string 値を返す場合、main シグネチャは function main(workbook: ExcelScript.Workbook): string になります。

次のスクリーンショットは、GitHub の問題がお客様に割り当てられるたびにトリガーされる Power Automate フローを示しています。 このフローでは、Excel ブックのテーブルに問題を追加するスクリプトが実行されます。 そのテーブルに 5 つ以上の問題がある場合、フローでメール アラームが送信されます。

サンプルのフローを示す Power Automate フロー エディター。

スクリプトの main 関数では、問題の ID と問題のタイトルが入力パラメーターとして指定され、スクリプトによって問題テーブルの行数が返されます。

function main(
  workbook: ExcelScript.Workbook,
  issueId: string,
  issueTitle: string): number {
  // Get the "GitHub" worksheet.
  let worksheet = workbook.getWorksheet("GitHub");

  // Get the first table in this worksheet, which contains the table of GitHub issues.
  let issueTable = worksheet.getTables()[0];

  // Add the issue ID and issue title as a row.
  issueTable.addRow(-1, [issueId, issueTitle]);

  // Return the number of rows in the table, which represents how many issues are assigned to this user.
  return issueTable.getRangeBetweenHeaderAndTotal().getRowCount();
}

関連項目