Wybieranie elementów w prezentacji

Wybór to dowolny element wybrany aktualnie na otwartej stronie prezentacji, np. rozpiętość wyróżnionego tekstu lub tabela. Ten przewodnik pokazuje, jak pobrać i ustawić wybór w aktywnej prezentacji za pomocą Apps Script.

Wybrany wybór to migawka pokazujące, co było w momencie uruchomienia skryptu. Jeśli użytkownik kliknie element, a wybór zostanie zmieniony w czasie działania skryptu, zmiany te nie zostaną odzwierciedlone.

Wybór i typ wyboru

Wybór możesz odczytać, korzystając z klasy Selection (Wybór). Klasa ma różne metody pobierania wybranych obiektów w zależności od ich typu.

Wyliczenie SelectionType reprezentuje konkretny typ wybranych obiektów. Jeśli na przykład użytkownik zaznaczył tekst w kształcie, typem wyboru będzie TEKST. W takim przypadku możesz pobrać zaznaczony zakres tekstu za pomocą metody selection.getTextRange().

Możesz też pobrać obiekt zawierający zaznaczony tekst. W przykładzie powyżej możesz pobrać kształt zawierający zaznaczony tekst za pomocą polecenia selection.getPageElementRange().getPageElements()[0]. I podobnie, strona zawierająca kształt obramowania jest bieżącą stroną aktywną. Aby ją pobrać, użyj polecenia selection.getCurrentPage().

Odczytuję zaznaczenia

Aby odczytać wybór, użyj metody Presentation.getSelection(), jak w tym przykładzie:

slajdy/wybór/zaznaczenie.gs
const selection = SlidesApp.getActivePresentation().getSelection();

Odczytywanie bieżącej strony

Aby pobrać bieżącą stronę wyświetlaną przez użytkownika, użyj metod getSelection() i getCurrentPage() w ten sposób:

slajdy/wybór/zaznaczenie.gs
const currentPage = SlidesApp.getActivePresentation().getSelection().getCurrentPage();

Pamiętaj, że bieżąca strona może być dowolnego z tych typów:

Na bieżącej stronie może być zaznaczony 1 lub więcej obiektów, a Typ wyboru określa typ wyboru.

Odczytywanie wyboru na podstawie typu wyboru

Poniższy przykład pokazuje, jak za pomocą typu wyboru odczytać wybrane elementy w sposób odpowiedni do danego typu.

slajdy/wybór/zaznaczenie.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;
}

Zaznaczony tekst do czytania

Zaznaczony tekst możesz odczytać przy użyciu metody Selection.getTextRange(). Dostępne są 2 rodzaje zaznaczania tekstu:

  • Wybór zakresu: jeśli kształt zawiera tekst „Hello” i wybrano „He”, zwrócony zakres ma wartość startIndex=0 i endIndex=2.
  • Wybór kursora: jeśli kształt zawiera tekst „Hello”, a kursor znajduje się po „H” („H|ello”), zwrócony zakres jest pusty z wartościami startIndex=1 i endIndex=1.

Zmieniam wybór

Skrypt może zmienić wybór użytkownika. Wszelkie zmiany wyboru dokonane przez skrypt w prezentacji są odzwierciedlane w kolejnych operacjach wyboru przez cały czas wykonywania skryptu.

Zmiany wyboru są odzwierciedlane w przeglądarce użytkownika dopiero po zakończeniu wykonywania skryptu lub po wywołaniu funkcji Presentation.saveAndClose().

Wybieranie bieżącej strony

Stronę aktywnej prezentacji można wybrać jako bieżącą, wywołując metodę selectAsCurrentPage(). Ta metoda usuwa wcześniej zaznaczone elementy strony, strony i teksty. Ta metoda pozwala więc odznaczyć wszystkie elementy na stronie. Na przykład:

slajdy/wybór/zaznaczenie.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
//

Wybieranie elementu strony

Aby wybrać element strony na stronie, użyj metody PageElement.select(). Spowoduje to też odznaczenie wszystkich wcześniej wybranych elementów strony.

Na przykład:

slajdy/wybór/zaznaczenie.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
//

Wybieranie wielu elementów strony

Aby dołączyć do zaznaczenia kolejne elementy strony, użyj metody PageElement.select(false). Wszystkie elementy strony muszą znajdować się na bieżącej stronie.

slajdy/wybór/zaznaczenie.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
//

Przekształcanie wyboru

Zmiany wprowadzane przez skrypt mogą przekształcić bieżący wybór, tak aby wybrane zmiany ulegały zmianie. Na przykład:

  1. Załóżmy, że masz wybrane 2 kształty A i B.
  2. Następnie skrypt usuwa kształt A.
  3. W rezultacie zaznaczenie zostanie przekształcone w odniesieniu do zmiany, tak aby wybrany był tylko kształt B.

Z przykładu poniżej dowiesz się, jak zmienić wybrane elementy, modyfikując wybrane elementy strony.

slajdy/wybór/zaznaczenie.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]
//

Zaznaczanie tekstu

Tekst zawarty w kształcie lub komórce tabeli można zaznaczyć za pomocą metody TextRange.select(). Jeśli tekst znajduje się w kształcie, zostanie on również zaznaczony. Jeśli tekst znajduje się w komórce tabeli, wybrana jest komórka tabeli i jej tabela zamykająca.

Spowoduje to też ustawienie strony nadrzędnej jako bieżącej.

Wybór zakresu w kształcie

Poniższy przykład pokazuje, jak zaznaczyć zakres w tekście zawartym w kształcie.

slajdy/wybór/zaznaczenie.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
//

Wybór kursora w kształcie

Poniższy przykład pokazuje, jak wybrać kursor w tekście zawartym w kształcie.

slajdy/wybór/zaznaczenie.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
//

Wybór zakresu w komórce tabeli

Poniższy przykład pokazuje, jak zaznaczyć zakres w tekście zawartym w komórce tabeli.

slajdy/wybór/zaznaczenie.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
//

Wybór kursora w komórce tabeli

Z przykładu poniżej dowiesz się, jak za pomocą kursora zaznaczyć tekst zawarty w komórce tabeli.

slajdy/wybór/zaznaczenie.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
//

Przekształcenie zaznaczenia ze zmianami w tekście

Poniższy przykład pokazuje, jak można przekształcić zaznaczony tekst, edytując go.

slajdy/wybór/zaznaczenie.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
//

Odznaczanie

Nie ma konkretnych metod odznaczania tekstu lub elementów strony. Ten wynik można jednak uzyskać za pomocą metod Page.selectAsCurrentPage() lub pageElement.select().

Wybierz bieżącą stronę

Z poniższego przykładu dowiesz się, jak odznaczyć bieżące zaznaczenie na stronie, ustawiając ją jako stronę bieżącą.

slajdy/wybór/zaznaczenie.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();

Wybierz element strony

Z przykładu poniżej dowiesz się, jak anulować wybór bieżących elementów na stronie, wybierając jeden element strony i usuwając z niego wszystkie pozostałe elementy.

slajdy/wybór/zaznaczenie.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();