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

このチュートリアルでは、自動化された 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 アダプティブ カードと組み合わせる方法についても説明します。