Freigeben über


PowerPoint-Add-Ins

Mit PowerPoint-Add-Ins können Sie ansprechende Lösungen für die Präsentationen Ihrer Benutzer auf unterschiedlichen Plattformen wie Windows, iPad, Mac und im Browser erstellen. Sie können zwei Typen von PowerPoint-Add-Ins erstellen:

Szenarien mit PowerPoint-Add-Ins

Die Codebeispiele in diesem Artikel veranschaulichen einige grundlegende Aufgaben, die beim Entwickeln von Add-Ins für PowerPoint nützlich sein können.

Fügen Sie eine neue Folie hinzu, und navigieren Sie dann zu dieser Folie.

Im folgenden Codebeispiel ruft die Funktion die addAndNavigateToNewSlideSlideCollection.add-Methode auf, um der Präsentation eine neue Folie hinzuzufügen. Die Funktion ruft dann die Presentation.setSelectedSlides-Methode auf, um zur neuen Folie zu navigieren.

async function addAndNavigateToNewSlide() {
  // Adds a new slide then navigates to it.
  await PowerPoint.run(async (context) => {
    const slideCountResult = context.presentation.slides.getCount();
    context.presentation.slides.add();
    await context.sync();

    const newSlide = context.presentation.slides.getItemAt(slideCountResult.value);
    newSlide.load("id");
    await context.sync();

    console.log(`Added slide - ID: ${newSlide.id}`);

    // Navigate to the new slide.
    context.presentation.setSelectedSlides([newSlide.id]);
    await context.sync();
  });
}

Im folgenden Codebeispiel ruft die Funktion die getSelectedSlidesPresentation.getSelectedSlides-Methode auf, um die ausgewählten Folien abzurufen, und protokolliert dann deren IDs. Die Funktion kann dann auf die aktuelle Folie (oder die erste Folie aus der Auswahl) reagieren.

async function getSelectedSlides() {
  // Gets the ID of the current slide (or selected slides).
  await PowerPoint.run(async (context) => {
    const selectedSlides = context.presentation.getSelectedSlides();
    selectedSlides.load("items/id");
    await context.sync();

    if (selectedSlides.items.length === 0) {
      console.warn("No slides were selected.");
      return;
    }

    console.log("IDs of selected slides:");
    selectedSlides.items.forEach(item => {
      console.log(item.id);
    });

    // Navigate to first selected slide.
    const currentSlide = selectedSlides.items[0];
    console.log(`Navigating to slide with ID ${currentSlide.id} ...`);
    context.presentation.setSelectedSlides([currentSlide.id]);

    // Perform actions on current slide...
  });
}

Im folgenden Codebeispiel ruft die Funktion die goToSlideByIndexPresentation.setSelectedSlides -Methode auf, um zur ersten Folie in der Präsentation zu navigieren, die den Index 0 aufweist. Der maximale Folienindex, zu dem Sie in diesem Beispiel navigieren können, ist slideCountResult.value - 1.

async function goToSlideByIndex() {
  await PowerPoint.run(async (context) => {
    // Gets the number of slides in the presentation.
    const slideCountResult = context.presentation.slides.getCount();
    await context.sync();

    if (slideCountResult.value === 0) {
      console.warn("There are no slides.");
      return;
    }

    const slide = context.presentation.slides.getItemAt(0); // First slide
    //const slide = context.presentation.slides.getItemAt(slideCountResult.value - 1); // Last slide
    slide.load("id");
    await context.sync();

    console.log(`Slide ID: ${slide.id}`);

    // Navigate to the slide.
    context.presentation.setSelectedSlides([slide.id]);
    await context.sync();
  });
}

Abrufen der URL der Präsentation

Im folgenden Codebeispiel ruft die getFileUrl Funktion die Document.getFileProperties-Methode auf, um die URL der Präsentationsdatei abzurufen.

function getFileUrl() {
  // Gets the URL of the current file.
  Office.context.document.getFilePropertiesAsync(function (asyncResult) {
    const fileUrl = asyncResult.value.url;
    if (fileUrl === "") {
      console.warn("The file hasn't been saved yet. Save the file and try again.");
    } else {
      console.log(`File URL: ${fileUrl}`);
    }
  });
}

Erstellen einer Präsentation

Ihr Add-In kann unabhängig von der PowerPoint-Instanz, in dem das Add-In derzeit ausgeführt wird, eine neue Präsentation erstellen. Der PowerPoint-Namespace verfügt über die createPresentation-Methode für diesen Zweck. Wenn diese Methode aufgerufen wird, wird die neue Präsentation sofort geöffnet und in einer neuer Instanz von PowerPoint angezeigt. Das Add-In bleibt geöffnet und wird mit der vorherigen Präsentation ausgeführt.

PowerPoint.createPresentation();

Die Methode createPresentation kann auch eine Kopie einer vorhandenen Präsentation erstellen. Die -Methode akzeptiert eine Base64-codierte Zeichenfolgendarstellung einer .pptx Datei als optionalen Parameter. Die daraus resultierende Präsentation ist eine Kopie dieser Datei, vorausgesetzt, dass das Zeichenfolgenargument eine gültige PPTX-Datei ist. Die FileReader-Klasse kann verwendet werden, um eine Datei in die erforderliche Base64-codierte Zeichenfolge zu konvertieren, wie im folgenden Beispiel veranschaulicht.

const myFile = document.getElementById("file") as HTMLInputElement;
const reader = new FileReader();

reader.onload = function (event) {
    // Strip off the metadata before the Base64-encoded string.
    const startIndex = reader.result.toString().indexOf("base64,");
    const copyBase64 = reader.result.toString().substr(startIndex + 7);

    PowerPoint.createPresentation(copyBase64);
};

// Read in the file as a data URL so we can parse the Base64-encoded string.
reader.readAsDataURL(myFile.files[0]);

Ein vollständiges Codebeispiel, das eine HTML-Implementierung enthält, finden Sie unter Erstellen einer Präsentation.

Ermitteln der aktiven Ansicht der Präsentation und Behandeln des ActiveViewChanged-Ereignisses

Wenn Sie ein Inhalts-Add-In erstellen, müssen Sie die aktive Ansicht der Präsentation abrufen und das Document.ActiveViewChanged-Ereignis im Rahmen Ihres Office.onReady-Aufrufs behandeln.

Hinweis

In PowerPoint im Web wird das Ereignis nie ausgelöst, da der Document.ActiveViewChangedBildschirmpräsentationsmodus als neue Sitzung behandelt wird. In diesem Fall muss das Add-In die aktive Ansicht beim Laden abrufen, wie im folgenden Codebeispiel beschrieben.

Beachten Sie Folgendes zum Codebeispiel:

  • Die getActiveFileView Funktion ruft die Document.getActiveViewAsync-Methode auf, um zurückzugeben, ob die aktuelle Ansicht der Präsentation "bearbeiten" (eine der Ansichten, in denen Sie Folien bearbeiten können, z. B. Normal, Foliensortierung oder Gliederung) oder "lesen" (Bildschirmpräsentation oder Leseansicht), dargestellt durch die ActiveView-Enumeration .
  • Die registerActiveViewChanged Funktion ruft die Document.addHandlerAsync-Methode auf, um einen Handler für das Document.ActiveViewChanged Ereignis zu registrieren.
  • Zum Anzeigen von Informationen wird in diesem Beispiel die showNotification -Funktion verwendet, die in den Projektvorlagen für Visual Studio Office-Add-Ins enthalten ist. Wenn Sie Visual Studio nicht zum Entwickeln Ihres Add-Ins verwenden, müssen Sie die showNotification Funktion durch Ihren eigenen Code ersetzen.
// General Office.onReady function. Called after the add-in loads and Office JS is initialized.
Office.onReady(() => {
  // Get whether the current view is edit or read.
  const currentView = getActiveFileView();

  // Register the active view changed handler.
  registerActiveViewChanged();

  // Render the content based off of the current view.
  if (currentView === Office.ActiveView.Read) {
      // Handle read view.
      console.log('Current view is read.');
      // You can add any specific logic for the read view here.
  } else {
      // Handle edit view.
      console.log('Current view is edit.');
      // You can add any specific logic for the edit view here.
  }
});

// Gets the active file view.
function getActiveFileView() {
    console.log('Getting active file view...');
    Office.context.document.getActiveViewAsync(function (result) {
        if (result.status === Office.AsyncResultStatus.Succeeded) {
            console.log('Active view:', result.value);
            return result.value;
        } else {
            console.error('Error getting active view:', result.error.message);
            showNotification('Error:', result.error.message);
            return null;
        }
    });
}

// Registers the ActiveViewChanged event.
function registerActiveViewChanged() {
    console.log('Registering ActiveViewChanged event handler...');
    Office.context.document.addHandlerAsync(
        Office.EventType.ActiveViewChanged,
        activeViewHandler,
        function (result) {
            if (result.status === Office.AsyncResultStatus.Failed) {
                console.error('Failed to register active view changed handler:', result.error.message);
                showNotification('Error:', result.error.message);
            } else {
                console.log('Active view changed handler registered successfully.');
            }
        });
}

// ActiveViewChanged event handler.
function activeViewHandler(eventArgs) {
    console.log('Active view changed:', JSON.stringify(eventArgs));
    showNotification('Active view changed', `The active view has changed to: ${eventArgs.activeView}`);
    // You can add logic here based on the new active view.
}

Siehe auch