Selezionare elementi in una presentazione

La selezione è il contenuto su cui è attivo lo stato attivo in una pagina di presentazione aperta, ad esempio un intervallo di testo evidenziato o una tabella. Questa guida descrive come ottenere e impostare la selezione in una presentazione attiva utilizzando Apps Script.

Uno script può accedere solo alla selezione dell'utente che lo esegue.

La selezione è uno snapshot di ciò che era quando è stato avviato lo script. Se l'utente fa clic e la selezione cambia durante l'esecuzione dello script, queste modifiche non verranno applicate.

Selezioni e tipo di selezione

Leggi la selezione utilizzando la classe Selection. La classe ha vari metodi per ottenere gli oggetti selezionati in base al tipo di oggetti selezionati.

L'enumerazione SelectionType rappresenta il tipo specifico di oggetti selezionati. Ad esempio, se l'utente ha selezionato del testo in una forma, il tipo di selezione è TEXT. In questo caso, puoi recuperare l'intervallo di testo selezionato utilizzando il metodo selection.getTextRange().

Puoi anche recuperare l'oggetto che contiene la selezione. Ad esempio, puoi recuperare la forma contenente il testo selezionato utilizzando selection.getPageElementRange().getPageElements()[0]. Allo stesso modo, la pagina che contiene la forma di inclusione è la pagina attiva corrente; per recuperare questa pagina, utilizza selection.getCurrentPage().

Leggere la selezione

Per leggere la selezione, utilizza il Presentation.getSelection() come mostrato nell'esempio seguente:

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

Leggere la pagina corrente

Per recuperare la Pagina corrente visualizzata dall' utente, utilizza i metodi getSelection() e getCurrentPage() come segue:

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

Tieni presente che la pagina corrente può essere uno dei seguenti tipi:

La pagina corrente può avere uno o più oggetti selezionati e SelectionType determina il tipo di selezione.

Leggere la selezione in base al tipo di selezione

L'esempio seguente mostra come utilizzare il tipo di selezione per leggere la selezione corrente in modo appropriato per il tipo.

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;
}

Leggere le selezioni di testo

Leggi la selezione di testo utilizzando il Selection.getTextRange(). Esistono due tipi di selezione di testo:

  • Selezione intervallo: se una forma contiene il testo "Hello" e "He" è selezionato, l'intervallo restituito ha startIndex=0 e endIndex=2.
  • Selezione cursore: se una forma contiene il testo "Hello" e il cursore si trova dopo "H" ("H|ello"), l'intervallo restituito è un intervallo vuoto con startIndex=1 e endIndex=1.

Modificare la selezione

Lo script può modificare la selezione dell'utente. Eventuali modifiche alla selezione apportate dallo script alla presentazione vengono applicate alle successive operazioni di selezione per la durata dell'esecuzione dello script.

Le modifiche alla selezione vengono applicate al browser dell'utente solo al termine dell'esecuzione dello script o quando viene chiamato Presentation.saveAndClose().

Selezionare la pagina corrente

Una pagina della presentazione attiva può essere selezionata come pagina corrente chiamando il selectAsCurrentPage(). Questo metodo rimuove qualsiasi elemento di pagina, pagina o selezione di testo precedente. Pertanto, l'utilizzo di questo metodo nella pagina corrente consente di deselezionare le selezioni correnti nella pagina. Ad esempio:

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
//

Selezionare un elemento di pagina

Per selezionare un elemento di pagina, utilizza il PageElement.select(). Inoltre, deseleziona gli elementi della pagina selezionati in precedenza.

I metodi select() e select(true) sono equivalenti.

Ad esempio:

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
//

Selezionare più elementi della pagina

Per aggiungere altri elementi della pagina alla selezione, utilizza il PageElement.select(false). Tutti gli elementi della pagina devono trovarsi nella pagina corrente.

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
//

Trasformare la selezione

Le modifiche apportate dallo script possono trasformare la selezione corrente, in modo che la selezione cambi in seguito alla modifica. Ad esempio:

  1. Supponiamo che tu abbia selezionato due forme, A e B.
  2. Poi lo script rimuove la forma A.
  3. Di conseguenza, la selezione viene trasformata in base alla modifica, in modo che venga selezionata solo la forma B.

L'esempio seguente mostra come la selezione può essere trasformata manipolando gli elementi della pagina selezionati.

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]
//

Selezionare testo

Il testo contenuto in una forma o in una cella di una tabella può essere selezionato utilizzando il TextRange.select(). Se il testo è contenuto in una forma, viene selezionata anche la forma. Se il testo è contenuto in una cella di una tabella, vengono selezionate sia la cella della tabella sia la tabella di inclusione.

Inoltre, imposta la pagina principale come pagina corrente.

Selezione intervallo in una forma

L'esempio seguente mostra come effettuare una selezione di intervallo all'interno del testo contenuto in una forma.

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
//

Selezione cursore in una forma

L'esempio seguente mostra come effettuare una selezione cursore all'interno del testo contenuto in una forma.

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
//

Selezione intervallo in una cella di una tabella

L'esempio seguente mostra come effettuare una selezione di intervallo all'interno del testo contenuto in una cella di una tabella.

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
//

Selezione cursore in TableCell

L'esempio seguente mostra come effettuare una selezione cursore all'interno del testo contenuto in una cella di una tabella.

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
//

Trasformazione della selezione con modifiche testuali

L'esempio seguente mostra come la selezione può essere trasformata modificando il testo selezionato.

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
//

Deseleziona

Non esistono metodi espliciti per deselezionare testo o elementi della pagina. Tuttavia, questo risultato può essere ottenuto utilizzando i metodi Page.selectAsCurrentPage() o pageElement.select().

Selezionare una pagina corrente

L'esempio seguente mostra come deselezionare le selezioni correnti in una pagina impostando la pagina come pagina corrente.

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();

Selezionare un elemento di pagina

L'esempio seguente mostra come deselezionare le selezioni correnti in una pagina selezionando un elemento della pagina, rimuovendo così tutti gli altri elementi dalla selezione.

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();