3 votes

Utilisez Google Apps Script pour appliquer un style de titre à toutes les instances d'un mot

Je suis en train d'utiliser Google App Scripts dans un document Google, comment écrire une fonction pour trouver toutes les occurrences d'un mot et lui appliquer un style de titre :

Par exemple, je veux chaque occurrence de "Chiens"...

  • Chats
  • Chiens
  • Poissons

et styliser "chiens" avec "Titre 2" pour que cela ressemble à:

  • Chats

  • Chiens

  • Poissons

Utiliser la fonction Rechercher dans App Scripts sur Sheets est partout en ligne, mais il y a peu d'exemples d'utilisation des App Scripts dans les Docs. Sheets n'a pas l'option de reformater le texte en titres, donc il n'existe pas d'exemples à ce sujet.

3voto

Les méthodes à utiliser sont:

  • findText, appliqué au Body du document. Il trouve la première correspondance; les correspondances suivantes sont trouvées en passant la correspondance précédente comme deuxième paramètre "from". Le motif de recherche est une expression régulière présentée sous forme de chaîne, dans cet exemple (?i)\\bdogs\\b où (?i) signifie une recherche insensible à la casse, et \\b est un échappement pour \b, signifiant une limite de mot - donc nous ne redéfinissons pas "hotdogs" avec "dogs".
  • [getElement](https://developers.google.com/apps-script/reference/document/range-element#getElement()), appliqué à RangeElement retourné par findText. Le point est que le texte correspondant peut être seulement une partie de l'élément, et cette partie est appelée RangeElement. Nous ne pouvons pas appliquer de style d'en-tête à seulement une partie, donc l'élément entier est obtenu.
  • getParent, appliqué à l'élément Text retourné par getElement. Encore une fois, cela est dû au fait que le style d'en-tête s'applique à un niveau supérieur à Text.
  • setAttributes avec le style approprié (un objet créé à l'avance, en utilisant les enums appropriés). Cela s'applique au parent de Text, peu importe ce que c'est - un paragraphe, un élément de liste à puces, etc. On peut souhaiter être plus sélectif à ce sujet, et vérifier d'abord le type de l'élément, mais je ne le fais pas ici.

Exemple:

function dogs() {
  var body = DocumentApp.getActiveDocument().getBody();
  var style = {};
  style[DocumentApp.Attribute.HEADING] = DocumentApp.ParagraphHeading.HEADING2;
  var pattern = "(?i)\\bdogs\\b";

  var found = body.findText(pattern);
  while (found) {
    found.getElement().getParent().setAttributes(style);
    found = body.findText(pattern, found);
  }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X