Text bearbeiten und formatieren

Sie können Text mit Textbereichen bearbeiten und formatieren. Diese werden durch den TextRange Typ dargestellt. TextRange steht für ein Textsegment in 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 umfasst.

Falls Sie Methoden verwenden, die verändern, wie Text an Formen angepasst wird, werden alle auf die Form angewendeten automatischen Anpassungen deaktiviert.

Textbereiche verwenden

Ein Textbereich hat zwei Indizes, die das Textsegment begrenzen, das von einem Textbereich abgedeckt wird: den Startindex und den Endindex. Sie können diese Indizes mit den Funktionen getStartIndex und getEndIndex bestimmen.

Der Startindex eines Textbereichs ist inklusive und der Endindex ist exklusive. Beide Indizes sind nullbasiert.

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

Mit der Funktion getRange können Sie einen Unterbereich aus einem Textbereich abrufen.

Das folgende Skript erstellt ein Textfeld auf der ersten Folie und legt den Textinhalt auf „Hallo Welt!“ fest. Anschließend wird ein Unterbereich abgerufen, der nur „Hallo“ 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 umfasst immer den gesamten Text, auch wenn Text eingefügt und gelöscht wird. Dieses Beispiel erzeugt also die folgenden Log-Anweisungen:

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

Text einfügen und löschen

Mit Textbereichen können Sie Text in Formen und Tabellenzellen einfügen und löschen.

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

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 ein Textfeld auf der ersten Folie und legt den Textinhalt auf „Hallo Welt!“ fest. Anschließend werden die Zeichen 6 bis 11 („Welt“) gelöscht und an Index 6 der Text „Galaxie“ eingefügt. Dieses Beispiel erzeugt die folgende Log-Anweisung:

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

Suchen und ersetzen

Mit der Funktion replaceAllText für Präsentationen oder Seiten können Sie eine globale Suche und Ersetzung in der gesamten Präsentation oder auf einer bestimmten Seite durchführen.

Die Funktion find für TextRange gibt die Instanzen eines Strings im Bereich zurück. Sie kann zusammen mit setText verwendet werden, um in einer Form oder Tabellenzelle zu suchen und zu ersetzen.

Absätze, Listenelemente und Textabschnitte

TextRange bietet Funktionen zum Zurückgeben nützlicher Sammlungen von Textentitäten. Einige dieser Funktionen sind:

  • getParagraphs,: Gibt alle Absätze zurück, die sich mit dem Textbereich überschneiden. Ein Absatz ist eine Textfolge, die mit dem Zeilenumbruchzeichen „\n“ endet.
  • getListParagraphs,: Gibt die Listenelemente im aktuellen Textbereich zurück.
  • getRuns,: Gibt die Textabschnitte zurück, die sich mit dem aktuellen Textbereich überschneiden. Ein Textabschnitt ist ein Textsegment, in dem alle Zeichen denselben Textstil haben.

Textstil

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

Die Funktion getTextStyle eines Textbereichs gibt ein TextStyle Objekt zurück, mit dem Text formatiert wird. Das TextStyle-Objekt umfasst denselben Text wie das übergeordnete 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);
}

Im vorherigen Beispiel wird zuerst ein Textfeld auf der ersten Folie erstellt und der Inhalt auf „Hallo“ festgelegt. Dann wird der Text „Welt!“ angehängt. Der neu angehängte Text wird fett formatiert, mit www.example.com verknüpft und die Farbe wird auf Rot festgelegt.

Beim Lesen von Stilen gibt die Funktion „null“ zurück, wenn der Bereich mehrere Werte für den Stil hat. Dieses Beispiel erzeugt also die folgenden Log-Anweisungen:

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

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

Absatzstil

Absatzstile werden auf ganze Absätze angewendet und umfassen Dinge wie Textausrichtung und Zeilenabstand. Die getParagraphStyle Funktion in TextRange gibt ein ParagraphStyle Objekt zurück, mit dem alle Absätze formatiert werden, die sich mit dem übergeordneten Textbereich überschneiden.

Im folgenden Beispiel wird ein Textfeld auf der ersten Folie mit vier Absätzen erstellt und die ersten drei Absätze werden 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 ParagraphStyle kann ListStyle verwendet werden, um alle Absätze zu formatieren, 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 vorherigen Beispiel wird ein Textfeld auf der ersten Folie mit vier Absätzen erstellt: Der zweite Absatz wird einmal und der dritte Absatz zweimal eingerückt. Anschließend wird auf alle Absätze eine voreingestellte Liste 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 Skript erzeugt also 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