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:
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:
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.
| Formato | Observação | Exemplo de entrada | Saída formatada |
|---|---|---|---|
| text | Texto livre — apenas String(valor), sem transformação. | "Ana Souza" | Ana Souza |
| number | Decimal com casas fixas (options.decimals, padrão 2). | 1234.5 | 1.234,50 |
| integer | Inteiro — arredondado, sem casas decimais. | 1234.5 | 1.235 |
| currency | Moeda via Intl.NumberFormat (options.locale/currency, padrão pt-BR/BRL). | 1234.5 | R$ 1.234,50 |
| percent | O valor bruto é a fração: 0.42 vira 42%. | 0.42 | 42,00% |
| date | Aceita Date, ISO "aaaa-mm-dd" (interpretado como data local) ou epoch em ms. | "2026-03-15" | 15/03/2026 |
| datetime | Mesmo 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.