Wybieranie elementów w prezentacji

Zadbaj o dobrą organizację dzięki kolekcji Zapisuj i kategoryzuj treści zgodnie ze swoimi preferencjami.

Wybór to wszystko, co jest obecnie zaznaczone na otwartej stronie prezentacji, np. zaznaczony fragment tekstu lub tabela. Ten przewodnik pokazuje, jak pobrać i ustawić zaznaczenie w aktywnej prezentacji za pomocą Apps Script.

Wybór jest tym, co było na początku skryptu. Jeśli użytkownik kliknie, a zaznaczenie zmieni się w trakcie działania skryptu, zmiany te nie zostaną odzwierciedlone.

Wybrane opcje i ich typy

Wybrane ustawienie możesz odczytać za pomocą klasy Zaznaczenie. Klasa umożliwia różne metody pobierania wybranych obiektów na podstawie typu wybranych obiektów.

Wartość SelectionType reprezentuje konkretny typ wybranych obiektów. Jeśli na przykład użytkownik zaznaczy tekst w kształcie, typem zaznaczenia będzie TEKST. W tym przypadku wybrany zakres tekstu możesz pobrać, korzystając z metody selection.getTextRange().

Możesz też pobrać obiekt zawierający zaznaczenie. W powyższym przykładzie możesz pobrać kształt zawierający wybrany tekst za pomocą właściwości selection.getPageElementRange().getPageElements()[0]. Analogicznie strona, na której znajduje się obiekt otaczający, to aktualna aktywna strona. Aby ją pobrać, użyj tagu selection.getCurrentPage().

Czytanie zaznaczenia

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

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

Czytanie bieżącej strony

Aby pobrać bieżącą stronę 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();

Obecna strona może być jednym z tych typów:

Bieżąca strona może mieć wybrany co najmniej jeden obiekt, a typ wyboru określa typ wyboru.

Czytanie zaznaczenia na podstawie typu wyboru

Poniższy przykład pokazuje, jak użyć typu wyboru, aby odczytać bieżący wybór w odpowiedni 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:
    Logger.log('Nothing selected');
    break;
  case SlidesApp.SelectionType.CURRENT_PAGE:
    currentPage = selection.getCurrentPage();
    Logger.log('Selection is a page with ID: ' + currentPage.getObjectId());
    break;
  case SlidesApp.SelectionType.PAGE_ELEMENT:
    const pageElements = selection.getPageElementRange().getPageElements();
    Logger.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];
      Logger.log('Selected text is in a table at row ' +
        tableCell.getRowIndex() + ', column ' +
        tableCell.getColumnIndex());
    }
    const textRange = selection.getTextRange();
    if (textRange.getStartIndex() === textRange.getEndIndex()) {
      Logger.log('Text cursor position: ' + textRange.getStartIndex());
    } else {
      Logger.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();
    Logger.log('There are ' + tableCells.length + ' table cells selected.');
    break;
  case SlidesApp.SelectionType.PAGE:
    const pages = selection.getPageRange().getPages();
    Logger.log('There are ' + pages.length + ' pages selected.');
    break;
  default:
    break;
}

Czytanie tekstu zaznaczonego

Możesz odczytać tekst, korzystając z metody Selection.getTextRange(). Są 2 rodzaje zaznaczenia tekstu:

  • Wybór zakresu: jeśli kształt zawiera tekst "Cześć" i "He", zwrócony zakres ma wartość startIndex=0 i endIndex=2.
  • Wybór kursora: jeśli kształt zawiera tekst "Witamy

Zmodyfikowanie wyboru

Skrypt może modyfikować wybór użytkownika. Wszelkie zmiany zaznaczenia wprowadzone przez skrypt w prezentacji będą widoczne w kolejnych operacjach wyboru na czas wykonania skryptu.

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

Wybór bieżącej strony

Aby otworzyć stronę w aktywnej prezentacji, jako stronę bieżącą możesz wywołać metodę selectAsCurrentPage(). Ta metoda powoduje usunięcie wszystkich dotychczasowych elementów, stron i tekstu. Użycie tej metody na bieżącej stronie umożliwia odznaczenie wszystkich opcji wybranych na stronie. Przykład:

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

Wybór elementu strony

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

Przykład:

slajdy/wybór/wybór.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 dołączyć do zaznaczenia dodatkowe elementy strony, użyj metody PageElement.select(false). Wszystkie elementy strony muszą się znajdować na bieżącej stronie.

slajdy/wybór/wybór.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, które wprowadza Twój skrypt, mogą przekształcić bieżący wybór, dzięki czemu zmiany wybrane w wyniku zmiany zostaną wprowadzone. Przykład:

  1. Załóżmy, że masz wybrane 2 kształty: A i B.
  2. Następnie skrypt usunie kształt A.
  3. W efekcie zaznaczenie jest przekształcane wraz z zmianą, dzięki czemu wybierany jest tylko kształt B.

Poniższy przykład pokazuje, jak można przekształcić zaznaczenie przez manipulowanie wybranymi elementami strony.

slajdy/wybór/wybór.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 znajdujący się w kształtu lub w komórce tabeli można wybrać za pomocą metody TextRange.select(). Jeśli tekst zawiera kształt, zostanie on również wybrany. Jeśli tekst znajduje się w komórce tabeli, zaznaczona jest ta komórka i tabela, do której ona należy.

Spowoduje to również ustawienie strony nadrzędnej.

Wybór zakresu w kształcie

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

slajdy/wybór/wybór.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 dokonać wyboru kursora w tekście, którego kształt obejmuje kształt.

slajdy/wybór/wybór.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 dokonać wyboru zakresu w tekście wewnątrz komórki 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');
  // 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 tabeli TableCell

Poniższy przykład pokazuje, jak dokonać wyboru kursora w tekście wewnątrz komórki 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łcenie zaznaczenia z edycją tekstową

Poniższy przykład pokazuje, jak można przekształcić zaznaczenie przez edycję zaznaczonego tekstu.

slajdy/wybór/wybór.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 istnieją precyzyjne metody odznaczania tekstu ani elementów strony. Można go jednak osiągnąć za pomocą metod Page.selectAsCurrentPage() lub pageElement.select().

Wybierz bieżącą stronę

Poniższy przykład pokazuje, jak odznaczyć bieżące zaznaczenie na stronie przez ustawienie tej strony jako bieżącej strony.

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

Wybierz element strony

Poniższy przykład pokazuje, jak odznaczyć wszystkie wybrane elementy na stronie przez zaznaczenie jednego elementu. Spowoduje to usunięcie wszystkich pozostałych elementów.

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