Utilizza le macro di ONLYOFFICE per aggiungere facilmente TextForm ai modelli di modulo

12 gennaio 2024By Elena

Quando lavoriamo con i modelli di modulo, spesso utilizziamo segnaposto per poi sostituirli con elementi del modulo. In questo post del blog automatizzeremo questo processo utilizzando una macro dell’editor di documenti che inserisce un TextForm in ogni istanza di una parola specifica.

Use ONLYOFFICE macros to easily add TextForms to master form templates

Creazione della macro

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

Qui, il documento corrente è memorizzato nella variabile oDocument. Quindi, recuperiamo il numero totale di elementi nel documento utilizzando il metodo GetElementsCount().

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

In questa sezione viene utilizzato un ciclo for per scorrere ogni elemento. Così facendo, ci assicuriamo di inserire il TextForm in ogni elemento (paragrafo) per una parola specificata.

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

All’interno del ciclo for loop, acquisiamo ogni elemento del documento utilizzando il metodo GetElement() con elementIndex. Quindi estraiamo il testo semplice, memorizzandolo nella variabile rawText.

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

Qui definiamo la parola target per i nostri commenti. Successivamente determiniamo la lunghezza della parola utilizzando un ciclo for e la memorizziamo nella variabile wordLength.

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

Quindi, viene creata un’espressione regolare (wordRegex) utilizzando la parola di destinazione per trovare tutte le occorrenze nel documento.

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

Qui, all’interno di un ciclo while, iteriamo attraverso tutte le istanze trovate e archiviate in wordRegex.

Per ogni corrispondenza viene calcolata la posizione iniziale della parola (matchPosition) e la posizione del carattere successivo alla parola (nextMatchPosition).

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

Successivamente, memorizziamo l’intervallo per operare in insertRange. Quindi selezioniamo l’intervallo utilizzando il metodo 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,
      });

Infine, inseriamo un TextForm nell’intervallo selezionato. Il metodo InsertTextForm() ha vari parametri. Puoi modificarli in base alle tue esigenze.

L’intero codice della macro

Ecco il codice dell’intera macro.

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

Ora vediamo come funziona la nostra macro.

Siamo sicuri che l’integrazione di questa macro nel tuo flusso di lavoro migliorerà la tua esperienza con i modelli di modulo e moduli digitali oForm.

Sfruttare le funzionalità dell’API ONLYOFFICE. La nostra vasta libreria di metodi API aiuta a trasformare le tue idee in realtà. Se hai domande o idee, ti invitiamo a condividerli con noi. Il tuo contributo è molto apprezzato e siamo entusiasti della possibilità di collaborare con te. Buona fortuna per i tuoi sforzi esplorativi!