Como criar uma tabela a partir da lista numerada usando macros do ONLYOFFICE

13 fevereiro 2025Por Klaibson

Ao trabalhar com documentos, muitas vezes precisamos converter listas numeradas em tabelas para melhorar a legibilidade. Executar essa tarefa manualmente pode ser demorado. Felizmente, as macros do ONLYOFFICE permitem que os usuários automatizem tarefas repetitivas de forma eficiente. Nesta postagem do blog, forneceremos um guia passo a passo sobre como desenvolver uma macro do ONLYOFFICE que transforma perfeitamente listas numeradas em tabelas estruturadas.

Como criar uma tabela a partir da lista numerada usando macros do ONLYOFFICE

Construindo a macro

Recuperando o documento e os parágrafos numerados

A macro começa acessando o documento ativo e recuperando todos os parágrafos que contêm numeração:

const oDocument = Api.GetDocument();
const paragraphs = oDocument.GetAllNumberedParagraphs();
  • Api.GetDocument() recupera o documento aberto no momento.
  • oDocument.GetAllNumberedParagraphs() reúne todos os parágrafos que usam estilos de numeração.

Organizando itens numerados em linhas

O script itera por cada parágrafo numerado e os classifica em linhas de tabela:

let tableData = [];
let currentRow = [];

for (let i = 0; i < paragraphs.length; i++) {
    let level = paragraphs[i].GetNumbering().GetLevelIndex();
    let text = paragraphs[i].GetText().trim();

    if (level === 0) {
        if (currentRow.length > 0) {
            tableData.push(currentRow);
        }
        currentRow = [text];
    } else if (level === 1 && currentRow.length > 0) {
        currentRow.push(text);
    }
}

if (currentRow.length > 0) {
    tableData.push(currentRow);
}
  • O script percorre todos os parágrafos e verifica seus níveis de numeração.
  • Os itens de nível 0 iniciam uma nova linha, enquanto os itens de nível 1 são anexados como colunas na linha atual.
  • Após o processamento, todas as linhas coletadas são armazenadas em tableData.

Determinando as dimensões da mesa

Antes de criar a tabela, a macro determina o número de colunas necessárias. O script calcula maxColumns encontrando a linha mais longa em tableData. Isso garante que a tabela tenha colunas suficientes para acomodar todos os itens corretamente:

let maxColumns = 0;
for (let j = 0; j < tableData.length; j++) {
    if (tableData[j].length > maxColumns) {
        maxColumns = tableData[j].length;
    }
}

Criando e preenchendo a tabela

Agora que temos os dados organizados, a macro cria uma tabela e insere o conteúdo extraído:

let table = Api.CreateTable(maxColumns, tableData.length);
oDocument.Push(table);

for (let row = 0; row < tableData.length; row++) {
    for (let col = 0; col < tableData[row].length; col++) {
        table
            .GetCell(row, col)
            .GetContent()
            .GetElement(0)
            .AddText(tableData[row][col]);
    }
}
  • Api.CreateTable(maxColumns, tableData.length) cria uma tabela com as dimensões necessárias.
  • O script percorre tableData e insere o texto correspondente em cada célula.

Tratamento de erros

Para garantir uma execução suave, um bloco try…catch é usado para capturar e registrar erros. Se ocorrer um erro, ele será registrado no console, ajudando os usuários a depurar problemas:

try {
    // Code execution
} catch (error) {
    console.log("Error: " + error.message);
}

Agora vamos executar nossa macro e ver como ela funciona!

Esperamos que esta macro se torne uma adição valiosa ao seu kit de ferramentas, ajudando você a simplificar tarefas repetitivas em seu fluxo de trabalho. As macros do ONLYOFFICE são projetadas para agilizar seu trabalho e aumentar a eficiência. Nós o encorajamos a explorar nossa extensa biblioteca de API e criar macros personalizadas adaptadas às suas necessidades. Se você tiver alguma ideia ou sugestão, sinta-se à vontade para nos contatar. Estamos sempre abertos a novas ideias e colaboração! Boa sorte em seus esforços exploratórios!

Crie sua conta gratuita no ONLYOFFICE

Visualize, edite e colabore em documentos, planilhas, slides, formulários e arquivos PDF online.