Einfügen von Folien in eine PowerPoint-Präsentation

Ein PowerPoint-Add-In kann Mithilfe der anwendungsspezifischen JavaScript-Bibliothek von PowerPoint Folien aus einer Präsentation in die aktuelle Präsentation einfügen. Sie können steuern, ob die eingefügten Folien die Formatierung der Quellpräsentation oder die Formatierung der Zielpräsentation beibehalten.

Die Folieneinfügungs-APIs werden hauptsächlich in Präsentationsvorlagenszenarien verwendet: Es gibt eine kleine Anzahl bekannter Präsentationen, die als Folienpools dienen, die vom Add-In eingefügt werden können. In einem solchen Szenario müssen Entweder Sie oder der Kunde eine Datenquelle erstellen und verwalten, die das Auswahlkriterium (z. B. Folientitel oder Bilder) mit Folien-IDs korreliert. Die APIs können auch in Szenarien verwendet werden, in denen der Benutzer Folien aus beliebigen Präsentationen einfügen kann, aber in diesem Szenario ist der Benutzer effektiv darauf beschränkt , alle Folien aus der Quellpräsentation einzufügen. Weitere Informationen hierzu finden Sie unter Auswählen der einzufügenden Folien .

Es gibt zwei Schritte zum Einfügen von Folien aus einer Präsentation in eine andere.

  1. Konvertieren Sie die Quellpräsentationsdatei (.pptx) in eine base64-formatierte Zeichenfolge.
  2. Verwenden Sie die insertSlidesFromBase64 -Methode, um eine oder mehrere Folien aus der Base64-Datei in die aktuelle Präsentation einzufügen.

Konvertieren der Quellpräsentation in base64

Es gibt viele Möglichkeiten, eine Datei in base64 zu konvertieren. Welche Programmiersprache und Bibliothek Sie verwenden und ob serverseitig oder clientseitig konvertiert werden soll, hängt von Ihrem Szenario ab. In den meisten Fällen führen Sie die Konvertierung in JavaScript clientseitig mithilfe eines FileReader-Objekts durch. Das folgende Beispiel zeigt diese Vorgehensweise.

  1. Beginnen Sie mit dem Abrufen eines Verweises auf die PowerPoint-Quelldatei. In diesem Beispiel verwenden wir ein <input> Steuerelement vom Typ file , um den Benutzer aufzufordern, eine Datei auszuwählen. Fügen Sie der Add-In-Seite das folgende Markup hinzu.

    <section>
        <p>Select a PowerPoint presentation from which to insert slides</p>
        <form>
            <input type="file" id="file" />
        </form>
    </section>
    

    Dieses Markup fügt der Seite die Benutzeroberfläche im folgenden Screenshot hinzu.

    Ein Eingabesteuerelement vom Typ HTML-Datei, dem ein Anweisungssatz mit dem Text

    Hinweis

    Es gibt viele andere Möglichkeiten, eine PowerPoint-Datei abzurufen. Wenn die Datei beispielsweise auf OneDrive oder SharePoint gespeichert ist, können Sie sie mithilfe von Microsoft Graph herunterladen. Weitere Informationen finden Sie unter Arbeiten mit Dateien in Microsoft Graph und Zugreifen auf Dateien mit Microsoft Graph.

  2. Fügen Sie dem JavaScript des Add-Ins den folgenden Code hinzu, um dem Ereignis des Eingabesteuerelements change eine Funktion zuzuweisen. (Sie erstellen die storeFileAsBase64 Funktion im nächsten Schritt.)

    $("#file").on("change", storeFileAsBase64);
    
  3. Fügen Sie den folgenden Code hinzu. Beachten Sie die folgenden Aspekte in diesem Code.

    • Die reader.readAsDataURL -Methode konvertiert die Datei in base64 und speichert sie in der reader.result -Eigenschaft. Wenn die Methode abgeschlossen ist, wird der onload Ereignishandler ausgelöst.
    • Der onload Ereignishandler schneidet Metadaten der codierten Datei ab und speichert die codierte Zeichenfolge in einer globalen Variablen.
    • Die base64-codierte Zeichenfolge wird global gespeichert, da sie von einer anderen Funktion gelesen wird, die Sie in einem späteren Schritt erstellen.
    let chosenFileBase64;
    
    async function storeFileAsBase64() {
        const reader = new FileReader();
    
        reader.onload = async (event) => {
            const startIndex = reader.result.toString().indexOf("base64,");
            const copyBase64 = reader.result.toString().substr(startIndex + 7);
    
            chosenFileBase64 = copyBase64;
        };
    
        const myFile = document.getElementById("file") as HTMLInputElement;
        reader.readAsDataURL(myFile.files[0]);
    }
    

Einfügen von Folien mit insertSlidesFromBase64

Ihr Add-In fügt Folien aus einer anderen PowerPoint-Präsentation mit der Presentation.insertSlidesFromBase64-Methode in die aktuelle Präsentation ein. Es folgt ein einfaches Beispiel, in dem alle Folien aus der Quellpräsentation am Anfang der aktuellen Präsentation eingefügt werden und die eingefügten Folien die Formatierung der Quelldatei beibehalten. Beachten Sie, dass chosenFileBase64 eine globale Variable ist, die eine Base64-codierte Version einer PowerPoint-Präsentationsdatei enthält.

async function insertAllSlides() {
  await PowerPoint.run(async function(context) {
    context.presentation.insertSlidesFromBase64(chosenFileBase64);
    await context.sync();
  });
}

Sie können einige Aspekte des Einfügeergebnisses steuern, z. B. wo die Folien eingefügt werden und ob sie die Quell- oder Zielformatierung erhalten, indem Sie ein InsertSlideOptions-Objekt als zweiten Parameter an insertSlidesFromBase64übergeben. Es folgt ein Beispiel. Bei diesem Code ist Folgendes zu beachten:

  • Es gibt zwei mögliche Werte für die formatting Eigenschaft: "UseDestinationTheme" und "KeepSourceFormatting". Optional können Sie die InsertSlideFormatting Enumeration (z. PowerPoint.InsertSlideFormatting.useDestinationThemeB. ) verwenden.
  • Die Funktion fügt die Folien aus der Quellpräsentation unmittelbar nach der durch die targetSlideId -Eigenschaft angegebenen Folie ein. Der Wert dieser Eigenschaft ist eine Zeichenfolge aus einer von drei möglichen Formen: nnn#, #mmmmmmmmm oder nnn#mmmmmmmmmmm, wobei nnn die ID der Folie (in der Regel 3 Ziffern) und mmmmmmmmmmm die Erstellungs-ID der Folie (in der Regel 9 Ziffern) ist. Beispiele hierfür sind 267#763315295, 267#und #763315295.
async function insertSlidesDestinationFormatting() {
  await PowerPoint.run(async function(context) {
    context.presentation
    .insertSlidesFromBase64(chosenFileBase64,
                            {
                                formatting: "UseDestinationTheme",
                                targetSlideId: "267#"
                            }
                          );
    await context.sync();
  });
}

Natürlich kennen Sie die ID oder die Erstellungs-ID der Zielfolie in der Regel nicht zur Codierungszeit. In der Regel fordert ein Add-In die Benutzer auf, die Zielfolie auszuwählen. Die folgenden Schritte zeigen, wie Sie die nnn-ID# der aktuell ausgewählten Folie abrufen und als Zielfolie verwenden.

  1. Erstellen Sie mithilfe der Office.context.document.getSelectedDataAsync-Methode der allgemeinen JavaScript-APIs eine Funktion, die die ID der aktuell ausgewählten Folie abruft. Es folgt ein Beispiel. Beachten Sie, dass der Aufruf von getSelectedDataAsync in eine Zusage-rückgabende Funktion eingebettet ist. Weitere Informationen dazu, warum und wie Dies geschieht, finden Sie unter Wrap Common-APIs in Promise-Returning-Funktionen.

    function getSelectedSlideID() {
      return new OfficeExtension.Promise<string>(function (resolve, reject) {
        Office.context.document.getSelectedDataAsync(Office.CoercionType.SlideRange, function (asyncResult) {
          try {
            if (asyncResult.status === Office.AsyncResultStatus.Failed) {
              reject(console.error(asyncResult.error.message));
            } else {
              resolve(asyncResult.value.slides[0].id);
            }
          }
          catch (error) {
            reject(console.log(error));
          }
        });
      })
    }
    
  2. Rufen Sie Ihre neue Funktion in powerPoint.run() der Standard-Funktion auf, und übergeben Sie die zurückgegebene ID (verkettet mit dem Symbol "#") als Wert der targetSlideId -Eigenschaft des InsertSlideOptions Parameters. Es folgt ein Beispiel.

    async function insertAfterSelectedSlide() {
        await PowerPoint.run(async function(context) {
    
            const selectedSlideID = await getSelectedSlideID();
    
            context.presentation.insertSlidesFromBase64(chosenFileBase64, {
                formatting: "UseDestinationTheme",
                targetSlideId: selectedSlideID + "#"
            });
    
            await context.sync();
        });
    }
    

Auswählen der einzufügenden Folien

Sie können auch den Parameter InsertSlideOptions verwenden, um zu steuern, welche Folien aus der Quellpräsentation eingefügt werden. Dazu weisen Sie der -Eigenschaft ein Array der Folien-IDs der sourceSlideIds Quellpräsentation zu. Im folgenden Beispiel werden vier Folien eingefügt. Beachten Sie, dass jede Zeichenfolge im Array einem oder einem anderen muster folgen muss, das für die targetSlideId -Eigenschaft verwendet wird.

async function insertAfterSelectedSlide() {
    await PowerPoint.run(async function(context) {
        const selectedSlideID = await getSelectedSlideID();
        context.presentation.insertSlidesFromBase64(chosenFileBase64, {
            formatting: "UseDestinationTheme",
            targetSlideId: selectedSlideID + "#",
            sourceSlideIds: ["267#763315295", "256#", "#926310875", "1270#"]
        });

        await context.sync();
    });
}

Hinweis

Die Folien werden in derselben relativen Reihenfolge eingefügt, in der sie in der Quellpräsentation angezeigt werden, unabhängig von der Reihenfolge, in der sie im Array angezeigt werden.

Es gibt keine praktische Möglichkeit, wie Benutzer die ID oder Die Erstellungs-ID einer Folie in der Quellpräsentation ermitteln können. Aus diesem Grund können Sie die sourceSlideIds -Eigenschaft wirklich nur verwenden, wenn Sie die Quell-IDs zur Codierungszeit kennen oder Ihr Add-In sie zur Laufzeit aus einer Datenquelle abrufen kann. Da benutzern nicht erwartet werden kann, dass sie sich Folien-IDs merken, benötigen Sie auch eine Möglichkeit, es dem Benutzer zu ermöglichen, Folien auszuwählen, z. B. nach Titel oder nach einem Bild, und dann jeden Titel oder jedes Bild mit der ID der Folie korrelieren.

Dementsprechend wird die sourceSlideIds -Eigenschaft hauptsächlich in Präsentationsvorlagenszenarien verwendet: Das Add-In ist für die Arbeit mit einem bestimmten Satz von Präsentationen konzipiert, die als Folienpools dienen, die eingefügt werden können. In einem solchen Szenario müssen Entweder Sie oder der Kunde eine Datenquelle erstellen und verwalten, die ein Auswahlkriterium (z. B. Titel oder Bilder) mit Folien-IDs oder Folienerstellungs-IDs korreliert, die aus dem Satz möglicher Quellpräsentationen erstellt wurden.