Wybieranie elementów w prezentacji

Zaznaczenie to element wybrany aktualnie na otwartej stronie prezentacji, na przykład rozpiętość zaznaczonego tekstu lub tabela. W tym przewodniku pokazujemy, jak uzyskać i ustawić zaznaczenie w aktywnej prezentacji za pomocą Apps Script.

Wybrana opcja to migawka przedstawiająca stan w momencie uruchomienia skryptu. Jeśli użytkownik kliknie, a wybór zmieni się w trakcie działania skryptu, zmiany te nie zostaną odzwierciedlone.

Wybór i typ wyboru

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

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

Możesz też pobrać obiekt, który zawiera zaznaczenie. W przykładzie powyżej możesz pobrać kształt zawierający zaznaczony tekst za pomocą funkcji selection.getPageElementRange().getPageElements()[0]. I podobnie, strona zawierająca kształt obramowania jest obecnie aktywna. Aby ją pobrać, użyj polecenia selection.getCurrentPage().

Odczytuję zaznaczenie

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

slajdy/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 ten sposób:

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

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

Bieżąca strona może zawierać co najmniej 1 obiekt, a metoda SelectionType określa typ wyboru.

Odczytuję wybór na podstawie typu wyboru

Z przykładu poniżej pokazujemy, jak za pomocą typu wyboru odczytać bieżący wybór w odpowiedni sposób.

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

Odczytywanie selekcji tekstu

Zaznaczony tekst możesz odczytać za pomocą 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 literze „H” („H|ello”), zwracany zakres jest pusty, a parametry startIndex=1 i endIndex=1 są puste.

Zmieniam wybór

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

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

Wybieram bieżącą stronę

Stronę z 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 usunąć zaznaczenie wszystkich opcji na bieżącej stronie. Na przykład:

slajdy/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 na stronie, użyj metody PageElement.select(). Spowoduje to też usunięcie zaznaczenia wcześniej wybranych elementów strony.

Na przykład:

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

Wybieranie wielu elementów strony

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

slajdy/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 wprowadzane przez skrypt mogą przekształcić bieżący wybór, tak aby wybrane zmiany w wyniku edycji się zmieniły. Na przykład:

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

Przykład poniżej pokazuje, jak można przekształcić wybór przez manipulowanie wybranymi elementami strony.

slajdy/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 w kształcie lub w komórce tabeli można zaznaczyć za pomocą metody TextRange.select(). Jeśli tekst jest wewnątrz kształtu, to on również jest zaznaczony. Jeśli tekst znajduje się w komórce tabeli, ta komórka tabeli i jej tabela otaczająca są zaznaczone.

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

Wybór zakresu w kształcie

Poniższy przykład pokazuje, jak zaznaczyć zakres w tekście wewnątrz kształtu.

slajdy/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 kursora w kształcie

Poniższy przykład pokazuje, jak zaznaczyć kursor w tekście wewnątrz kształtu.

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

Wybór zakresu w komórce tabeli

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

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

Wybór kursora w komórce tabeli

Z przykładu poniżej dowiesz się, jak zaznaczyć kursorem w tekście zawartym w komórce tabeli.

slajdy/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 ze zmianami tekstu

Z przykładu poniżej dowiesz się, jak zmienić zaznaczony tekst, edytując go.

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

Odznaczę

Nie ma jednoznacznych 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 przykładu poniżej dowiesz się, jak odznaczyć bieżące ustawienia na stronie, ustawiając tę stronę jako bieżącą.

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

Wybierz element strony

Z przykładu poniżej dowiesz się, jak odznaczyć bieżące ustawienia na stronie przez wybranie jednego elementu strony i usunięcie z niego wszystkich innych elementów.

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