Cómo añadir comentarios a la misma palabra con las macros de ONLYOFFICE

5 enero 2024By Sergey

Cuando trabajamos en documentos, hay ocasiones en las que es esencial incluir un comentario para una palabra específica que aparece repetidamente a lo largo del texto. En esta entrada del blog te mostraremos cómo puedes añadir comentarios de forma eficaz a la misma palabra, agilizando el proceso de edición y mejorando la claridad del documento.

Cómo añadir comentarios a la misma palabra con las macros de ONLYOFFICE

Creación de la macro

function addCommentToWord() {

La función addCommentToWord() está diseñada para añadir comentarios a cada aparición de una palabra especificada dentro del documento.

A continuación se presenta un breve resumen de sus componentes clave:

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

Aquí obtenemos el documento actual en la variable oDocument. A continuación, obtenemos todos los elementos del documento utilizando el método GetElementsCount().

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

Aquí se utiliza un bucle for para iterar a través de todos los elementos. Haciendo esto se añade un comentario a la palabra deseada en cada elemento (párrafo) del documento.

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

Dentro del bucle for, obtenemos cada elemento del documento utilizando el método GetElement y pasando el elementIndex. A continuación, extraemos el texto sin formato en la variable rawText.

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

Establecemos la palabra en la que queremos que aparezcan nuestros comentarios. A continuación, calculamos la longitud de la palabra mediante un bucle for, y la almacenamos en wordLength.

// Find all occurrences of the target word in the document
    const wordRegex = new RegExp("\\b" + targetWord + "\\b", "gi");

Después, 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; //returns the index where the word starts.
      let nextMatchPosition = matchPosition + wordLength;
      // Add a comment at the position of the match
      const comment = "YOUR COMMENT GOES HERE";
      const oParagraph = oDocument.GetElement(0);
      const range = oParagraph.GetRange(matchPosition, nextMatchPosition);
      range.AddComment(comment, "Comment's Author Name");
    } 
  }

Aquí dentro de un bucle while, iteramos a través de todas las palabras 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).

La variable comment contiene el comentario que quieres insertar. El método AddComment tiene un parámetro opcional que puede utilizarse para modificar el nombre del autor. Si no quieres usarlo, puedes excluir el parámetro opcional, y pasar solo la variable comment.

addCommentToWord();

Por último, se llama a la función addCommentToWord.

Código completo de la macro

Este es el código completo de la macro.

(function () {
  function addCommentToWord() {
    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 word";
      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.

        // Add a comment at the position of the match
        const comment = "YOUR COMMENT GOES HERE";
        const range = oElement.GetRange(matchPosition, nextMatchPosition);
        range.AddComment(comment, "Comment's Author Name");
      }
    }
  }

  addCommentToWord();
})();

Ahora vamos a ver cómo funciona nuestra macro.

Esperamos que esta macro facilite el manejo de comentarios repetitivos de palabras, proporcionando una herramienta útil para los usuarios que trabajan con el editor de documentos ONLYOFFICE.

No pierdas la oportunidad de aprovechar el poder de la API de ONLYOFFICE. Nuestra amplia biblioteca de métodos API es tu herramienta para transformar tus ideas en realidad. Si tienes preguntas o conceptos innovadores, te invitamos a compartirlos con nosotros. Tu opinión es muy valiosa, y nos entusiasma la posibilidad de colaborar contigo. Te deseamos mucha suerte en tus esfuerzos exploratorios.