בחירת פריטים במצגת

הבחירה היא מה שנבחר כרגע בדף מצגת פתוח, למשל טווח של טקסט מודגש או טבלה. במדריך הזה מוסבר איך לבדוק ולהגדיר את הבחירה במצגת פעילה באמצעות Apps Script.

הבחירה היא תמונת מצב של מה שהיה כשהסקריפט התחיל. אם המשתמש לוחץ והבחירה משתנה בזמן שהסקריפט פועל, השינויים האלה לא יבואו לידי ביטוי.

בחירות וסוג בחירה

אפשר לקרוא את הבחירות באמצעות המחלקה Selection. במחלקה יש שיטות שונות לקבלת האובייקטים שנבחרו, בהתאם לסוג האובייקטים שנבחרו.

הערך 'טיפוסים בני מנייה (enum)' SelectionType מייצג את הסוג הספציפי של האובייקטים שנבחרו. לדוגמה, אם המשתמש בחר טקסט מסוים בצורה כלשהי, סוג הבחירה יהיה TEXT. במקרה זה, אפשר לאחזר את טווח הטקסט שנבחר באמצעות השיטה selection.getTextRange().

אפשר גם לאחזר את האובייקט שמכיל את הבחירה. בהמשך לדוגמה שלמעלה, תוכלו לאחזר את הצורה שמכילה את הטקסט שנבחר באמצעות selection.getPageElementRange().getPageElements()[0]. בדומה לכך, הדף שמכיל את הצורה המקיפה הוא הדף הפעיל הנוכחי. כדי לאחזר את הדף, השתמשו ב-selection.getCurrentPage().

קריאת המבחר

כדי לקרוא את הקטע שנבחר, השתמשו ב-method Presentation.getSelection() כפי שמוצג בדוגמה הבאה:

Slides/selection/selection.gs (שקפים/selection/selection.gs
const selection = SlidesApp.getActivePresentation().getSelection();

קריאת הדף הנוכחי

כדי לאחזר את הדף הנוכחי שהמשתמש מציג, משתמשים ב-methods getSelection() ו-getCurrentPage() באופן הבא:

Slides/selection/selection.gs (שקפים/selection/selection.gs
const currentPage = SlidesApp.getActivePresentation().getSelection().getCurrentPage();

לתשומת ליבך, הדף הנוכחי יכול להיות כל אחד מהסוגים הבאים:

בדף הנוכחי אפשר לבחור אובייקט אחד או יותר, וה-SelectionType קובע את סוג הבחירה.

קריאת הקטע שנבחר על סמך סוג הבחירה

הדוגמה הבאה מראה איך להשתמש בסוג הבחירה כדי לקרוא את הבחירה הנוכחית בדרך שמתאימה לסוג.

Slides/selection/selection.gs (שקפים/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" מסומנת, הטווח שהוחזר הוא startIndex=0 ו-endIndex=2.
  • בחירת סמן: אם צורה מכילה את הטקסט "Hello" (שלום), והסמן מופיע אחרי "H" ("H|ello"), הטווח שיוחזר הוא טווח ריק עם startIndex=1 ו-endIndex=1.

שינוי הבחירה

הסקריפט יכול לשנות את הבחירה של המשתמש. כל שינויי הבחירה שהסקריפט מבצע במצגת יבואו לידי ביטוי בפעולות הבחירה הבאות לאורך הביצוע של הסקריפט.

שינויי הבחירה יבואו לידי ביטוי בדפדפן של המשתמש רק לאחר סיום הפעלת הסקריפט, או כשמתבצעת קריאה ל-Presentation.saveAndClose().

בחירת הדף הנוכחי

אפשר לבחור דף במצגת הפעילה בתור הדף הנוכחי באמצעות קריאה ל-method selectAsCurrentPage(). השיטה הזו מסירה כל בחירה קודמת של רכיב בדף, דף או טקסט. לכן, שימוש בשיטה הזו בדף הנוכחי מאפשר לכם לבטל את הבחירה באפשרויות הנוכחיות בדף. לדוגמה:

Slides/selection/selection.gs (שקפים/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 (שקפים/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 (שקפים/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. כתוצאה מכך, הבחירה משתנה בהתאם לעריכה, כך שרק צורה ב' תיבחר.

הדוגמה הבאה ממחישה איך אפשר לשנות את הבחירה באמצעות מניפולציה על רכיבי הדף שנבחרו.

Slides/selection/selection.gs (שקפים/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 (שקפים/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 (שקפים/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 (שקפים/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
//

בחירת הסמן בתא

הדוגמה הבאה מראה איך לבחור סמן בתוך טקסט שנמצא בתא בטבלה.

Slides/selection/selection.gs (שקפים/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 (שקפים/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 (שקפים/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 (שקפים/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();