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

تنظيم صفحاتك في مجموعات يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.

يمكنك تعديل النص ونمطه باستخدام النطاقات النصية، التي تمثلها النوع 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 ("العالم")، ويدرج النص "مجرة" في الفهرس 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