تعديل النص وتصميمه

يمكنك تعديل النص وتصميمه باستخدام النطاقات النصية، والتي يتم تمثيلها بواسطة النوع TextRange TextRange يمثل مقطعًا من نص داخل شكل أو داخل خلية جدول. يؤدي استدعاء getText() على شكل أو خلية جدول إلى إرجاع نطاق نصي يغطي النص بالكامل.

إذا كنت تستخدم طرقًا تُعدِّل كيفية احتواء النص داخل شكل، يمكن تفعيل أي إعدادات للاحتواء التلقائي. المطبقة على الشكل.

استخدام النطاقات النصية

يحتوي نطاق النص على فهرسين يحددان مقطع النص مشمولاً في نطاق نصي: فهرس البداية وفهرس النهاية. يمكنك تحديد هذين الفهارس باستخدام الدالتين getStartIndex() وgetEndIndex().

لقراءة محتوى نطاق نصي، استخدِم السمة asString() أو دوال asRenderedString().

لاسترداد نطاق فرعي من داخل نطاق نصي، استخدم الدالة getRange().

ينشئ النص البرمجي التالي مربع نص في الشريحة الأولى ويحدد محتوى النص إلى "مرحبًا بكم". ثم تسترد بعد ذلك نطاقًا فرعيًا يمتد فقط "مرحبًا".

العروض التقديمية/النمط/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() يحذف النص من داخل نطاق نصي.

يوضح النص البرمجي التالي استخدام هذه الدوال:

العروض التقديمية/النمط/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);
}

يقوم هذا النص البرمجي بإنشاء مربع نص في الشريحة الأولى وتعيين محتواه النصي إلى "مرحبًا بكم". بعد ذلك تحذف الأحرف من 6 إلى 11 ("world")، لإدراج النص "مجرة" في الفهرس 6 بدلاً من ذلك. ينتج المثال أعلاه عن بيان السجل التالي:

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

البحث والاستبدال

يمكنك استخدام الدالة replaceAllText() في العرض التقديمي أو الصفحة لإجراء تحليل شامل البحث والاستبدال عبر العرض التقديمي بأكمله أو صفحة معينة.

تعرض الدالة find() في TextRange مثيلات سلسلة داخل النطاق. يمكن استخدامها مع setText() لتنفيذ البحث والاستبدال. داخل شكل أو خلية جدول.

الفقرات وعناصر القائمة وعمليات التنفيذ

توفر TextRange دوال لعرض مجموعات مفيدة من الكيانات النصية. تتضمن بعض هذه الدوال ما يلي:

  • getParagraphs(), الذي يوفّر جميع الفقرات التي تتداخل مع نطاق النص حاسمة الفقرة هي تسلسل من النصوص ينتهي بحرف السطر الجديد، "\n".
  • getListParagraphs(), التي تعرض عناصر القائمة في نطاق النص الحالي.
  • getRuns(), التي توفّر عمليات تشغيل النصوص التي تتداخل مع نطاق النص الحالي حاسمة تشغيل النص هو جزء من النص حيث تحتوي جميع الأحرف على نفس النص والأسلوب.

أنماط النص

يحدد نمط النص عرض حروف النص في العرض التقديمي، بما في ذلك الخط واللون والارتباط التشعبي.

توفر الدالة getTextStyle() لنطاق نصي كائن TextStyle يُستخدم في النص المكتوب على نمطك. يغطي الكائن TextStyle النص نفسه الذي يغطيه العنصر الرئيسي TextRange.

العروض التقديمية/النمط/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);
}

يقوم المثال أعلاه بإنشاء مربع نص في الشريحة الأولى أولاً وتعيين المحتوى إلى "مرحبًا". ثم يضيف النص "العالم!" النص الملحق حديثًا بخط غامق ومرتبط بـ www.example.com، وتم ضبط لونه إلى الأحمر.

عند قراءة الأنماط، تعرض الدالة قيمة خالية إذا كان النطاق يحتوي على قيم متعددة حول النمط. وبالتالي ينتج عن النموذج أعلاه عبارات السجل التالية:

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

هناك العديد من الأنماط الأخرى التي يمكن تطبيقها على النص. يمكن الاطّلاع على المزيد من التفاصيل في مستندات TextStyle المرجعية.

تصميم الفقرة

تنطبق أنماط الفقرة على الفقرات بأكملها، وتشمل أشياء مثل محاذاة النص والسطر. تباعد. توفّر الدالة getParagraphStyle() في TextRange السمة ParagraphStyle لتصميم جميع الفقرات التي تتداخل مع نطاق النص الأصلي.

ينشئ المثال التالي مربع نص في الشريحة الأولى يحتوي على أربعة الفقرات ثم محاذاة الفقرات الثلاث الأولى من المنتصف.

العروض التقديمية/النمط/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 لتصميم جميع الفقرات. التي تتداخل مع نطاق النص الأصلي.

العروض التقديمية/النمط/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