Wybieranie elementów w prezentacji

Zaznaczenie to element zaznaczony obecnie na otwartej stronie prezentacji, np. rozpiętość zaznaczonego tekstu lub tabela. Z tego przewodnika dowiesz się, jak za pomocą Apps Script wybierać i ustawiać zaznaczenie w aktywnej prezentacji.

Wybór jest podsumowaniem tego, co było na początku 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 korzysta z różnych metod pobierania 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, typem wyboru będzie TEXT. W tym przypadku możesz pobrać wybrany zakres tekstu przy użyciu metody selection.getTextRange().

Możesz też pobrać obiekt zawierający zaznaczenie. Wracając do przykładu powyżej, możesz pobrać kształt zawierający zaznaczony tekst za pomocą polecenia 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 pokazano w tym przykładzie:

slajdy/wybór/wybór.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/wybór.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 do typu sposób.

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

Odczytywanie zaznaczonego tekstu

Zaznaczony tekst możesz odczytać za pomocą metody Selection.getTextRange(). Są 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.
  • 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ścią startIndex=1 i endIndex=1.

Zmiana zaznaczenia

Skrypt może modyfikować 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 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ę 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 związku z tym zaznaczenie jest przekształcane względem edycji, przez co wybrany jest 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 w komórce tabeli można zaznaczyć przy użyciu 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.

Zaznaczenie 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 kształtu za pomocą kursora

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 tego przykładu 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.

slajdy/wybór/wybór.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łcanie zaznaczenia ze zmianami tekstu

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

Odznaczam

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

Wybierz bieżącą stronę

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

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

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