Selezione di elementi all'interno di una presentazione

Per selezione si intende l'elemento selezionato in una pagina di presentazione aperta, come un intervallo di testo evidenziato o una tabella. Questa guida spiega come ottenere e impostare la selezione in una presentazione attiva utilizzando Apps Script.

La selezione è un'istantanea di ciò che era all'avvio dello script. Se l'utente clic e la selezione cambia mentre lo script è in esecuzione, queste modifiche non verrà riportato.

Selezioni e tipo di selezione

Puoi leggere la selezione utilizzando Selezione . La classe dispone di vari metodi per recuperare 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; continua esempio precedente, puoi recuperare la forma contenente il testo selezionato utilizzando selection.getPageElementRange().getPageElements()[0]. Analogamente, la pagina contiene la forma che lo contiene è la pagina attiva corrente; a recupera la pagina, usa selection.getCurrentPage().

Lettura della selezione in corso...

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

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

Lettura della pagina corrente

Per recuperare la pagina corrente che l'utente sta visualizzando, utilizza getSelection() e getCurrentPage() come segue:

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

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

Nella pagina corrente possono essere selezionati uno o più oggetti e il valore SelectionType determina il tipo di selezione.

Lettura della selezione in base al tipo di selezione

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

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

Lettura delle selezioni del testo

Puoi leggere la selezione del testo utilizzando Metodo Selection.getTextRange(). Sono disponibili due tipi di selezione del testo:

  • Selezione dell'intervallo: se una forma contiene il testo "Ciao" e "Lui". sono selezionato, l'intervallo restituito ha startIndex=0 ed endIndex=2.
  • Selezione del cursore: se una forma contiene il testo "Hello" e il cursore è dopo "H" ("H|ello"), l'intervallo restituito è vuoto con startIndex=1 ed endIndex=1.

Modifica della selezione

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

Le modifiche alla selezione vengono applicate al browser dell'utente solo dopo lo script l'esecuzione viene completata o quando viene chiamato Presentation.saveAndClose().

Selezione della pagina corrente

Una pagina della presentazione attiva può essere selezionata come pagina corrente richiamando il metodo selectAsCurrentPage(). Questo metodo rimuove qualsiasi elemento precedente della pagina, pagina o selezione di testo. Quindi, utilizzando questo metodo nella pagina corrente consente di deselezionare le selezioni correnti nella . 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 in una pagina, utilizza il metodo PageElement.select(). In questo modo, vengono deselezionati anche eventuali elementi della pagina selezionati in precedenza.

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 di pagina

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

slide/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 eseguite dallo script possono trasformare la selezione corrente, ciò che hai selezionato cambia in seguito alla modifica. Ad esempio:

  1. Supponi di avere selezionato due forme A e B.
  2. Successivamente, lo script rimuove la forma A.
  3. Di conseguenza, la selezione viene trasformata in base alla modifica in modo che sia selezionata la forma B.

L'esempio seguente mostra come è possibile trasformare la selezione manipolando elementi della pagina selezionati.

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

Selezione del testo

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

In questo modo viene impostata anche la pagina principale come pagina corrente.

Selezione di un intervallo in una forma

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

slide/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 del cursore in una forma

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

slide/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 di intervalli in una cella di tabella

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

slide/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 del cursore in TableCell

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

slide/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 testo selezionato.

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

Deselezione in corso...

Non sono disponibili metodi espliciti per deselezionare il testo o gli elementi della pagina. Tuttavia, questo il risultato può essere ottenuto utilizzando l'Page.selectAsCurrentPage() pageElement.select() metodi.

Seleziona una pagina corrente

L'esempio seguente mostra come deselezionare le eventuali selezioni correnti in una pagina impostandola come pagina corrente.

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

Seleziona un elemento di pagina

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

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