Modifier et mettre en forme du texte

Modifiez et mettez en forme du texte à l’aide de plages de texte, représentées par le TextRange type. Un TextRange représente un segment de texte dans une forme ou une cellule de tableau. L'appel de getText sur une forme ou une cellule de tableau renvoie une plage de texte qui couvre l'intégralité du texte.

Si vous utilisez des méthodes qui modifient l'ajustement du texte dans une forme, tous les paramètres d'ajustement automatique appliqués à la forme sont désactivés.

Utiliser des plages de texte

Une plage de texte comporte deux index qui délimitent le segment de texte couvert par une plage de texte : l'index de début et l'index de fin. Déterminez ces index à l'aide des fonctions getStartIndex et getEndIndex.

L'index de début d'une plage de texte est inclusif, et son index de fin est exclusif. Les deux index sont basés sur zéro.

Pour lire le contenu d'une plage de texte, utilisez les fonctions asString ou asRenderedString.

Pour récupérer une sous-plage dans une plage de texte, utilisez la fonction getRange.

Le script suivant crée une zone de texte sur la première diapositive et définit son contenu sur "Hello world!". Il récupère ensuite une sous-plage qui ne couvre que "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);
}

La plage de texte renvoyée par une forme ou une cellule de tableau couvre toujours l'intégralité du texte, même si du texte est inséré et supprimé. Cet exemple génère donc les instructions de journal suivantes :

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

Insérer et supprimer du texte

Vous pouvez insérer et supprimer du texte dans des formes et des cellules de tableau à l'aide de plages de texte.

  • insertText et appendText vous permettent d'insérer du texte.
  • setText remplace le texte d'une plage de texte par le texte fourni.
  • clear supprime le texte d'une plage de texte.

Le script suivant illustre l'utilisation de ces fonctions :

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

Ce script crée une zone de texte sur la première diapositive et définit son contenu sur "Hello world!". Il supprime ensuite les caractères 6 à 11 ("world") et insère le texte "galaxy" à l'index 6. Cet exemple génère l'instruction de journal suivante :

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

Rechercher et remplacer

Utilisez la fonction replaceAllText sur une présentation ou une page pour effectuer une recherche et un remplacement globaux dans l'ensemble de la présentation ou sur une page spécifique.

La fonction find sur TextRange renvoie les instances d'une chaîne dans la plage. Elle peut être utilisée avec setText pour effectuer une recherche et un remplacement dans une forme ou une cellule de tableau.

Paragraphes, éléments de liste et exécutions

TextRange fournit des fonctions permettant de renvoyer des collections utiles d'entités de texte. Voici quelques-unes de ces fonctions :

  • getParagraphs, qui fournit tous les paragraphes qui se chevauchent dans la plage de texte. Un paragraphe est une séquence de texte qui se termine par le caractère de nouvelle ligne, "\n".
  • getListParagraphs, qui renvoie les éléments de liste dans la plage de texte actuelle.
  • getRuns, qui fournit les exécutions de texte qui se chevauchent dans la plage de texte actuelle. Une exécution de texte est un segment de texte dans lequel tous les caractères ont le même style de texte.

Style du texte

Le style de texte détermine le rendu des caractères de texte dans votre présentation, y compris la police, la couleur et les liens hypertexte.

La fonction getTextStyle d'une plage de texte fournit un objet TextStyle utilisé pour appliquer un style au texte. L'objet TextStyle couvre le même texte que son parent 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);
}

L'exemple précédent crée d'abord une zone de texte sur la première diapositive et définit son contenu sur "Hello ". Il ajoute ensuite le texte "world!". Le texte nouvellement ajouté est mis en gras, lié à www.example.com et sa couleur est définie sur rouge.

Lors de la lecture des styles, la fonction renvoie la valeur nulle si la plage comporte plusieurs valeurs pour le style. Cet exemple génère donc les instructions de journal suivantes :

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

De nombreux autres styles peuvent être appliqués au texte. Pour en savoir plus, consultez la documentation de référence TextStyle.

Style de paragraphe

Les styles de paragraphe s'appliquent à des paragraphes entiers et incluent des éléments tels que l'alignement du texte et l'interligne. La fonction getParagraphStyle dans TextRange fournit un ParagraphStyle objet pour appliquer un style à tous les paragraphes qui se chevauchent dans la plage de texte parente.

L'exemple suivant crée une zone de texte sur la première diapositive avec quatre paragraphes, puis centre les trois premiers paragraphes.

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

Style de liste

Comme ParagraphStyle, ListStyle peut être utilisé pour appliquer un style à tous les paragraphes qui se chevauchent dans la plage de texte parente.

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

L'exemple précédent crée une zone de texte sur la première diapositive, contenant quatre paragraphes : le deuxième paragraphe est mis en retrait une fois et le troisième paragraphe deux fois. Il applique ensuite un préréglage de liste à tous les paragraphes. Enfin, le niveau d'imbrication de chaque paragraphe est enregistré. Le niveau d'imbrication du paragraphe provient du nombre de tabulations avant le texte du paragraphe. Le script génère donc les instructions de journal suivantes :

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