Utiliza las macros de ONLYOFFICE para añadir fácilmente TextForms a las plantillas de formularios

10 enero 2024By Sergey

Cuando trabajamos con plantillas de formularios, a menudo utilizamos marcadores de posición ficticios, y terminamos sustituyéndolos más tarde por elementos de formulario. En esta entrada del blog vamos a automatizar este proceso mediante el uso de una macro del Editor de documentos que inserta un TextForm en todos los ejemplos de una palabra específica.

Utiliza las macros de ONLYOFFICE para añadir fácilmente TextForms a las plantillas de formularios

Creación de la macro

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

Aquí el documento actual se almacena en la variable oDocument. Luego, recuperamos el número total de elementos en el documento usando el método GetElementsCount().

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

En esta sección se emplea un bucle for para circular por cada elemento. De este modo, nos aseguramos de insertar el TextForm de la palabra especificada en cada elemento (párrafo).

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

Dentro del bucle for, adquirimos cada elemento del documento utilizando el método GetElement() con el elementIndex. A continuación, extraemos el texto sin formato, almacenándolo en la variable rawText.

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

Aquí definimos la palabra objetivo de nuestros comentarios. A continuación, determinamos la longitud de la palabra mediante un bucle for y la almacenamos en la variable wordLength.

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

A continuación, se crea una expresión regular (wordRegex) utilizando la palabra objetivo para encontrar todas las apariciones en el documento.

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

Aquí, dentro de un bucle while, iteramos a través de todas las instancias encontradas y almacenadas en wordRegex.

Para cada coincidencia, se calcula la posición inicial de la palabra (matchPosition) y la posición del siguiente carácter después de la palabra (nextMatchPosition).

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

A continuación, almacenamos el rango a operar en insertRange. Luego, seleccionamos el rango usando el método 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,
      });

Finalmente, insertamos un TextForm en el rango seleccionado. El método InsertTextForm() tiene varios parámetros. Puedes modificarlos según tus necesidades.

Código completo de la macro

Aquí está el código de toda la 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();
  })();

Ahora, vamos a ver cómo funciona nuestra macro.

Estamos seguros de que la integración de esta macro en tu flujo de trabajo mejorará tu experiencia con las plantillas de formularios.

No te pierdas la oportunidad de aprovechar el poder de la API de ONLYOFFICE. Nuestra amplia biblioteca de métodos API es la clave para transformar tus ideas en realidad. Si tienes alguna pregunta o concepto innovador, te animamos a que lo compartas con nosotros. Tu opinión es muy valiosa, y nos entusiasma la posibilidad de colaborar contigo. Te deseamos mucha suerte en tus esfuerzos exploratorios.