עריכה ועיצוב של טקסט

אפשר לערוך ולעצב טקסט באמצעות טווחי טקסט, שמיוצגים באמצעות הסוג TextRange. TextRange מייצג קטע טקסט בתוך צורה או בתוך תא בטבלה. קריאה ל-getText() בצורה או בתא בטבלה מחזירה טווח של טקסט שמכסה את כל הטקסט.

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

שימוש בטווחי טקסט

לטווח טקסט יש שני אינדקסים שמפרידים את מקטע הטקסט שמכוסה בטווח טקסט: אינדקס התחלה ואינדקס סיום. אפשר לקבוע את האינדקסים האלה באמצעות הפונקציות getStartIndex() ו-getEndIndex().

כדי לקרוא את התוכן של טווח טקסט, צריך להשתמש בפונקציות asString() או asRenderedString().

כדי לאחזר תת-טווח מתוך טווח טקסט, צריך להשתמש בפונקציה getRange().

הסקריפט הבא יוצר תיבת טקסט בשקף הראשון ומגדיר את תוכן הטקסט שלו ל-"Hello world!". לאחר מכן, היא מאחזרת תת-טווח שמקיף רק את ה-"Hello".

slides/style/style.gs
try {
  // Get the first slide of active presentation
  const slide = SlidesApp.getActivePresentation().getSlides()[0];
  // Insert shape in the slide with dimensions
  const shape = slide.insertShape(SlidesApp.ShapeType.TEXT_BOX, 100, 200, 300, 60);
  const textRange = shape.getText();
  // Set text in TEXT_BOX
  textRange.setText('Hello world!');
  console.log('Start: ' + textRange.getStartIndex() + '; End: ' +
    textRange.getEndIndex() + '; Content: ' + textRange.asString());
  const subRange = textRange.getRange(0, 5);
  console.log('Sub-range Start: ' + subRange.getStartIndex() + '; Sub-range End: ' +
    subRange.getEndIndex() + '; Sub-range Content: ' + subRange.asString());
} catch (err) {
  // TODO (developer) - Handle exception
  console.log('Failed with an error %s ', err.message);
}

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

Start: 0; End: 13; Content: Hello world!
Start: 0; End: 5; Content: Hello

הוספה ומחיקה של טקסט

ניתן גם להוסיף ולמחוק צורות טקסט ותאי טבלה באמצעות טווחי טקסט.

  • אפשר להשתמש ב-insertText() וב-appendText() כדי להוסיף טקסט.
  • הפונקציה setText() מחליפה טקסט של טווח טקסט בטקסט שצוין.
  • הפונקציה clear() מוחקת טקסט מתוך טווח טקסט.

הסקריפט הבא מדגים את השימוש בפונקציות האלה:

slides/style/style.gs
try {
  // Get the first slide of active presentation
  const slide = SlidesApp.getActivePresentation().getSlides()[0];
  // Insert shape in the slide with dimensions
  const shape = slide.insertShape(SlidesApp.ShapeType.TEXT_BOX, 100, 200, 300, 60);
  const textRange = shape.getText();
  textRange.setText('Hello world!');
  textRange.clear(6, 11);
  // Insert text in TEXT_BOX
  textRange.insertText(6, 'galaxy');
  console.log('Start: ' + textRange.getStartIndex() + '; End: ' +
    textRange.getEndIndex() + '; Content: ' + textRange.asString());
} catch (err) {
  // TODO (developer) - Handle exception
  console.log('Failed with an error %s ', err.message);
}

הסקריפט יוצר תיבת טקסט בשקף הראשון ומגדיר את תוכן הטקסט שלו ל-"Hello world!". לאחר מכן היא מוחקת את התווים 6 עד 11 ("עולם"), ומוסיפה במקום זאת את הטקסט "גלקסיה" באינדקס 6. הדוגמה שלמעלה תפיק את הצהרת היומן הבאה:

Start: 0; End: 14; Content: Hello galaxy!

חיפוש והחלפה

השתמשו בפונקציה replaceAllText() במצגת או בדף כדי לבצע חיפוש גלובלי והחלפה בכל המצגת או בדף ספציפי.

הפונקציה find() ב-TextRange מחזירה את המופעים של מחרוזת כלשהי בתוך הטווח. אפשר להשתמש בו יחד עם setText() לביצוע חיפוש והחלפה בתוך צורה או תא בטבלה.

פסקאות, פריטים ברשימה והפעלות

TextRange מספק פונקציות להחזרת אוספים שימושיים של ישויות טקסט. חלק מהפונקציות האלה כוללות:

  • getParagraphs(), שמספקת את כל הפסקאות שחופפות לטווח הטקסט. פסקה היא רצף של טקסט שמסתיים בתו החדש, "\n".
  • getListParagraphs(), שמחזירה את הפריטים ברשימה בטווח הטקסט הנוכחי.
  • getRuns(), שמספקת את הרצות הטקסט שחופפות לטווח הטקסט הנוכחי. הרצת טקסט היא קטע טקסט שבו לכל התווים יש אותו סגנון טקסט.

עיצוב טקסט

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

הפונקציה getTextStyle() של טווח טקסט מספקת אובייקט TextStyle שמשמש לעיצוב הטקסט. האובייקט TextStyle מכסה את אותו הטקסט שמופיע בתבנית ההורה שלו TextRange.

slides/style/style.gs
try {
  // Get the first slide of active presentation
  const slide = SlidesApp.getActivePresentation().getSlides()[0];
  // Insert shape in the slide with dimensions
  const shape = slide.insertShape(SlidesApp.ShapeType.TEXT_BOX, 100, 200, 300, 60);
  const textRange = shape.getText();
  // Set text in TEXT_BOX
  textRange.setText('Hello ');
  // Append text in TEXT_BOX
  const insertedText = textRange.appendText('world!');
  // Style the text with url,bold
  insertedText.getTextStyle()
      .setBold(true)
      .setLinkUrl('www.example.com')
      .setForegroundColor('#ff0000');
  const helloRange = textRange.getRange(0, 5);
  console.log('Text: ' + helloRange.asString() + '; Bold: ' + helloRange.getTextStyle().isBold());
  console.log('Text: ' + insertedText.asString() + '; Bold: ' +
    insertedText.getTextStyle().isBold());
  console.log('Text: ' + textRange.asString() + '; Bold: ' + textRange.getTextStyle().isBold());
} catch (err) {
  // TODO (developer) - Handle exception
  console.log('Failed with an error %s ', err.message);
}

בדוגמה שלמעלה, קודם כל נוצרת תיבת טקסט בשקף הראשון ומגדירה את התוכן שלה ל-"Hello " (שלום). לאחר מכן היא מצרפת את הטקסט "world!". הטקסט שצירפת מודגש, מקושר אל www.example.com והצבע שלו מוגדר לאדום.

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

Text: Hello; Bold: false
Text: world!; Bold: true
Text: Hello world!; Bold: null

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

עיצוב פסקאות

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

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

slides/style/style.gs
try {
  // Get the first slide of active presentation
  const slide = SlidesApp.getActivePresentation().getSlides()[0];
  // Insert shape in the slide with dimensions
  const shape = slide.insertShape(SlidesApp.ShapeType.TEXT_BOX, 50, 50, 300, 300);
  const textRange = shape.getText();
  // Set the text in the shape/TEXT_BOX
  textRange.setText('Paragraph 1\nParagraph2\nParagraph 3\nParagraph 4');
  const paragraphs = textRange.getParagraphs();
  // Style the paragraph alignment center.
  for (let i = 0; i <= 3; i++) {
    const paragraphStyle = paragraphs[i].getRange().getParagraphStyle();
    paragraphStyle.setParagraphAlignment(SlidesApp.ParagraphAlignment.CENTER);
  }
} catch (err) {
  // TODO (developer) - Handle exception
  console.log('Failed with an error %s ', err.message);
}

עיצוב רשימות

בדומה ל-ParagraphStyle, ניתן להשתמש ב-ListStyle כדי לעצב את כל הפסקאות שחופפות לטווח הטקסט ברמה העליונה.

slides/style/style.gs
try {
  // Get the first slide of active presentation
  const slide = SlidesApp.getActivePresentation().getSlides()[0];
  // Insert shape in the slide with dimensions
  const shape = slide.insertShape(SlidesApp.ShapeType.TEXT_BOX, 50, 50, 300, 300);
  // Add and style the list
  const textRange = shape.getText();
  textRange.appendText('Item 1\n')
      .appendText('\tItem 2\n')
      .appendText('\t\tItem 3\n')
      .appendText('Item 4');
  // Preset patterns of glyphs for lists in text.
  textRange.getListStyle().applyListPreset(SlidesApp.ListPreset.DIGIT_ALPHA_ROMAN);
  const paragraphs = textRange.getParagraphs();
  for (let i = 0; i < paragraphs.length; i++) {
    const listStyle = paragraphs[i].getRange().getListStyle();
    console.log('Paragraph ' + (i + 1) + '\'s nesting level: ' + listStyle.getNestingLevel());
  }
} catch (err) {
  // TODO (developer) - Handle exception
  console.log('Failed with an error %s ', err.message);
}

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

Paragraph 1's nesting level: 0
Paragraph 2's nesting level: 1
Paragraph 3's nesting level: 2
Paragraph 4's nesting level: 0