Elemente in einer Präsentation auswählen

Die Auswahl ist das, was derzeit auf einer geöffneten Präsentationsseite ausgewählt ist, z. B. ein markierter Textabschnitt oder eine Tabelle. In dieser Anleitung erfahren Sie, wie Sie die Auswahl in einer aktiven Präsentation mit Apps Script abrufen und festlegen.

Die Auswahl ist eine Momentaufnahme des Inhalts zum Zeitpunkt des Startens des Scripts. Wenn der Nutzer während der Ausführung des Scripts klickt und die Auswahl ändert, werden diese Änderungen nicht berücksichtigt.

Auswahl und Auswahltyp

Sie können die Auswahl mit der Klasse Selection lesen. Die Klasse bietet verschiedene Methoden, die ausgewählten Objekte basierend auf dem Typ der ausgewählten Objekte abzurufen.

Die SelectionType-Enumeration steht für den bestimmten Typ der ausgewählten Objekte. Wenn der Nutzer beispielsweise Text in einer Form ausgewählt hat, ist der Auswahltyp TEXT. In diesem Fall können Sie den ausgewählten Textbereich mit der Methode selection.getTextRange() abrufen.

Sie können auch das Objekt abrufen, das die Auswahl enthält. Im Beispiel oben könnten Sie mit selection.getPageElementRange().getPageElements()[0] die Form abrufen, die den ausgewählten Text enthält. Ebenso ist die Seite, die die einschließende Form enthält, die aktuell aktive Seite. Verwenden Sie selection.getCurrentPage(), um die Seite abzurufen.

Auswahl wird gelesen

Mit der Methode Presentation.getSelection() können Sie die Auswahl lesen, wie im folgenden Beispiel gezeigt:

slides/selection/selection.gs
const selection = SlidesApp.getActivePresentation().getSelection();

Aktuelle Seite lesen

Um die aktuelle Seite abzurufen, die der Nutzer gerade aufruft, verwende die Methoden getSelection() und getCurrentPage() so:

slides/selection/selection.gs
const currentPage = SlidesApp.getActivePresentation().getSelection().getCurrentPage();

Die aktuelle Seite kann einen der folgenden Typen haben:

Auf der aktuellen Seite können ein oder mehrere Objekte ausgewählt sein. Der Typ der Auswahl wird durch den „SelectionType“ bestimmt.

Auswahl je nach Auswahltyp lesen

Das folgende Beispiel zeigt, wie Sie mit dem Auswahltyp die aktuelle Auswahl auf typgerechte Weise lesen können.

slides/selection/selection.gs
const selection = SlidesApp.getActivePresentation().getSelection();
const selectionType = selection.getSelectionType();
let currentPage;
switch (selectionType) {
  case SlidesApp.SelectionType.NONE:
    console.log('Nothing selected');
    break;
  case SlidesApp.SelectionType.CURRENT_PAGE:
    currentPage = selection.getCurrentPage();
    console.log('Selection is a page with ID: ' + currentPage.getObjectId());
    break;
  case SlidesApp.SelectionType.PAGE_ELEMENT:
    const pageElements = selection.getPageElementRange().getPageElements();
    console.log('There are ' + pageElements.length + ' page elements selected.');
    break;
  case SlidesApp.SelectionType.TEXT:
    const tableCellRange = selection.getTableCellRange();
    if (tableCellRange !== null) {
      const tableCell = tableCellRange.getTableCells()[0];
      console.log('Selected text is in a table at row ' +
        tableCell.getRowIndex() + ', column ' +
        tableCell.getColumnIndex());
    }
    const textRange = selection.getTextRange();
    if (textRange.getStartIndex() === textRange.getEndIndex()) {
      console.log('Text cursor position: ' + textRange.getStartIndex());
    } else {
      console.log('Selection is a text range from: ' + textRange.getStartIndex() + ' to: ' +
        textRange.getEndIndex() + ' is selected');
    }
    break;
  case SlidesApp.SelectionType.TABLE_CELL:
    const tableCells = selection.getTableCellRange().getTableCells();
    const table = tableCells[0].getParentTable();
    console.log('There are ' + tableCells.length + ' table cells selected.');
    break;
  case SlidesApp.SelectionType.PAGE:
    const pages = selection.getPageRange().getPages();
    console.log('There are ' + pages.length + ' pages selected.');
    break;
  default:
    break;
}

Textauswahlen vorlesen

Sie können die Textauswahl mit der Methode Selection.getTextRange() lesen. Es gibt zwei Arten der Textauswahl:

  • Bereichsauswahl: Wenn eine Form den Text „Hallo“ enthält und „He“ ausgewählt ist, hat der zurückgegebene Bereich startIndex=0 und endIndex=2.
  • Cursorauswahl: Wenn eine Form den Text „Hallo“ enthält und sich der Cursor nach „H“ befindet („H|allo“), ist der zurückgegebene Bereich leer und hat die Start- und Endindexe 1.

Auswahl ändern

Das Script kann die Auswahl des Nutzers ändern. Alle Auswahländerungen, die das Script an der Präsentation vornimmt, werden während der Ausführung des Scripts in nachfolgenden Auswahlvorgängen berücksichtigt.

Die Auswahländerungen werden erst nach Abschluss der Scriptausführung oder beim Aufrufen von Presentation.saveAndClose() im Browser des Nutzers angezeigt.

Aktuelle Seite auswählen

Eine Seite in der aktiven Präsentation kann als aktuelle Seite ausgewählt werden, indem die Methode selectAsCurrentPage() aufgerufen wird. Mit dieser Methode werden alle vorherigen Seitenelemente, Seiten oder Textauswahlen entfernt. Mit dieser Methode können Sie auf der aktuellen Seite alle aktuellen Auswahlen aufheben. Beispiel:

slides/selection/selection.gs
// Select the first slide as the current page selection and remove any previous selection.
  const selection = SlidesApp.getActivePresentation().getSelection();
  const slide = SlidesApp.getActivePresentation().getSlides()[0];
  slide.selectAsCurrentPage();
// State of selection
//
// selection.getSelectionType() = SlidesApp.SelectionType.CURRENT_PAGE
// selection.getCurrentPage() = slide
//

Seitenelement auswählen

Verwenden Sie die Methode PageElement.select(), um ein Seitenelement auf einer Seite auszuwählen. Dadurch wird auch die Auswahl aller zuvor ausgewählten Seitenelemente aufgehoben.

Beispiel:

Slides/selection/selection.gs
  const slide = SlidesApp.getActivePresentation().getSlides()[0];
  const pageElement = slide.getPageElements()[0];
  // Only select this page element and remove any previous selection.
  pageElement.select();
// State of selection
//
// selection.getSelectionType() = SlidesApp.SelectionType.PAGE_ELEMENT
// selection.getCurrentPage() = slide
// selection.getPageElementRange().getPageElements()[0] = pageElement
//

Mehrere Seitenelemente auswählen

Mit der Methode PageElement.select(false) können Sie zusätzliche Seitenelemente an die Auswahl anhängen. Alle Seitenelemente müssen sich auf der aktuellen Seite befinden.

slides/selection/selection.gs
  const slide = SlidesApp.getActivePresentation().getSlides()[0];
  // First select the slide page, as the current page selection.
  slide.selectAsCurrentPage();
  // Then select all the page elements in the selected slide page.
  const pageElements = slide.getPageElements();
  for (let i = 0; i < pageElements.length; i++) {
    pageElements[i].select(false);
  }
// State of selection
//
// selection.getSelectionType() = SlidesApp.SelectionType.PAGE_ELEMENT
// selection.getCurrentPage() = slide
// selection.getPageElementRange().getPageElements() = pageElements
//

Auswahl transformieren

Durch Änderungen, die Ihr Skript durchführt, kann die aktuelle Auswahl transformiert werden, sodass sich die ausgewählten Elemente infolge der Bearbeitung ändern. Beispiel:

  1. Angenommen, Sie haben zwei Formen A und B ausgewählt.
  2. Als Nächstes entfernt Ihr Script Form A.
  3. Dadurch wird die Auswahl anhand der Änderung transformiert, sodass nur Form B ausgewählt ist.

Das folgende Beispiel zeigt, wie die Auswahl durch Manipulation ausgewählter Seitenelemente transformiert werden kann.

slides/selection/selection.gs
  const slide = SlidesApp.getActivePresentation().getSlides()[0];
  const shape1 = slide.getPageElements()[0].asShape();
  const shape2 = slide.getPageElements()[1].asShape();
  // Select both the shapes.
  shape1.select();
  shape2.select(false);
  // State of selection
  //
  // selection.getSelectionType() = SlidesApp.SelectionType.PAGE_ELEMENT
  // selection.getCurrentPage() = slide
  // selection.getPageElementRange().getPageElements() = [shape1, shape2]
  //
  // Remove one shape.
  shape2.remove();
// State of selection
//
// selection.getSelectionType() = SlidesApp.SelectionType.PAGE_ELEMENT
// selection.getCurrentPage() = slide
// selection.getPageElementRange().getPageElements() = [shape1]
//

Text auswählen

Text in einer Form oder in einer Tabellenzelle kann mit der Methode TextRange.select() ausgewählt werden. Wenn der Text in einer Form enthalten ist, wird diese Form ebenfalls ausgewählt. Wenn sich der Text in einer Tabellenzelle befindet, werden sowohl die Tabellenzelle als auch die umgebende Tabelle ausgewählt.

Dadurch wird auch die übergeordnete Seite als aktuelle Seite festgelegt.

Bereichsauswahl in einer Form

Im folgenden Beispiel wird gezeigt, wie Sie einen Bereich in Text auswählen, der in einer Form enthalten ist.

slides/selection/selection.gs
  const slide = SlidesApp.getActivePresentation().getSlides()[0];
  const shape = slide.getPageElements()[0].asShape();
  shape.getText().setText('Hello');
  // Range selection: Select the text range 'He'.
  shape.getText().getRange(0, 2).select();
// State of selection
//
// selection.getSelectionType() = SlidesApp.SelectionType.TEXT
// selection.getCurrentPage() = slide
// selection.getPageElementRange().getPageElements()[0] = shape
// selection.getTextRange().getStartIndex() = 0
// selection.getTextRange().getEndIndex() = 2
//

Cursorauswahl in einer Form

Das folgende Beispiel zeigt, wie Sie eine Cursorauswahl in Text in einer Form treffen.

slides/selection/selection.gs
  const slide = SlidesApp.getActivePresentation().getSlides()[0];
  const shape = slide.getPageElements()[0].asShape();
  shape.getText().setText('Hello');
  // Cursor selection: Place the cursor after 'H' like 'H|ello'.
  shape.getText().getRange(1, 1).select();
// State of selection
//
// selection.getSelectionType() = SlidesApp.SelectionType.TEXT
// selection.getCurrentPage() = slide
// selection.getPageElementRange().getPageElements()[0] = shape
// selection.getTextRange().getStartIndex() = 1
// selection.getTextRange().getEndIndex() = 1
//

Bereichsauswahl in einer Tabellenzelle

Im folgenden Beispiel wird gezeigt, wie Sie einen Bereich in einem Text auswählen, der in einer Tabellenzelle enthalten ist.

slides/selection/selection.gs
  const slide = SlidesApp.getActivePresentation().getSlides()[0];
  const table = slide.getPageElements()[0].asTable();
  const tableCell = table.getCell(0, 1);
  tableCell.getText().setText('Hello');
  // Range selection: Select the text range 'He'.
  tableCell.getText().getRange(0, 2).select();
// State of selection
//
// selection.getSelectionType() = SlidesApp.SelectionType.TEXT
// selection.getCurrentPage() = slide
// selection.getPageElementRange().getPageElements()[0] = table
// selection.getTableCellRange().getTableCells()[0] = tableCell
// selection.getTextRange().getStartIndex() = 0
// selection.getTextRange().getEndIndex() = 2
//

Cursorauswahl in TableCell

Das folgende Beispiel zeigt, wie Sie eine Cursorauswahl in Text in einer Tabellenzelle vornehmen.

slides/selection/selection.gs
  const slide = SlidesApp.getActivePresentation().getSlides()[0];
  const table = slide.getPageElements()[0].asTable();
  const tableCell = table.getCell(0, 1);
  tableCell.getText().setText('Hello');
  // Cursor selection: Place the cursor after 'H' like 'H|ello'.
  tableCell.getText().getRange(1, 1).select();
// State of selection
//
// selection.getSelectionType() = SlidesApp.SelectionType.TEXT
// selection.getCurrentPage() = slide
// selection.getPageElementRange().getPageElements()[0] = table
// selection.getTableCellRange().getTableCells()[0] = tableCell
// selection.getTextRange().getStartIndex() = 1
// selection.getTextRange().getEndIndex() = 1
//

Auswahltransformation mit Textänderungen

Das folgende Beispiel zeigt, wie die Auswahl durch Bearbeiten des ausgewählten Texts transformiert werden kann.

slides/selection/selection.gs
  const slide = SlidesApp.getActivePresentation().getSlides()[0];
  const shape = slide.getPageElements()[0].asShape();
  const textRange = shape.getText();
  textRange.setText('World');
  // Select all the text 'World'.
  textRange.select();
  // State of selection
  //
  // selection.getSelectionType() = SlidesApp.SelectionType.TEXT
  // selection.getCurrentPage() = slide
  // selection.getPageElementRange().getPageElements()[0] = shape
  // selection.getTextRange().getStartIndex() = 0
  // selection.getTextRange().getEndIndex() = 6
  //
  // Add some text to the shape, and the selection will be transformed.
  textRange.insertText(0, 'Hello ');

// State of selection
//
// selection.getSelectionType() = SlidesApp.SelectionType.TEXT
// selection.getCurrentPage() = slide
// selection.getPageElementRange().getPageElements()[0] = shape
// selection.getTextRange().getStartIndex() = 0
// selection.getTextRange().getEndIndex() = 12
//

Auswahl aufheben

Es gibt keine expliziten Methoden, um die Auswahl von Text oder Seitenelementen aufzuheben. Dieses Ergebnis kann jedoch mit den Methoden Page.selectAsCurrentPage() oder pageElement.select() erreicht werden.

Aktuelle Seite auswählen

Im folgenden Beispiel wird gezeigt, wie Sie alle aktuellen Auswahlen auf einer Seite aufheben, indem Sie diese Seite als aktuelle Seite festlegen.

slides/selection/selection.gs
// Unselect one or more page elements already selected.
//
// In case one or more page elements in the first slide are selected, setting the
// same (or any other) slide page as the current page would do the unselect.
//
  const slide = SlidesApp.getActivePresentation().getSlides()[0];
  slide.selectAsCurrentPage();

Seitenelement auswählen

Im folgenden Beispiel wird gezeigt, wie Sie die aktuelle Auswahl auf einer Seite aufheben, indem Sie ein Seitenelement auswählen und so alle anderen Elemente aus der Auswahl entfernen.

slides/selection/selection.gs
// Unselect one or more page elements already selected.
//
// In case one or more page elements in the first slide are selected,
// selecting any pageElement in the first slide (or any other pageElement) would
// do the unselect and select that pageElement.
//
  const slide = SlidesApp.getActivePresentation().getSlides()[0];
  slide.getPageElements()[0].select();