Utilisez les macros ONLYOFFICE pour ajouter facilement des TextForms aux modèles de formulaires

10 janvier 2024By Dasha

Lorsque nous travaillons avec des modèles de formulaires, nous utilisons souvent des espaces réservés fictifs que nous remplaçons par la suite par des éléments de formulaire. Dans cet article, nous allons automatiser ce processus en utilisant une macro de l’éditeur de documents texte qui insère un TextForm à chaque occurrence d’un mot spécifique.

Use ONLYOFFICE macros to easily add TextForms to master form templates

Construction de la macro

  const oDocument = Api.GetDocument();
  const numberOfElements = oDocument.GetElementsCount();

Ici, le document actuel est stocké dans la variable oDocument. Ensuite, nous récupérons le nombre total d’éléments dans le document en utilisant la méthode GetElementsCount().

for (let elementIndex = 0; elementIndex < numberOfElements; elementIndex++)

Une boucle for est utilisée dans cette section pour parcourir chaque élément. Ce faisant, nous nous assurons que nous insérons le formulaire de texte correspondant au mot spécifié dans chaque élément (paragraphe).

    const oElement = oDocument.GetElement(elementIndex);
    const rawText = oElement.GetText();

Dans la boucle for, nous acquérons chaque élément du document en utilisant la méthode GetElement() avec elementIndex. Ensuite, nous extrayons le texte brut, en le stockant dans la variable rawText.

 const targetWord = "sample";
    let count = 0;
    for (let i = 0; i < targetWord.length; i++) {
      count++;
    }
    const wordLength = count - 1;

Nous définissons ici le mot cible de nos commentaires. Ensuite, nous déterminons la longueur du mot à l’aide d’une boucle for et la stockons dans la variable wordLength.

   const wordRegex = new RegExp("\\b" + targetWord + "\\b", "gi");

Ensuite, une expression régulière (wordRegex) est créée en utilisant le mot cible pour trouver toutes les occurrences dans le document.

    let match;
    while ((match = wordRegex.exec(rawText)) !== null) {
      let matchPosition = match.index; 
      let nextMatchPosition = matchPosition + wordLength;

Ici, à l’intérieur d’une boucle while, nous parcourons toutes les instances trouvées et stockées dans wordRegex.

Pour chaque correspondance, la position de départ du mot (matchPosition) et la position du caractère suivant le mot (nextMatchPosition) sont calculées.

const insertRange = oElement.GetRange(matchPosition, nextMatchPosition);
insertRange.Select();

Ensuite, nous stockons la plage à exploiter dans insertRange. Nous sélectionnons ensuite la plage à l’aide de la méthode Select().

oDocument.InsertTextForm({
        key: "Personal information",
        tip: "Enter your first name",
        required: true,
        placeholder: "Name",
        comb: true,
        cellWidth: 3,
        multiLine: false,
        autoFit: false,
        placeholderFromSelection: true,
        keepSelectedTextInForm: false,
      });

Enfin, nous insérons un formulaire de texte dans la plage sélectionnée. La méthode InsertTextForm() possède plusieurs paramètres. Vous pouvez les modifier en fonction de vos besoins.

Code complet de la macro

Voici le code de la macro entière.

(function () {
    function addTextForm() {
      const oDocument = Api.GetDocument();
      const numberOfElements = oDocument.GetElementsCount();
  
      //looping through all the elements in the document.
      for (
        let elementIndex = 0;
        elementIndex < numberOfElements;
        elementIndex++
      ) {
        const oElement = oDocument.GetElement(elementIndex);
        const rawText = oElement.GetText();
  
        // Specify the target word and the length of the word
        const targetWord = "sample";
        let count = 0;
        for (let i = 0; i < targetWord.length; i++) {
          count++;
        }
        const wordLength = count - 1;
  
        // Find all occurrences of the target word in the document
        const wordRegex = new RegExp("\\b" + targetWord + "\\b", "gi");
        let match;
        while ((match = wordRegex.exec(rawText)) !== null) {
          let matchPosition = match.index; // returns the index where the word starts.
          let nextMatchPosition = matchPosition + wordLength; //the index where the word ends.
          console.log(matchPosition);
          console.log(nextMatchPosition);
          const insertRange = oElement.GetRange(matchPosition, nextMatchPosition);
          insertRange.Select();
          //insert a text form at the selected range
          oDocument.InsertTextForm({
            key: "Personal information",
            tip: "Enter your first name",
            required: true,
            placeholder: "Name",
            comb: true,
            cellWidth: 3,
            multiLine: false,
            autoFit: false,
            placeholderFromSelection: true,
            keepSelectedTextInForm: false,
          });
        }
      }
    }
  
    addTextForm();
  })();

Voyons maintenant comment fonctionne notre macro.

Nous sommes convaincus que l’intégration de cette macro dans votre flux de travail avec des modèles de formulaires améliorera votre expérience utilisateur.

Ne manquez pas l’occasion d’exploiter la puissance de l’API ONLYOFFICE. Notre vaste bibliothèque de méthodes API est la clé pour transformer vos idées en réalité. Si vous avez des questions ou des concepts innovants, nous vous encourageons à les partager avec nous. Votre contribution est très appréciée et nous nous réjouissons de la possibilité de collaborer avec vous. Nous vous souhaitons bonne chance dans vos projets exploratoires !