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.
- Ein Skript extrahiert Daten aus einer Tabelle und gibt ein Array von Objekten als JSON-Daten zurück.
- Die Daten werden dann an die Aktion Teams Erstellen einer Teams-Besprechung gesendet, um Einladungen zu senden.
- 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
Laden Sie die Beispielarbeitsmappe auf OneDrive herunter.
Öffnen Sie die Arbeitsmappe in Excel.
Ändern Sie mindestens eine der E-Mail-Adressen in Ihre eigene, damit Sie eine Einladung erhalten.
Erstellen der Skripts
- 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
}
Nennen Sie das Skript Schedule Interviews für den Flow.
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
}
- 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.
Erstellen Sie einen neuen Instant Cloud Flow.
Wählen Sie Manuell einen Flow auslösen und dann Erstellen aus.
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
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)
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)
- Drücken Sie zuerst Eingabe wechseln zum gesamten Array .
Speichern Sie den Flow. Der Flow-Designer sollte wie in der folgenden Abbildung aussehen.
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.
Office Scripts