Use macros do ONLYOFFICE para adicionar facilmente TextForms a modelos de formulário mestre

10 janeiro 2024By Klaibson

Ao trabalhar com documentos de modelo de formulário, geralmente usamos espaços reservados fictícios e acabamos substituindo-os posteriormente por elementos de formulário. Nesta postagem do blog, automatizaremos esse processo usando uma macro no Editor de Documento que insere um TextForm em cada instância de uma palavra específica.

Use macros do ONLYOFFICE para adicionar facilmente TextForms a modelos de formulário mestre

Construindo a macro

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

Aqui, o documento atual é armazenado na variável oDocument. Em seguida, recuperamos o número total de elementos no documento usando o método GetElementsCount().

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

Um loop for é empregado nesta seção para percorrer cada elemento. Ao fazer isso, garantimos que inserimos o TextForm para a palavra especificada em cada elemento (parágrafo).

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

Dentro do for loop, adquirimos cada elemento do documento usando o método GetElement() com o elementIndex. Em seguida, extraímos o texto simples, armazenando-o na variável rawText.

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

Aqui, definimos a palavra-alvo para nossos comentários. Em seguida, determinamos o comprimento da palavra usando um for loop e armazenamos na variável wordLength.

   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; 
      let nextMatchPosition = matchPosition + wordLength;

Aqui, dentro de um while loop, 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).

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

Em seguida, armazenamos o intervalo para operar em insertRange. Em seguida, selecionamos o intervalo usando o 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,
      });

Por fim, inserimos um TextForm no intervalo selecionado. O método InsertTextForm() possui vários parâmetros. Você pode modificá-los de acordo com suas necessidades.

O código de macro completo

Aqui está o código para toda a 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();
  })();

Agora, vamos ver o desempenho de nossa macro.

Estamos confiantes de que a integração desta macro em seu fluxo de trabalho oForm aprimorará sua experiência com modelos de formulário e oForms.

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!