프레젠테이션 내에서 항목 선택

선택은 강조 표시된 텍스트 또는 표와 같이 열려 있는 프레젠테이션 페이지에서 현재 선택된 항목입니다. 이 가이드에서는 Apps Script를 사용하여 활성 프레젠테이션에서 선택 항목을 가져오고 설정하는 방법을 설명합니다.

선택사항은 스크립트가 시작되었을 때의 스냅샷입니다. 스크립트가 실행되는 동안 사용자가 클릭하여 선택사항이 변경되면 이러한 변경사항은 반영되지 않습니다.

선택사항 및 선택 유형

Selection 클래스를 사용하여 선택을 읽을 수 있습니다. 이 클래스에는 선택한 객체의 유형에 따라 선택한 객체를 가져오는 다양한 메서드가 있습니다.

SelectionType enum은 선택된 객체의 특정 유형을 나타냅니다. 예를 들어 사용자가 도형에서 일부 텍스트를 선택한 경우 선택 유형은 TEXT입니다. 이 경우 selection.getTextRange() 메서드를 사용하여 선택한 텍스트 범위를 가져올 수 있습니다.

선택 항목이 포함된 객체를 검색할 수도 있습니다. 위의 예를 계속해서 살펴보면 selection.getPageElementRange().getPageElements()[0]를 사용하여 선택한 텍스트가 포함된 도형을 검색할 수 있습니다. 마찬가지로 폐쇄 도형이 포함된 페이지가 현재 활성 페이지입니다. 이 페이지를 검색하려면 selection.getCurrentPage()를 사용하세요.

선택한 부분 읽기

선택 항목을 읽으려면 다음 예와 같이 Presentation.getSelection() 메서드를 사용합니다.

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

현재 페이지 읽기

사용자가 보고 있는 현재 페이지를 가져오려면 다음과 같이 getSelection()getCurrentPage() 메서드를 사용합니다.

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

현재 페이지는 다음 유형 중 하나일 수 있습니다.

현재 페이지에는 하나 이상의 객체가 선택될 수 있으며 SelectionType은 선택 유형을 결정합니다.

선택 유형에 따라 선택사항 읽기

다음 예는 선택 유형을 사용하여 유형에 적합한 방식으로 현재 선택 항목을 읽는 방법을 보여줍니다.

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

텍스트 선택 읽기

Selection.getTextRange() 메서드를 사용하여 텍스트 선택을 읽을 수 있습니다. 텍스트 선택에는 두 가지 유형이 있습니다.

  • 범위 선택: 도형에 'Hello'라는 텍스트가 포함되어 있고 'He'가 선택된 경우 반환된 범위의 시작 인덱스는 0이고 끝 인덱스는 2입니다.
  • 커서 선택: 도형에 'Hello' 텍스트가 포함되어 있고 커서가 'H' 뒤에 있으면('H|ello') 반환 범위는 startIndex=1 및 endIndex=1인 빈 범위입니다.

선택사항 수정

스크립트는 사용자의 선택을 수정할 수 있습니다. 스크립트가 프레젠테이션에 적용하는 모든 선택 변경사항은 스크립트 실행 기간 동안 후속 선택 작업에 반영됩니다.

선택 변경사항은 스크립트 실행이 완료된 후 또는 Presentation.saveAndClose()가 호출된 후에만 사용자의 브라우저에 반영됩니다.

현재 페이지 선택

selectAsCurrentPage() 메서드를 호출하여 활성 프레젠테이션의 페이지를 현재 페이지로 선택할 수 있습니다. 이 메서드는 이전 페이지 요소, 페이지 또는 텍스트 선택을 삭제합니다. 따라서 현재 페이지에서 이 메서드를 사용하면 페이지에서 현재 선택한 항목을 모두 선택 해제할 수 있습니다. 예를 들면 다음과 같습니다.

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

페이지 요소 선택

페이지에서 페이지 요소를 선택하려면 PageElement.select() 메서드를 사용합니다. 이렇게 하면 이전에 선택한 페이지 요소도 선택 해제됩니다.

예를 들면 다음과 같습니다.

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

여러 페이지 요소 선택

선택에 페이지 요소를 추가하려면 PageElement.select(false) 메서드를 사용합니다. 모든 페이지 요소가 현재 페이지에 있어야 합니다.

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

선택 영역 변환

스크립트에서 실행하는 수정은 현재 선택 항목을 변환하여 수정 결과 선택 항목이 변경되도록 할 수 있습니다. 예를 들면 다음과 같습니다.

  1. 도형 A와 B를 선택했다고 가정해 보겠습니다.
  2. 그런 다음 스크립트가 도형 A를 삭제합니다.
  3. 그 결과 선택 영역이 수정사항에 대해 변환되어 도형 B만 선택됩니다.

다음 예는 선택한 페이지 요소를 조작하여 선택을 변환하는 방법을 보여줍니다.

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

텍스트 선택

도형이나 테이블 셀에 포함된 텍스트는 TextRange.select() 메서드를 사용하여 선택할 수 있습니다. 텍스트가 도형에 포함되어 있으면 해당 도형도 선택됩니다. 텍스트가 표 셀에 포함된 경우 해당 표 셀과 이를 묶는 표가 모두 선택됩니다.

이렇게 하면 상위 페이지가 현재 페이지로 설정됩니다.

도형의 범위 선택

다음 예는 도형에 포함된 텍스트 내에서 범위를 선택하는 방법을 보여줍니다.

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

도형에서 커서 선택

다음 예는 도형에 포함된 텍스트 내에서 커서 선택을 실행하는 방법을 보여줍니다.

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

테이블 셀의 범위 선택

다음 예는 테이블 셀에 포함된 텍스트 내에서 범위를 선택하는 방법을 보여줍니다.

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

TableCell의 커서 선택

다음 예는 테이블 셀에 포함된 텍스트 내에서 커서를 선택하는 방법을 보여줍니다.

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

텍스트 수정으로 선택 변환

다음 예는 선택한 텍스트를 수정하여 선택사항을 변환하는 방법을 보여줍니다.

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

선택 해제 중

텍스트 또는 페이지 요소를 선택 해제하는 명시적 메서드는 없습니다. 하지만 Page.selectAsCurrentPage() 또는 pageElement.select() 메서드를 사용하여 이 결과를 얻을 수 있습니다.

현재 페이지 선택

다음 예에서는 페이지를 현재 페이지로 설정하여 페이지에서 현재 선택한 항목을 모두 선택 해제하는 방법을 보여줍니다.

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

페이지 요소 선택

다음 예는 페이지 요소 하나를 선택하여 페이지에서 현재 선택한 항목을 모두 선택 해제하는 방법을 보여줍니다.

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