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

אפשר לערוך ולעצב טקסט באמצעות טווחים של טקסט, שמיוצגים על ידי הסוג 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 (world) ומוסיפה את הטקסט galaxy באינדקס 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);
}

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

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