Gerador de relatórios para Next.js

CSV, XLSX e JSON

A mesma definição de relatório vira planilha, texto ou dado estruturado. Todos os formatos partem do mesmo ReportDataset — o que muda é só o serializador final.

Exportar no navegador

useReportExport sem endpoint: CSV e JSON saem do core zero-dep; XLSX importa o módulo cosmemilton-report/xlsx sob demanda, só quando o botão é clicado.

Os 36 registros de vendas são serializados inteiramente no navegador — nada é enviado a um servidor.

CSV pt-BR

Pensado para abrir direto no Excel em português.

O separador padrão é ponto e vírgula (;), não vírgula — porque a vírgula já é o separador decimal em pt-BR. Sem isso, o Excel interpreta cada número como duas colunas.

O arquivo também sai com BOM UTF-8 por padrão: sem ele, acentos e "ç" viram caracteres corrompidos quando o Excel abre o CSV direto (duplo clique) em vez de importar via assistente.

Os três parâmetros são ajustáveis via CsvOptions:

tsx
import { exportReportToCsv, type CsvOptions } from "cosmemilton-report";

// Default: delimitador ";", BOM UTF-8 e quebra de linha "\r\n" — abre certo no Excel pt-BR.
const options: CsvOptions = { delimiter: ";", includeBom: true, lineBreak: "\r\n" };
const csv = exportReportToCsv({ definition: relatorioVendas, rows: vendas }, options);

XLSX

Planilha real, não CSV com extensão trocada.

Cada célula sai com o valor bruto (raw) e um numFmt do Excel derivado do format da coluna — datas e moedas ficam editáveis e ordenáveis na planilha, não são só texto formatado.

Grupos viram subtotais por seção e o total geral sai em negrito ao final, junto do cabeçalho com a cor de destaque do relatório.

Roda em Node e no navegador, mas o pacote exceljs é pesado — prefira gerar num route handler:

tsx
import { exportReportToXlsx } from "cosmemilton-report/xlsx";

// Recomendado num route handler: mantém o exceljs fora do bundle do cliente.
const buffer = await exportReportToXlsx(
  { definition: relatorioVendas, rows: vendas },
  { sheetName: "Vendas", autoFilter: true, freezeHeader: true },
);

Os 7 formatos de coluna

format da coluna decide como formatValue converte o valor bruto em texto — usado por PDF, CSV, XLSX e pela pré-visualização do editor.

FormatoObservaçãoExemplo de entradaSaída formatada
textTexto livre — apenas String(valor), sem transformação."Ana Souza"Ana Souza
numberDecimal com casas fixas (options.decimals, padrão 2).1234.51.234,50
integerInteiro — arredondado, sem casas decimais.1234.51.235
currencyMoeda via Intl.NumberFormat (options.locale/currency, padrão pt-BR/BRL).1234.5R$ 1.234,50
percentO valor bruto é a fração: 0.42 vira 42%.0.4242,00%
dateAceita Date, ISO "aaaa-mm-dd" (interpretado como data local) ou epoch em ms."2026-03-15"15/03/2026
datetimeMesmo parser de date, com hh:mm anexado.new Date(2026, 2, 15, 14, 30)15/03/2026 14:30
Linhas por página:1-7 de 7
Página 1 de 1

Casos especiais, fora da tabela: null/undefined sempre viram string vazia, e boolean sempre vira "Sim"/"Não" — não importa o format pedido pela coluna.