JSON para Excel
JSON para Excel cria uma pasta de trabalho .xlsx de verdade no seu navegador — não um CSV renomeado para .xls. Números continuam números, texto continua texto, a linha de cabeçalho fica congelada e com filtro, e objetos aninhados viram caminhos de coluna explícitos. Nada é enviado.
| id | customer.name | customer.email | total | currency | tags[0] | tags[1] | shipped | note |
|---|---|---|---|---|---|---|---|---|
| ord_1041 | Ada Lovelace | [email protected] | 148.5 | GBP | priority | gift | TRUE | — |
| ord_1042 | Grace Hopper | [email protected] | 92 | USD | standard | — | FALSE | Deixar com o vizinho |
Como funciona o JSON para Excel?
Quase todo conversor de “JSON para Excel” na web produz um arquivo CSV com extensão .xls, e a diferença importa mais do que parece. Uma célula CSV é texto e nada mais. O Excel então adivinha: lê 00123 como o número 123 e engole os zeros à esquerda, decide que 2026-10-03 é uma data queira você ou não, e transforma 1e5 em cem mil. É o Excel querendo ajudar, e não há como impedir, porque o arquivo não carrega tipos com os quais discordar.
Uma pasta de trabalho carrega tipos. Esta ferramenta grava SpreadsheetML — as partes XML dentro de um .xlsx — então um número JSON se torna uma célula numérica, uma string JSON se torna uma célula de texto e um booleano se torna um booleano de verdade. "00123" continua 00123 porque o documento disse que era uma string.
Objetos aninhados e arrays
Uma planilha é um retângulo e JSON é uma árvore, então algo tem que ceder. A escolha aqui é uma codificação explícita de caminhos, a mesma que a ferramenta JSON para CSV usa: customer.name para um membro de objeto e tags[0] para um índice de array. As duas notações são deliberadamente diferentes, de modo que um nome de coluna nunca fica ambíguo quanto à origem.
O conjunto de colunas é a união dos campos de cada registro, na ordem em que aparecem pela primeira vez. A implementação óbvia lê as chaves do primeiro registro e perde tudo que surge depois — uma nota opcional em um pedido a cada cinquenta, um desconto que só vale às vezes. Esses campos ganham uma coluna aqui, com células vazias nos demais.
O que a pasta de trabalho contém
Uma linha de cabeçalho em negrito e congelada, para que os nomes das colunas continuem na tela enquanto você rola; um autofiltro, para estreitar qualquer coluna em um clique; e larguras de coluna medidas a partir do valor mais largo de cada coluna, em vez de ficar no padrão do Excel. O arquivo é gravado pelo mesmo escritor ZIP que a exportação de imagens em lote usa — nenhuma biblioteca de planilha é carregada, porque o formato não mudou desde 2006 e uma dependência para ele seria a maior coisa no bundle desta rota.
JSON de entrada
[
{ "id": 1, "user": { "name": "Ada" }, "tags": ["a","b"], "vip": true },
{ "id": 2, "user": { "name": "Grace" }, "tags": ["c"] }
]Células da pasta de trabalho
A1: id B1: user.name C1: tags[0] D1: tags[1] E1: vip A2: 1 B2: Ada C2: a D2: b E2: TRUE A3: 2 B3: Grace C3: c D3: (empty) E3: (empty)
JSON de entrada → Células da pasta de trabalho
JSON de entrada
[
{ "id": 1, "user": { "name": "Ada" }, "tags": ["a", "b"], "vip": true },
{ "id": 2, "user": { "name": "Grace" }, "tags": ["c"], "note": "gift" }
]Células da pasta de trabalho
id user.name tags[0] tags[1] vip note 1 Ada a b true 2 Grace c gift
Quais opções e casos-limite o JSON para Excel suporta?
| Parâmetro | Tipo | Padrão | Comportamento e casos-limite |
|---|---|---|---|
| Formato de saída | .xlsx | SpreadsheetML | Uma pasta de trabalho OOXML de verdade: células com tipo, cabeçalho congelado, autofiltro e larguras de coluna medidas. Um CSV renomeado para .xls não pode carregar nada disso — aí está toda a diferença. |
| Números | tipo de célula | numérico | Um número JSON se torna uma célula numérica, então somas e médias funcionam de imediato. Um número escrito como string JSON continua sendo string, e é isso que preserva códigos de produto, telefones e zeros à esquerda. |
| Arrays | explode | join | explode | Explode gera tags[0], tags[1] e mantém cada elemento. Join condensa um array de escalares em uma única célula separada pelo seu delimitador — em geral o que quem lê a planilha quer, e com perda. Um array de objetos sempre passa por explode, porque juntá-lo destruiria a estrutura. |
| Objetos aninhados | caminho de coluna | customer.name | Caminhos com ponto para membros de objeto e colchetes para índices de array, de modo que os dois se distinguem e o conjunto de colunas fica sem ambiguidade. Um conversor que cola [object Object] numa célula é justamente a falha que isso evita. |
| Conjunto de colunas | união | todos os registros | Todos os campos que aparecem em qualquer registro, na ordem em que surgem pela primeira vez. Ler o cabeçalho do primeiro registro é o jeito mais comum de uma exportação descartar dados em silêncio. |
| Cabeçalho congelado | booleano | true | Congela a linha 1, para que os nomes das colunas continuem visíveis ao rolar por uma exportação longa. O Excel chama isso de Congelar Painéis; fica gravado na exibição da planilha em vez de ficar para o leitor configurar. |
| Autofiltro | booleano | true | Adiciona os menus de filtro à linha de cabeçalho. Precisa de pelo menos uma linha de dados, porque um filtro sobre apenas o cabeçalho não tem nada para filtrar. |
| Estrutura do nível superior | array | object | array | Um array de registros é a entrada esperada. Um objeto único vira uma linha. Um objeto cujo único membro array é o dado — o envelope {"data":[…]} que a maioria das APIs retorna — usa esse array e o indica. |
| Tamanho da entrada | bytes | 8 MB | Tudo roda na thread principal, então acima desse teto a pasta de trabalho é recusada em vez de tentada. Nada é enviado, independentemente do tamanho. |
Perguntas frequentes
Isto é um arquivo Excel de verdade ou um CSV com outra extensão?
Uma pasta de trabalho de verdade. A saída é um .xlsx OOXML: um ZIP de partes SpreadsheetML, com células com tipo, uma linha de cabeçalho congelada e em negrito, um autofiltro e larguras de coluna medidas. Essa é a diferença que importa — um CSV renomeado para .xls não carrega tipos, então o Excel precisa adivinhar cada célula e erra em zeros à esquerda, códigos de produto e qualquer coisa que pareça uma data.
Meus zeros à esquerda vão sobreviver?
Sim, se o JSON os tinha como string. {"sku":"00123"} grava o texto 00123 e o Excel mostra 00123, porque a célula diz que é texto. {"sku":123} grava o número 123, e isso é o documento sendo fiel, e não a ferramenta perdendo algo. É a reclamação mais comum contra exportadores baseados em CSV e a razão de este gravar uma pasta de trabalho.
O que acontece com objetos aninhados e arrays?
Eles viram caminhos de coluna: {"customer":{"name":"Ada"}} produz uma coluna chamada customer.name, e tags vira tags[0], tags[1]. A forma com colchetes para arrays é deliberadamente diferente da forma com ponto para objetos, então um nome de coluna nunca fica ambíguo quanto à origem. Mude os arrays para o modo Join para tê-los em uma célula só — com perda, e vale apenas para arrays de escalares.
Alguns registros têm campos que outros não têm. Eles são descartados?
Não. O conjunto de colunas é a união dos campos de todos os registros, na ordem em que aparecem pela primeira vez, então uma nota que aparece em um pedido a cada cinquenta continua tendo sua própria coluna, com células vazias nos demais. Exportadores que leem o cabeçalho do primeiro registro perdem esses campos sem avisar.
Meus dados são enviados para algum lugar?
Não. A pasta de trabalho é montada no seu navegador e vai direto para o download. Abra o DevTools, vá ao painel Network, cole um documento e clique em Baixar — nenhuma requisição leva os dados. Isso importa mais do que parece: o JSON que as pessoas colocam em uma planilha costuma ser uma exportação real de registros reais.
Qual o tamanho máximo de documento?
8 MB de JSON, ou seja, dezenas de milhares de registros. Acima disso, a ferramenta recusa em vez de congelar a aba, porque o trabalho acontece na thread principal. A pasta de trabalho em si é pequena em relação à entrada: o arquivo contém texto XML e é gravado com entradas stored em vez de deflated, então espere um arquivo um pouco maior que o CSV equivalente.