Wybieranie elementów w prezentacji

Zaznaczenie to wszystko, co jest obecnie zaznaczone na otwartej stronie prezentacji, na przykład zakres wyróżnionego tekstu lub tabela. Z tego przewodnika dowiesz się, jak uzyskać i ustawić zaznaczenie w aktywnej prezentacji za pomocą Apps Script.

Zaznaczone elementy to stan obiektu w momencie uruchomienia skryptu. Jeśli użytkownik kliknie element i wybór zmieni się podczas wykonywania skryptu, te zmiany nie zostaną uwzględnione.

Wybrane elementy i ich typ

Zaznaczone elementy możesz odczytać za pomocą klasy Selection. Klasa ma różne metody uzyskiwania wybranych obiektów na podstawie typu wybranych obiektów.

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

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

Czytanie zaznaczonego tekstu

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

slides/selection/selection.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 następujący sposób:

slides/selection/selection.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 co najmniej 1 obiekt, a typ zaznaczenia określa parametr SelectionType.

Czytanie zaznaczenia na podstawie typu zaznaczenia

Z przykładu poniżej dowiesz się, jak za pomocą typu zaznaczenia odczytać bieżące zaznaczenie w odpowiednim typie.

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

Czytanie zaznaczonego tekstu

Zaznaczenie tekstu możesz odczytać za pomocą metody Selection.getTextRange(). Istnieją 2 rodzaje zaznaczania tekstu:

  • Zakres wyboru: jeśli kształt zawiera tekst „Cześć”, a wybrany jest „Cz”, zwracany zakres ma startIndex=0 i endIndex=2.
  • Zaznaczenie kursora: jeśli kształt zawiera tekst „Cześć”, a kursor znajduje się po „C” („Cześć|ello”), zwracany zakres jest pusty, a startIndex=1 i endIndex=1.

Modyfikowanie zaznaczenia

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

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

Wybieranie bieżącej strony

Stronę w aktywnej prezentacji można wybrać jako bieżącą, wywołując metodę selectAsCurrentPage(). Ta metoda usuwa wszystkie wcześniejsze elementy strony, strony lub zaznaczony tekst. Zastosowanie tej metody na bieżącej stronie powoduje odznaczenie wszystkich bieżących zaznaczeń na stronie. Na przykład:

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

Wybieranie elementu strony

Aby wybrać element strony, użyj metody PageElement.select(). Spowoduje to również odznaczenie wszystkich wcześniej zaznaczonych elementów strony.

Na przykład:

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

Zaznaczanie wielu elementów strony

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

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

Przekształcanie zaznaczenia

Zmiany wprowadzone przez skrypt mogą przekształcać bieżący wybór, tak aby w wyniku tej zmiany zmienił się wybrany element. Na przykład:

  1. Załóżmy, że masz zaznaczone 2 ksztalty: A i B.
  2. Następnie skrypt usuwa kształt A.
  3. W efekcie obszar zaznaczony na czerwono jest przekształcony w sposób, który pozwala zaznaczyć tylko kształt B.

Ten przykład pokazuje, jak można przekształcić zaznaczenie, manipulując wybranymi elementami strony.

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

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, ten kształt jest też zaznaczony. Jeśli tekst znajduje się w komórce tabeli, zaznaczona jest zarówno komórka, jak i tabela, w której się znajduje.

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

Wybór zakresu w kształcie

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

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

Zaznaczenie kursorem kształtu

Z tego przykładu dowiesz się, jak zaznaczyć kursorem tekst zawarty w kształcie.

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

Zaznaczenie zakresu w komórce tabeli

Z przykładu poniżej dowiesz się, jak wybrać zakres tekstu w komórce tabeli.

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

Zaznaczenie kursora w komórce tabeli

Z tego przykładu dowiesz się, jak zaznaczyć kursorem tekst w komórce tabeli.

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

Przekształcenie zaznaczenia z edycjami tekstowymi

W tym przykładzie pokazujemy, jak można przekształcić zaznaczony tekst, edytując go.

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

Odznaczanie

Nie ma żadnych metod odznaczania tekstu ani elementów strony. Można jednak uzyskać ten sam wynik, stosując metody Page.selectAsCurrentPage() lub pageElement.select().

Wybieranie bieżącej strony

Ten przykład pokazuje, jak odznaczyć wszystkie zaznaczone elementy na stronie, ustawiając tę stronę jako bieżącą.

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

Wybieranie elementu strony

Z tego przykładu dowiesz się, jak anulować zaznaczenie bieżących elementów na stronie, wybierając jeden element strony, co spowoduje usunięcie wszystkich pozostałych elementów z zaznaczenia.

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