Freigeben über


Beispielszenario für Office-Skripts: Planen von Interviews in Teams

In diesem Szenario sind Sie personalverantwortlicher Mitarbeiter, der Vorstellungsgespräche mit Kandidaten in Teams plant. Sie verwalten den Vorstellungsterminplan von Kandidaten in einer Excel-Datei. Sie müssen die Teams-Besprechungseinladung sowohl an den Kandidaten als auch an die Interviewer senden. Anschließend müssen Sie die Excel-Datei mit der Bestätigung aktualisieren, dass Teams-Besprechungen gesendet wurden.

Die Lösung umfasst drei Schritte, die in einem einzelnen Power Automate-Flow kombiniert werden.

  1. Ein Skript extrahiert Daten aus einer Tabelle und gibt ein Array von Objekten als JSON-Daten zurück.
  2. Die Daten werden dann an die Aktion Teams Erstellen einer Teams-Besprechung gesendet, um Einladungen zu senden.
  3. Die gleichen JSON-Daten werden an ein anderes Skript gesendet, um die status der Einladung zu aktualisieren.

Weitere Informationen zum Arbeiten mit JSON finden Sie unter Verwenden von JSON zum Übergeben von Daten an und aus Office-Skripts.

Behandelte Skriptfähigkeiten

  • Power Automate-Flows
  • Teams-Integration
  • Tabellenanalyse

Setupanweisungen

Herunterladen der Arbeitsmappe

  1. Laden Sie die Beispielarbeitsmappe auf OneDrive herunter.

  2. Öffnen Sie die Arbeitsmappe in Excel.

  3. Ändern Sie mindestens eine der E-Mail-Adressen in Ihre eigene, damit Sie eine Einladung erhalten.

Erstellen der Skripts

  1. Wählen Sie auf der Registerkarte Automatisierendie Option Neues Skript aus, und fügen Sie das folgende Skript in den Editor ein. Dadurch werden Tabellendaten extrahiert, um Einladungen zu planen.
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. Nennen Sie das Skript Schedule Interviews für den Flow.

  2. Erstellen Sie ein weiteres neues Skript mit dem folgenden Code. Dadurch werden Zeilen als eingeladen markiert.

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. Benennen Sie das zweite Skript Record Sent Invites (Gesendete Einladungen ) für den Flow.

Erstellen des Power Automate-Flows

Dieser Flow führt die Skripts für die Interviewplanung aus, sendet die Teams-Besprechungen und zeichnet die Aktivität wieder in der Arbeitsmappe auf.

  1. Erstellen Sie einen neuen Instant Cloud Flow.

  2. Wählen Sie Manuell einen Flow auslösen und dann Erstellen aus.

  3. Wählen Sie im Flow-Generator die + Schaltfläche und dann Aktion hinzufügen aus. Verwenden Sie die Aktion Skript ausführen des Excel Online (Business)-Connectors. Schließen Sie die Aktion mit den folgenden Werten ab.

    • Location: OneDrive for Business
    • Document Library: OneDrive
    • Datei: hr-interviews.xlsx (über den Dateibrowser ausgewählt)
    • Skript: Planen von Interviews Die abgeschlossene Skriptaktion ausführen, um Interviewdaten aus der Arbeitsmappe abzurufen.
  4. Fügen Sie eine Aktion hinzu, die die Aktion Erstellen einer Teams-Besprechung des Microsoft Teams-Connectors verwendet. Wenn Sie dynamische Inhalte aus dem Excel-Connector auswählen, wird für Ihren Flow ein For each-Block generiert. Schließen Sie den Connector mit den folgenden Werten ab.

    • Betreff: Contoso-Interview
    • Meldung: Nachricht (dynamischer Inhalt aus Skript ausführen)
    • Zeitzone: Pazifische Normalzeit
    • Startzeit: StartTime (dynamischer Inhalt aus Ausführungsskript)
    • Endzeit: FinishTime (dynamischer Inhalt aus Ausführungsskript)
    • Kalender-ID: Kalender
    • Erforderliche Teilnehmer: CandidateEmail ; InterviewerEmail (dynamischer Inhalt aus Skript ausführen - beachten Sie das ";", das die Werte trennt) Die abgeschlossene Teams-Aktion zum Planen von Besprechungen.
  5. Fügen Sie in demselben For each-Block eine weitere Aktion Skript ausführen hinzu. Verwenden Sie die folgenden Werte.

    • Location: OneDrive for Business
    • Document Library: OneDrive
    • Datei: hr-interviews.xlsx (über den Dateibrowser ausgewählt)
    • Skript: Aufzeichnen gesendeter Einladungen
    • invites: result (dynamischer Inhalt aus Skript ausführen)
  6. Speichern Sie den Flow. Der Flow-Designer sollte wie in der folgenden Abbildung aussehen.

    Ein Diagramm des abgeschlossenen Flusses, das zwei Schritte zeigt, die zu einem For each-Steuerelement und zwei Schritten innerhalb des For each-Steuerelements führen.

  7. Verwenden Sie die Schaltfläche Test auf der Flow-Editor-Seite, oder führen Sie den Flow über die Registerkarte Meine Flows aus. Achten Sie darauf, den Zugriff zuzulassen, wenn Sie dazu aufgefordert werden.

Schulungsvideo: Senden einer Teams-Besprechung aus Excel-Daten

Schauen Sie sich an, wie Sudhi Ramamurthy eine Version dieses Beispiels auf YouTube durchläuft. Seine Version verwendet ein stabileres Skript, das sich ändernde Spalten und veraltete Besprechungszeiten verarbeitet.