次の方法で共有


チュートリアル: ブック内のメールからコンテンツを自動的に保存する

このチュートリアルでは、自動化された Power Automate ワークフローで Office Script for Excel を使用する方法について説明します。 スクリプトは、メールを受信するたびに自動的に実行され、Excel ブック内の電子メールから情報が記録されます。 別のアプリケーションから Office スクリプトにデータを渡すことができるようになると、自動プロセスの柔軟性と自由性が大きく向上します。

ヒント

Office スクリプトを初めて使用する場合は、「 チュートリアル: Excel テーブルを作成して書式設定する」から始めます。 Power Automate を初めて使用する場合は、「 チュートリアル: Power Automate フローからスプレッドシートを更新する」から始めます。 Office スクリプトは TypeScript を使用します。このチュートリアルは、JavaScript や TypeScript について初級から中級レベルの知識を持つユーザーを対象としています。 JavaScript を初めて使用する場合は、 Mozilla JavaScript チュートリアルから始めます。

前提条件

このチュートリアルでは、Office スクリプトと Power Automate にアクセスする必要があります。 [自動化] タブが表示されない場合は、 プラットフォームのサポート を確認してください。 Power Automate サインアップに関する FAQ には、Power Automate の概要に関する情報があります。

ブックを準備する

Power Automate では、ブック コンポーネントにアクセスするために Workbook.getActiveWorksheet などの相対参照を使わないようにする必要があります。 そのため、Power Automate で参照するには、一貫性のある名前のブックとワークシートが必要です。

  1. MyWorkbook という名前の新しいブックを作成します。

  2. [ 自動化 ] タブに移動し、[ 新しいスクリプト] を選択します。

  3. 既存のコードを次のスクリプトで置き換え、[実行] を選択します。 この手順では、一貫性のあるワークシート、テーブル、ピボットテーブルの名前を含むブックを設定します。

    function main(workbook: ExcelScript.Workbook) {
      // Add a new worksheet to store the email table.
      let emailsSheet = workbook.addWorksheet("Emails");
    
      // Add data and create a table
      emailsSheet.getRange("A1:D1").setValues([
        ["Date", "Day of the week", "Email address", "Subject"]
      ]);
      let newTable = workbook.addTable(emailsSheet.getRange("A1:D2"), true);
      newTable.setName("EmailTable");
    
      // Add a new PivotTable to a new worksheet
      let pivotWorksheet = workbook.addWorksheet("Subjects");
      let newPivotTable = workbook.addPivotTable("Pivot", "EmailTable", pivotWorksheet.getRange("A3:C20"));
    
      // Setup the pivot hierarchies
      newPivotTable.addRowHierarchy(newPivotTable.getHierarchy("Day of the week"));
      newPivotTable.addRowHierarchy(newPivotTable.getHierarchy("Email address"));
      newPivotTable.addDataHierarchy(newPivotTable.getHierarchy("Subject"));
    }
    

Office スクリプトを作成する

電子メールから情報をログに記録するスクリプトを作成します。 最も多くのメールを受信した曜日と、そのメールを送信する一意の送信者の数を追跡する必要があります。 ブックには、DateDay of the weekEmail addressSubject 列を含むテーブルがあります。 ワークシートには、曜日Emailアドレス (行階層) をピボットするピボットテーブルもあります。 一意の [件名] の数は、表示されている集計情報(データ階層)です。 スクリプトは、電子メール テーブルを更新した後、そのピボットテーブルを更新します。

  1. [コード エディター] 作業ウィンドウ内で、[新しいスクリプト] を選択します。

  2. チュートリアルの後半で作成するフローは、受信した各メールに関するスクリプト情報を送信します。 スクリプトは、main関数のパラメーターを使用して、その入力を受け付ける必要があります。 既定のスクリプトを次のスクリプトに置き換えます。

    function main(
      workbook: ExcelScript.Workbook,
      from: string,
      dateReceived: string,
      subject: string) {
    
    }
    
  3. スクリプトには、ブックのテーブルとピボットテーブルにアクセスする必要があります。 開いた {の後に、スクリプトの本文に次のコードを追加します。

    // Get the email table.
    let emailWorksheet = workbook.getWorksheet("Emails");
    let table = emailWorksheet.getTable("EmailTable");
    
    // Get the PivotTable.
    let pivotTableWorksheet = workbook.getWorksheet("Subjects");
    let pivotTable = pivotTableWorksheet.getPivotTable("Pivot");
    
  4. dateReceived パラメーターのタイプは string です。 曜日を簡単に取得できるように、Dateオブジェクトに変換します。 その後、その日の数値をより読みやすいバージョンにマップする必要があります。 終了 }の前に、スクリプトの末尾に次のコードを追加します。

      // Parse the received date string to determine the day of the week.
      let emailDate = new Date(dateReceived);
      let dayName = emailDate.toLocaleDateString("en-US", { weekday: 'long' });
    
  5. subject文字列には、"RE:" 応答タグが含まれる場合があります。 同じスレッド内の電子メールがテーブルの同じ件名になるように、文字列からそのタグを削除します。 終了 }の前に、スクリプトの末尾に次のコードを追加します。

    // Remove the reply tag from the email subject to group emails on the same thread.
    let subjectText = subject.replace("Re: ", "");
    subjectText = subjectText.replace("RE: ", "");
    
  6. メール データの書式設定が済んだので、メール テーブルに行を追加します。 終了 }の前に、スクリプトの末尾に次のコードを追加します。

    // Add the parsed text to the table.
    table.addRow(-1, [dateReceived, dayName, from, subjectText]);
    
  7. 最後に、ピボットテーブルが更新されていることを確認します。 } を閉じる前に、スクリプトの最後に次のコードを追加します。

    // Refresh the PivotTable to include the new row.
    pivotTable.refresh();
    
  8. スクリプトの名前を [メールを記録] に変更し、[スクリプトの保存] を選択します。

これで、スクリプトは Power Automate ワークフローで使用できるようになりました。 次のスクリプトのようになります。

function main(
  workbook: ExcelScript.Workbook,
  from: string,
  dateReceived: string,
  subject: string) {
  // Get the email table.
  let emailWorksheet = workbook.getWorksheet("Emails");
  let table = emailWorksheet.getTable("EmailTable");

  // Get the PivotTable.
  let pivotTableWorksheet = workbook.getWorksheet("Subjects");
  let pivotTable = pivotTableWorksheet.getPivotTable("Pivot");

  // Parse the received date string to determine the day of the week.
  let emailDate = new Date(dateReceived);
  let dayName = emailDate.toLocaleDateString("en-US", { weekday: 'long' });

  // Remove the reply tag from the email subject to group emails on the same thread.
  let subjectText = subject.replace("Re: ", "");
  subjectText = subjectText.replace("RE: ", "");

  // Add the parsed text to the table.
  table.addRow(-1, [dateReceived, dayName, from, subjectText]);

  // Refresh the PivotTable to include the new row.
  pivotTable.refresh();
}

Power Automate を使用して自動化されたワークフローを作成する

  1. 「Power Automate のサイト」にサインインします。

  2. 画面の左側のメニューで、[ 作成] を選択します。 この選択により、新しいワークフローを作成する方法の一覧が表示されます。

    Power Automate の [作成] ボタン。

  3. [白紙から初める] セクションで、[自動フロー] を選択します。 この選択により、電子メールの受信など、イベントによってトリガーされるワークフローが作成されます。

    Power Automate の自動化したフロー オプション。

  4. ダイアログ ウインドウが表示されたら、[フロー名] のテキスト ボックスに、フローの名前を入力します。 [ フローのトリガーの選択] で、オプションの一覧から [新しいメールが届いたとき ] を選択します。 検索ボックスを使用してオプションを検索する必要がある場合があります。 最後に、[作成] を選択します。

    [フロー名] と [choose your folow’s trigger (フローのトリガーを選択する)] オプションを示す Power Automate Flow の一部。フロー名は

    注:

    このチュートリアルでは、Outlook を使用します。 代わりに優先メール サービスを使用できますが、一部のオプションが異なる場合があります。

  5. フロー ビルダーで、[ + ] ボタンと [ アクションの追加] を選択します。

  6. [ アクションの追加 ] 作業ウィンドウで、"Excel 実行スクリプト" を検索します。 Excel Online (Business) コネクタの [スクリプトの実行] アクションを選択します。 このアクションは、ブック上の OneDrive からスクリプトを実行します。 チームの SharePoint ライブラリに格納されているスクリプトを使用する場合は、[ SharePoint ライブラリからスクリプトを実行 する] アクションを使用します。

    Excel Online (Business) コネクタのアクションを示すアクション選択作業ウィンドウ。[スクリプトの実行] アクションが強調表示されています。

  7. Microsoft 365 アカウントにサインインするように求められる場合があります。 サインインしてチュートリアルを続行します。

  8. 次に、フロー ステップで使用するブックとスクリプトを選択します。 このチュートリアルでは、OneDrive で作成したブックを使用しますが、OneDrive サイトまたは SharePoint サイト内の任意のブックを使用できます。 [スクリプトの実行] アクションに次のパラメーターを指定します。

    • 場所: OneDrive for Business
    • ドキュメント ライブラリ: OneDrive
    • ファイル: MyWorkbook.xlsx (ファイル ブラウザーを使用して選択されています)
    • スクリプト: メールの記録
    • ScriptParameters/from: From (Outlook からの動的コンテンツ)
    • ScriptParameters/dateReceived: 受信時刻 (Outlook からの動的コンテンツ)
    • ScriptParameters/subject: Subject (Outlook からの動的コンテンツ)

    スクリプトのパラメーターは、スクリプトを選択した後にのみ表示されることに注意してください。

    スクリプトを選択すると表示されるオプションを示す Power Automate のスクリプトを実行するアクション。

  9. [保存] を選択します。

    Power Automate の [保存] ボタン。

フローが有効になります。 Outlook からメールを受信するたびに、スクリプトが自動的に実行されます。

Power Automate でスクリプトを管理する

  1. Power Automate のメイン ページで、[自分のフロー] を選択します。

    Power Automate の [自分のフロー] ボタン。

  2. フローを選択します。 ここでは、実行履歴を表示することができます。 ページを更新するか、[すべての実行] を更新するボタンを選択して、履歴を更新することができます。 フローは、電子メールの受信直後にトリガーされます。 メッセージを送信してフローをテストします。

フローによってスクリプトがトリガーされて正常に実行されると、ブックのテーブルとピボットテーブルの更新が表示されます。

フローの実行を 3 回行った後のメール テーブルを示すワークシート。

フローの実行を 3 回行った後のピボット テーブルを示すワークシート。

トラブルシューティング

同時に複数のメールを受信すると、Excel でマージの競合が発生する可能性があります。 このリスクは、電子メール コネクタを一度に 1 つのメールのみに対して動作するように設定することで軽減されます。 この手順を実行するには:

  1. [電子メールが届く] アクションを選択し、[ 設定] を選択します。

  2. ポップアップ表示される [設定] オプションで、[コンカレンシー制御] を [オン] に設定します。 次に、[並列処理の度合い] を 1 に設定します。

    設定メニューのコンカレンシー オプション。

次の手順

完全なチュートリアル: スプレッドシート データに基づいて週単位の電子メール リマインダーを送信します。 このチュートリアルでは、スクリプトからフローにデータを返す方法を説明します。

「自動タスク リマインダーのサンプル シナリオ」では、Office スクリプトと Power Automate を Teams アダプティブ カードと組み合わせる方法についても説明します。