Wybieranie elementów w prezentacji

Zaznaczenie to element aktualnie zaznaczony na otwartej stronie prezentacji, np. rozpiętości zaznaczonego tekstu lub tabeli. Z tego przewodnika dowiesz się, jak i ustawić zaznaczenie w aktywnej prezentacji, używając języka Apps Script.

Wybór to podsumowanie tego, co było na początku skryptu. Jeśli użytkownik liczba kliknięć i wybór zmienia się w trakcie działania skryptu, te zmiany nie zostaną uwzględnione.

Zaznaczenia i typ zaznaczenia

Możesz odczytać zaznaczenie przy pomocy Wybór zajęcia. Klasa ma różne metody pobierania wybranych obiektów na podstawie wybranych obiektów.

Wyliczenie SelectionType reprezentuje konkretny typ wybranych obiektów. Jeśli na przykład użytkownik ma zaznaczono jakiś tekst w kształcie, typ zaznaczenia mieć postać TEXT. W takim przypadku można pobrać wybrany zakres tekstu przy użyciu funkcji Metoda selection.getTextRange().

Możesz też pobrać obiekt zawierający zaznaczenie. kontynuując powyżej, możesz pobrać kształt zawierający zaznaczony tekst, selection.getPageElementRange().getPageElements()[0] Podobnie strona, na której zawiera kształt otaczający jest bieżącą aktywną stroną; do pobrać tę stronę, należy użyć polecenia selection.getCurrentPage().

Odczytywanie zaznaczenia

Aby odczytać wybór, użyj Presentation.getSelection() zgodnie z poniższym przykładem:

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

Odczytywanie bieżącej strony

Aby pobrać bieżącą stronę, którą oglądanego przez użytkownika, użyj getSelection() oraz 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 należeć do jednego z tych typów:

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

Odczytywanie zaznaczenia na podstawie typu zaznaczenia

Z przykładu poniżej dowiesz się, jak użyć typu wyboru do odczytania aktualne zaznaczenie w sposób dostosowany do 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ą Selection.getTextRange(). Są 2 rodzaje zaznaczania tekstu:

  • Wybór zakresu: jeśli kształt zawiera słowa „Cześć” i „He” to wybrany zakres, zwrócony zakres ma wartość startIndex=0 i endIndex=2.
  • Wybór kursora: jeśli kształt zawiera tekst „Witaj”, a kursor jest po „H” („H|ello”) zwrócony zakres to pusty zakres z startIndex=1 i endIndex=1.

Zmiana wyboru

Skrypt może modyfikować wybór użytkownika. Wszystkie zmiany wyboru dokonane przez skrypt są odzwierciedlane w prezentacji. w kolejnych operacjach wyboru w czasie wykonywania skryptu.

Zmiany wyboru zostaną odzwierciedlone w przeglądarce użytkownika dopiero po wykonaniu skryptu po zakończeniu lub wywołaniu funkcji Presentation.saveAndClose().

Wybieranie bieżącej strony

Stronę z aktywnej prezentacji można wybrać jako bieżącą stronę, wywołując połączenie metodę selectAsCurrentPage(). Ta metoda powoduje usunięcie wszelkich wcześniejszych elementów strony, stron lub tekstu. Za pomocą tę metodę na bieżącej stronie pozwala usunąć zaznaczenie wszystkich aktualnie wybranych elementów stronę. 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 na stronie, użyj metody PageElement.select(). Spowoduje to także usunięcie zaznaczenia 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 zaznaczenia dodatkowe elementy strony, użyj funkcji Metoda 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łcić bieżący wybór w taki sposób, jakie elementy są wybrane w wyniku ich edycji. 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 wybór jest przekształcany względem zmiany w taki sposób, że tylko kształt B jest zaznaczony.

Poniższy przykład pokazuje, jak można zmienić wybór przez manipulowanie wybranych elementów 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 znajdujący się w kształcie lub w komórce tabeli można zaznaczyć za pomocą TextRange.select(). Jeśli tekst jest zawarty w kształcie, kształt ten również jest zaznaczony. Jeśli tekst znajduje się w komórce tabeli, to ta komórka tabeli i otaczająca ją komórka obie kolumny.

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

Zaznaczenie zakresu w kształcie

Z przykładu poniżej dowiesz się, jak wybrać zakres w obrębie tekstu w określonych kształtach.

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

Z przykładu poniżej dowiesz się, jak zaznaczyć kursor w tekście w określonych kształtach.

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

Z przykładu poniżej dowiesz się, jak wybrać zakres w obrębie 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
//

Wybór kursora w TableCell

Z przykładu poniżej dowiesz się, jak zaznaczyć kursor w tekście 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 ze zmianami tekstu

W przykładzie poniżej widać, jak można zmienić 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
//

Odznaczam

Nie ma jawnych metod usuwania zaznaczenia tekstu lub elementów strony. Jednak można osiągnąć za pomocą funkcji Page.selectAsCurrentPage() lub pageElement.select() metody.

Wybierz bieżącą stronę

Z przykładu poniżej dowiesz się, jak odznaczyć bieżące elementy na stronie ustawiając ją 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();

Wybierz element strony

Z przykładu poniżej dowiesz się, jak odznaczyć bieżące elementy na stronie wybierając jeden element strony, usuwając z zaznaczenia wszystkie pozostałe elementy.

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