Wybieranie elementów w prezentacji

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

Wybrany element jest zrzutem stanu w momencie rozpoczęcia skryptu. Jeśli użytkownik kliknie i wybór zmieni się podczas działania skryptu, te zmiany nie zostaną odzwierciedlone.

Wybory i typ wyboru

Możesz odczytać zaznaczenie za pomocą klasy Selection. Klasa ma różne metody 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, typ zaznaczenia będzie miał wartość TEXT. W takim przypadku możesz pobrać wybrany zakres tekstu za pomocą metody selection.getTextRange().

Możesz też pobrać obiekt zawierający zaznaczenie. Kontynuując powyższy przykład, możesz pobrać kształt zawierający zaznaczony 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 funkcji selection.getCurrentPage().

Odczytywanie zaznaczonego tekstu

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

slides/selection/selection.gs
const selection = SlidesApp.getActivePresentation().getSelection();

Odczytywanie bieżącej strony

Aby pobrać bieżącą stronę, którą wyświetla użytkownik, użyj metod getSelection()getCurrentPage() w ten 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ć wybranych co najmniej 1 obiekt, a typ wyboru określa parametr SelectionType.

Odczytywanie wybranego tekstu na podstawie typu wyboru

Z przykładu poniżej dowiesz się, jak używać typu wyboru do odczytywania bieżącego wyboru w sposób odpowiedni dla danego typu.

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

Odczytywanie zaznaczonego tekstu

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

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

Zmienianie zaznaczenia

Skrypt może modyfikować wybór użytkownika. Wszelkie zmiany wyboru, które skrypt wprowadza w prezentacji, są odzwierciedlane w kolejnych operacjach wyboru przez cały czas działania skryptu.

Zmiany wyboru są widoczne 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 poprzedni element strony, stronę lub zaznaczenie tekstu. Użycie tej metody na bieżącej stronie pozwala odznaczyć wszystkie zaznaczone na niej elementy. 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 wybranych 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
//

Wybieranie wielu elementów strony

Aby dołączyć do wyboru 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 wprowadzane przez skrypt mogą przekształcać bieżące zaznaczenie, tak aby w wyniku edycji zmieniało się to, co jest zaznaczone. 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 rezultacie zaznaczenie zostanie przekształcone w odniesieniu do zmiany, tak aby zaznaczony był tylko kształt B.

Poniższy 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, zostanie on również zaznaczony. Jeśli tekst znajduje się w komórce tabeli, zaznaczona zostanie zarówno ta komórka, jak i tabela, w której się znajduje.

Spowoduje to również ustawienie strony nadrzędnej jako bieżącej.

Wybór zakresu w kształcie

Przykład poniżej pokazuje, jak wybrać zakres w tekście znajdującym się 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
//

Zaznaczanie kursorem w kształcie

Poniższy przykład pokazuje, jak wybrać kursor w tekście znajdującym się 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
//

Wybór zakresu w komórce tabeli

Przykład poniżej pokazuje, jak wybrać zakres w tekście znajdującym się 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
//

Zaznaczanie kursorem w komórce tabeli

Poniższy przykład pokazuje, jak wybrać 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łcanie zaznaczenia za pomocą edycji tekstowej

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

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 wyraźnych metod odznaczania tekstu ani elementów strony. Możesz jednak to osiągnąć, korzystając z metod Page.selectAsCurrentPage() lub pageElement.select().

Wybierz bieżącą stronę

Ten przykład pokazuje, jak odznaczyć wszystkie bieżące zaznaczenia na stronie, ustawiając ją jako bieżącą stronę.

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

Poniższy przykład pokazuje, jak usunąć zaznaczenie wszystkich elementów na stronie, wybierając jeden element strony, a tym samym usuwając wszystkie inne elementy 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();