テキストの編集とスタイル設定

テキスト範囲TextRange 型で表される)を使用して、テキストを編集し、スタイルを設定できます。TextRange は、図形内またはテーブル セル内のテキストのセグメントを表します。図形またはテーブル セルで getText() を呼び出すと、テキスト全体をカバーするテキスト範囲が返されます。

テキストが図形内に収まるように編集するメソッドを使用すると、図形に適用されている自動調整の設定は無効になります。

テキスト範囲の使用

テキスト範囲には、テキスト範囲でカバーされるテキストのセグメントを区切る 2 つのインデックス(開始インデックス終了インデックス)があります。これらのインデックスは、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」)を削除し、代わりにインデックス 6 に「galaxy」というテキストを挿入します。上記の例では、次のログ ステートメントが生成されます。

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

検索と置換

プレゼンテーションまたはページで replaceAllText() 関数を使用すると、プレゼンテーション全体または特定のページで一括検索と置換を実行できます。

TextRange の find() 関数は、範囲内の文字列のインスタンスを返します。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 リファレンス ドキュメントをご覧ください。

段落のスタイル設定

段落スタイルは段落全体に適用され、テキストの配置や行間などが含まれます。TextRange の getParagraphStyle() 関数は、親テキスト範囲と重複するすべての段落のスタイル設定を行う ParagraphStyle オブジェクトを提供します。

次の例では、最初のスライドに 4 つの段落を含むテキスト ボックスを作成し、最初の 3 つの段落を中央揃えにします。

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);
}

上記の例では、最初のスライドにテキスト ボックスを作成し、4 つの段落を含めています。2 番目の段落は 1 回インデントされ、3 番目の段落は 2 回インデントされています。次に、リストのプリセットをすべての段落に適用します。最後に、各段落のネストレベルがログに記録されます。(段落のネストレベルは、段落のテキストの前のタブの数によって決まります)。上記のスクリプトでは、次のログ ステートメントが生成されます。

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