Office スクリプトのサンプル シナリオ: Teams でインタビューをスケジュールする

このシナリオでは、人事採用担当者が Teams の候補者との面接会議をスケジュールしています。 Excel ファイルで候補者の面接スケジュールを管理します。 候補者と面接官の両方に Teams 会議の招待を送信する必要があります。 その後、Teams 会議が送信されたことを確認して Excel ファイルを更新する必要があります。

このソリューションには、1 つの Power Automate フローで組み合わされた 3 つの手順があります。

  1. スクリプトはテーブルからデータを抽出し、オブジェクトの配列を JSON データとして返します。
  2. その後、データは Teams 会議の 作成 アクションに送信され、招待が送信されます。
  3. 招待の状態を更新するために、同じ JSON データが別のスクリプトに送信されます。

JSON の操作の詳細については、「JSON を 使用して Office スクリプトとの間でデータを渡す」を参照してください。

対象となるスクリプティング スキル

  • Power Automate フロー
  • Teams 統合
  • テーブルの解析

セットアップ手順

ブックをダウンロードする

  1. サンプル ブックを OneDrive にダウンロードします。

  2. Excel でブックを開きます。

  3. 招待を受け取るように、少なくとも 1 つのメール アドレスを自分のものに変更します。

スクリプトを作成する

  1. [ 自動化 ] タブの [ 新しいスクリプト ] を選択し、次のスクリプトをエディターに貼り付けます。 これにより、テーブル データが抽出され、招待がスケジュールされます。
function main(workbook: ExcelScript.Workbook): InterviewInvite[] {
  const MEETING_DURATION = workbook.getWorksheet("Constants").getRange("B1").getValue() as number;
  const MESSAGE_TEMPLATE = workbook.getWorksheet("Constants").getRange("B2").getValue() as string;

  // Get the interview candidate information.
  const sheet = workbook.getWorksheet("Interviews");
  const table = sheet.getTables()[0];
  const dataRows = table.getRangeBetweenHeaderAndTotal().getValues();

  // Convert the table rows into InterviewInvite objects for the flow.
  let invites: InterviewInvite[] = [];
  dataRows.forEach((row) => {
    const inviteSent = row[1] as boolean;
    if (!inviteSent) {
      const startTime = new Date(Math.round(((row[6] as number) - 25569) * 86400 * 1000));
      const finishTime = new Date(startTime.getTime() + MEETING_DURATION * 60 * 1000);
      const candidateName = row[2] as string;
      const interviewerName = row[4] as string;

      invites.push({
        ID: row[0] as string,
        Candidate: candidateName,
        CandidateEmail: row[3] as string,
        Interviewer: row[4] as string,
        InterviewerEmail: row[5] as string,
        StartTime: startTime.toISOString(),
        FinishTime: finishTime.toISOString(),
        Message: generateInviteMessage(MESSAGE_TEMPLATE, candidateName, interviewerName)
      });
    }    
  });

  console.log(JSON.stringify(invites));
  return invites;
}

function generateInviteMessage(
  messageTemplate: string,
   candidate: string,
   interviewer: string) : string {
  return messageTemplate.replace("_Candidate_", candidate).replace("_Interviewer_", interviewer);
}

// The interview invite information.
interface InterviewInvite {
  ID: string
  Candidate: string
  CandidateEmail: string
  Interviewer: string
  InterviewerEmail: string
  StartTime: string
  FinishTime: string
  Message: string
}
  1. フローのスクリプト 「 インタビューのスケジュール」 に名前を付けます。

  2. 次のコードを使用して、別の新しいスクリプトを作成します。 これにより、行が招待済みとしてマークされます。

function main(workbook: ExcelScript.Workbook, invites: InterviewInvite[]) {
  const table = workbook.getWorksheet("Interviews").getTables()[0];

  // Get the ID and Invite Sent columns from the table.
  const idColumn = table.getColumnByName("ID");
  const idRange = idColumn.getRangeBetweenHeaderAndTotal().getValues();
  const inviteSentColumn = table.getColumnByName("Invite Sent?");

  const dataRowCount = idRange.length;

  // Find matching IDs to mark the correct row.
  for (let row = 0; row < dataRowCount; row++){
    let inviteSent = invites.find((invite) => {
      return invite.ID == idRange[row][0] as string;
    });

    if (inviteSent) {
      inviteSentColumn.getRangeBetweenHeaderAndTotal().getCell(row, 0).setValue(true);
      console.log(`Invite for ${inviteSent.Candidate} has been sent.`);
    }
  } 
}

// The interview invite information.
interface InterviewInvite {
  ID: string
  Candidate: string
  CandidateEmail: string
  Interviewer: string
  InterviewerEmail: string
  StartTime: string
  FinishTime: string
  Message: string
}
  1. フローの 2 番目 のスクリプト 「送信された招待を記録する 」という名前を付けます。

Power Automate フローを作成する

このフローでは、面接スケジュール スクリプトを実行し、Teams 会議を送信し、アクティビティをブックに記録し直します。

  1. 新しい インスタント クラウド フローを作成します。

  2. [ フローを手動でトリガーする ] を選択し、[ 作成] を選択します。

  3. フロー ビルダーで、[アクションの追加] + ボタンを選択 しますExcel Online (Business) コネクタの [スクリプトの実行] アクションを使用します。 次の値を使用してアクションを完了します。

    • 場所: OneDrive for Business
    • ドキュメント ライブラリ: OneDrive
    • ファイル: hr-interviews.xlsx (ファイル ブラウザーから選択)
    • スクリプト: インタビューをスケジュール する 完了したスクリプトアクションを実行して、ブックからインタビュー データを取得します。
  4. Microsoft Teams コネクタの [Teams 会議の作成] アクションを使用するアクションを追加します。 Excel コネクタから動的コンテンツを選択すると、フロー に対して [For each ] ブロックが生成されます。 次の値を使用してコネクタを完了します。

    • 件名: Contoso のインタビュー
    • メッセージ: メッセージ ( スクリプトの実行からの動的コンテンツ)
    • タイム ゾーン: 太平洋標準時
    • 開始時刻: StartTime ( スクリプトの実行からの動的コンテンツ)
    • 終了時刻: FinishTime ( スクリプトの実行からの動的コンテンツ)
    • 予定表 ID: 予定表
    • 必須出席者: CandidateEmail ; InterviewerEmail ( スクリプトの実行 からの動的コンテンツ - 値を区切る ';' を書き留めます) 会議をスケジュールするための完了した Teams アクション。
  5. 同じ [ 各ブロック] に、別の [スクリプトの実行] アクションを 追加します。 次の値を使用します。

    • 場所: OneDrive for Business
    • ドキュメント ライブラリ: OneDrive
    • ファイル: hr-interviews.xlsx (ファイル ブラウザーから選択)
    • スクリプト: 送信された招待を記録する
    • invites: result ( スクリプトの実行からの動的コンテンツ)
  6. フローを保存します。 フロー デザイナーは次の図のようになります。

    [For each control]\(各コントロール\) に至る 2 つのステップと、For each コントロール内の 2 つのステップを示す、完了したフローの図。

  7. フロー エディター ページの [テスト ] ボタンを使用するか、[ マイ フロー ] タブでフローを実行します。プロンプトが表示されたら、必ずアクセスを許可してください。

トレーニング ビデオ: Excel データから Teams 会議を送信する

このサンプルのバージョンを YouTube で確認できます。 彼のバージョンでは、列の変更や古い会議時間を処理する、より堅牢なスクリプトが使用されています。