Como adicionar comentários a cada instância de uma palavra com macros ONLYOFFICE

5 janeiro 2024By Klaibson

Ao trabalhar em documentos, há momentos em que é essencial incluir um comentário para uma palavra específica que aparece repetidamente ao longo do texto. Nesta postagem do blog, mostraremos como você pode adicionar comentários com eficiência a cada instância de uma palavra específica, agilizando seu processo de edição e melhorando a clareza do documento.

Como adicionar comentários a cada instância de uma palavra com macros ONLYOFFICE

Construindo a macro

function addCommentToWord() {

A função addCommentToWord() foi criada para adicionar comentários a cada ocorrência de uma palavra especificada no documento.

Aqui está uma análise de seus principais componentes:

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

Aqui, obtemos o documento atual na variável oDocument. A seguir, obtemos todos os elementos do documento usando o método GetElementsCount().

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

Um loop for é usado aqui para iterar por todos os elementos. Isso adiciona um comentário à palavra desejada em cada elemento (parágrafo) do documento.

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

Dentro do loop for, obtemos cada elemento do documento usando o método GetElement e passando o elementIndex. Em seguida, extraímos o texto simples na variável rawText.

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

Definimos a palavra onde queremos que nossos comentários apareçam. A seguir, calculamos o comprimento da palavra usando um loop for e o armazenamos em wordLength.

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

Em seguida, uma expressão regular (wordRegex) é criada usando a palavra alvo para localizar todas as ocorrências no 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");
    } 
  }

Aqui, dentro de um loop while, iteramos por todas as instâncias encontradas e armazenadas no wordRegex.

Para cada correspondência, são calculadas a posição inicial da palavra (matchPosition) e a posição do próximo caractere após a palavra (nextMatchPosition).

A variável comment contém o comentário que você deseja inserir. O método AddComment possui um parâmetro opcional que pode ser usado para alterar o nome do autor. Se não quiser usá-lo, você pode excluir o parâmetro opcional e apenas passar a variável comment.

addCommentToWord();

Finalmente, a função addCommentToWord é chamada.

O código de macro completo

Aqui está o código inteiro da 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();
})();

Agora, vamos ver o desempenho de nossa macro.

Confiamos que esta macro facilitou muito o tratamento de comentários de palavras repetitivas, fornecendo uma ferramenta útil para usuários que lidam com o editor de documentos no ONLYOFFICE.

Não perca a chance de aproveitar o poder da API ONLYOFFICE. Nossa extensa biblioteca de métodos API é a chave para transformar suas ideias em realidade. Se você tiver alguma dúvida ou conceitos inovadores, encorajamos você a compartilhar conosco. Sua contribuição é altamente valorizada e estamos entusiasmados com a possibilidade de colaborar com você. Boa sorte em seus empreendimentos exploratórios!