Text bearbeiten und Stile festlegen

Sie können Text mithilfe von Textbereichen bearbeiten und gestalten, die durch den Typ TextRange dargestellt werden. Ein TextRange steht für ein Textsegment innerhalb einer Form oder in einer Tabellenzelle. Wenn Sie getText() für eine Form oder Tabellenzelle aufrufen, wird ein Textbereich zurückgegeben, der den gesamten Text abdeckt.

Wenn Sie Methoden zum Bearbeiten von Text in eine Form verwenden, werden alle Einstellungen für die automatische Anpassung deaktiviert, die auf die Form angewendet werden.

Textbereiche verwenden

Ein Textbereich hat zwei Indexe, die das von einem Textbereich abgedeckte Textsegment begrenzen: den Startindex und den Endindex. Sie können diese Indexe mithilfe der Funktionen getStartIndex() und getEndIndex() ermitteln.

Verwenden Sie die Funktionen asString() oder asRenderedString(), um den Inhalt eines Textbereichs zu lesen.

Um einen Teilbereich aus einem Textbereich abzurufen, verwenden Sie die Funktion getRange().

Mit dem folgenden Skript wird auf der ersten Folie ein Textfeld erstellt und der Textinhalt wird auf "Hello world!" gesetzt. Anschließend wird ein Teilbereich abgerufen, der nur das „Hello“-Element umfasst.

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

Der von einer Form oder Tabellenzelle zurückgegebene Textbereich deckt immer den gesamten Text ab, auch wenn Text eingefügt und gelöscht wird. Das obige Beispiel erzeugt also die folgenden Loganweisungen:

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

Text einfügen und löschen

Sie können mithilfe von Textbereichen auch Textformen und Tabellenzellen einfügen und löschen.

  • Mit insertText() und appendText() können Sie Text einfügen.
  • setText() ersetzt den Text eines Textbereichs durch den angegebenen Text.
  • clear() löscht Text aus einem Textbereich.

Das folgende Skript veranschaulicht die Verwendung dieser Funktionen:

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

Dieses Skript erstellt auf der ersten Folie ein Textfeld und setzt den Textinhalt auf "Hello world!". Anschließend werden die Zeichen 6 bis 11 ("world") gelöscht und stattdessen der Text "galaxy" bei Index 6 eingefügt. Im obigen Beispiel wird die folgende Loganweisung generiert:

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

Suchen und ersetzen

Mit der Funktion replaceAllText() in einer Präsentation oder auf der Seite können Sie ein globales Suchen und Ersetzen in der gesamten Präsentation oder auf einer bestimmten Seite ausführen.

Die Funktion find() für TextRange gibt die Instanzen eines Strings innerhalb des Bereichs zurück. Es kann zusammen mit setText() verwendet werden, um das Suchen und Ersetzen innerhalb einer Form oder Tabellenzelle durchzuführen.

Absätze, Listenelemente und Ausführungen

TextRange bietet Funktionen, mit denen nützliche Sammlungen von Textentitäten zurückgegeben werden können. Zu diesen Funktionen gehören:

  • getParagraphs(), für alle Absätze, die sich mit dem Textbereich überschneiden. Ein Absatz ist eine Textsequenz, die mit dem Zeilenumbruchzeichen "\n" endet.
  • getListParagraphs(),: Gibt die Listenelemente im aktuellen Textbereich zurück.
  • getRuns(), gibt die Textläufe an, die den aktuellen Textbereich überlappen. Ein Textlauf ist ein Textsegment, bei dem alle Zeichen denselben Textstil haben.

Textstil

Der Textstil bestimmt das Rendern von Textzeichen in Ihrer Präsentation, einschließlich Schriftart, Farbe und Hyperlinks.

Die Funktion getTextStyle() eines Textbereichs stellt ein TextStyle-Objekt bereit, das zum Gestalten von Text verwendet wird. Das TextStyle-Objekt deckt denselben Text wie sein übergeordnetes TextRange-Objekt ab.

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

Im Beispiel oben wird zuerst ein Textfeld auf der ersten Folie erstellt und der Inhalt auf „Hello“ gesetzt. Anschließend wird der Text „world!“ angehängt. Der neu angehängte Text wird fett formatiert, mit www.example.com verknüpft und als Farbe auf Rot festgelegt.

Beim Lesen von Stilen gibt die Funktion null zurück, wenn der Bereich mehrere Werte für den Stil hat. Damit werden aus dem obigen Beispiel die folgenden Log-Anweisungen generiert:

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

Es gibt viele andere Stile, die auf Text angewendet werden können. Weitere Informationen finden Sie in der Referenzdokumentation zu TextStyle.

Absatzstil

Absatzstile gelten für ganze Absätze und umfassen beispielsweise die Textausrichtung und den Zeilenabstand. Die Funktion getParagraphStyle() in TextRange bietet ein ParagraphStyle-Objekt für das Gestalten aller Absätze, die sich mit dem übergeordneten Textbereich überschneiden.

Im folgenden Beispiel wird auf der ersten Folie ein Textfeld mit vier Absätzen erstellt. Die ersten drei Absätze werden dann zentriert ausgerichtet.

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

Listenstil

Ähnlich wie mit ParagraphStyle kann ListStyle für die Gestaltung aller Absätze verwendet werden, die sich mit dem übergeordneten Textbereich überschneiden.

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

Im obigen Beispiel wird auf der ersten Folie ein Textfeld mit vier Absätzen erstellt: Der zweite Absatz wird einmal und der dritte Absatz zweimal eingerückt. Dann wird eine Listenvoreinstellung auf alle Absätze angewendet. Schließlich wird die Verschachtelungsebene jedes Absatzes protokolliert. (Die Verschachtelungsebene des Absatzes ergibt sich aus der Anzahl der Tabulatoren vor dem Text des Absatzes.) Das obige Skript erzeugt die folgenden Log-Anweisungen:

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