Converter XLSX para NDJSON

Aqui você converte XLSX para NDJSON de graça e sem conta: solte o arquivo acima e em poucos segundos o resultado está pronto para baixar. A conversão acontece dentro do seu próprio navegador, então o arquivo nunca é enviado. Funciona igual no Windows, no macOS e no Linux e também no iPhone e no Android, e continua funcionando mesmo se você cortar a conexão.

  • Onde roda No seu navegador. O arquivo nunca é enviado.
  • Reconstruído NDJSON funciona de um jeito diferente de XLSX. Não é a degradação gradual de um codec com perda: o que NDJSON consegue expressar é reproduzido fielmente, e o que não tem equivalente ali não sobrevive de jeito nenhum.
  • Limite de tamanho Até 100 MB por arquivo, de graça e sem conta.
  • Vale saber Só a primeira planilha é lida, e dela só os valores. Fórmulas, formatação, largura das colunas e todas as planilhas seguintes ficam de fora.

Até 100 arquivos de uma vez. Formatos misturados não são problema.

Por que algo quer registro um a um por linha

Um array JSON é um valor único. Para ler o último objeto dele, é preciso ter interpretado tudo antes, o que significa segurar o documento inteiro na memória. Para uma configuração isso é irrelevante. Para quatro milhões de linhas é a diferença entre uma importação funcionando e um processo derrubado pelo sistema.

JSON delimitado por linha remove o problema removendo o contêiner. Cada linha é um valor JSON completo e independente, então um consumidor lê uma linha, faz algo com ela, descarta e segue em frente com uso constante de memória.

Uma linha é um registro, garantido

A garantia só vale se nada nos dados puder produzir uma quebra de linha própria, e esta conversão garante isso. Uma célula com quebra de linha — um endereço com várias linhas — é escrita com a quebra escapada dentro da string JSON, então o registro fica numa linha só. Tabulação dentro de uma célula é escapada do mesmo jeito.

Essa é a vantagem concreta sobre um arquivo delimitado. Dividir o arquivo em pedaços de dez mil linhas é seguro, contar linhas dá o total de registros, e nenhuma linha pode ser corrompida pela linha acima.

Os tipos que a planilha sabia, gravados

Um arquivo delimitado tem um tipo só: texto. O que o lê depois tem que adivinhar, e adivinhar é onde identificador vira inteiro e número de versão vira decimal. JSON carrega a distinção explicitamente: quantidade é escrita como 12, sinalizador como true, valor ausente como null, e um código de produto que era texto na planilha continua entre aspas com os zeros à esquerda intactos.

Para uma carga num destino tipado, isso vale tempo real: o esquema declarado e os valores fornecidos concordam sem uma camada de coerção no meio.

O que a forma autodescritiva custa

Toda linha repete toda chave. Cinquenta mil linhas de seis colunas significam cinquenta mil cópias dos seis nomes de campo, o que numa planilha real ficou em cerca de 4,4 MB contra 1,8 MB para os mesmos dados como texto separado por tabulação.

Essa troca costuma valer a pena para este destino, porque o arquivo vai ser lido uma vez por uma máquina em vez de guardado para sempre. Em trânsito o tamanho quase não importa também, porque o arquivo comprime muito bem — as chaves repetidas são a coisa mais compressível dele.

Processando o arquivo sem abrir a planilha

As ferramentas seguem da forma. wc -l dá a contagem exata de linhas, porque há um registro por linha. head -1 mostra os nomes de campo como de fato foram escritos. split -l 10000 produz pedaços válidos por conta própria.

Para mais que isso, jq lê um fluxo de valores em vez de um documento só, então jq -c "select(.qty > 100)" filtra um arquivo maior que a memória e devolve o mesmo formato que consumiu.

O que um endpoint de carga em massa precisa além disto

Nem toda API que diz JSON delimitado por linha quer só isso. Requisições em massa do Elasticsearch e OpenSearch intercalam uma linha de instrução antes de cada documento, então o corpo tem o dobro de linhas dos registros e esta saída é a matéria-prima, não o payload.

Carregadores que aceitam o formato como está também existem e são o caso comum: um job de carga de warehouse apontado para JSON delimitado por linha, um produtor de fila lendo uma linha por mensagem. Confira a documentação do destino sobre se ele quer registros ou um corpo de requisição.

O campo de data que seu carregador vai aceitar sem reclamar

Datas numa planilha são contagens de dias vestidas de formato de exibição, e a conversão escreve o valor em vez da aparência: 1 de janeiro de 2024 vira 45292, e um timestamp vira esse número com uma fração para a hora.

Esse é o modo de falha a observar neste par especificamente, porque números JSON são legítimos e um carregador com coluna numérica vai aceitar 45292 sem reclamar e sem avisar nada. Converta esses campos deliberadamente numa etapa jq antes de carregar.

Nulos, linhas irregulares e qual planilha é usada

Uma célula vazia é escrita como null em vez de omitida, então todo objeto carrega as mesmas chaves. Onde linhas posteriores introduzem um campo que as anteriores não tinham, o conjunto de chaves é a união em toda a planilha, então nada é descartado por aparecer tarde.

Só a primeira planilha da pasta de trabalho é convertida, porque um fluxo de registros não tem como expressar "e agora uma tabela diferente". Se a planilha necessária não é a primeira, reordene a pasta de trabalho e converta de novo.

Onde a conversão roda, e quanto ela aguenta

Tudo acontece no seu navegador. A pasta de trabalho é interpretada e as linhas são escritas localmente, sem upload e sem fila — o que para uma exportação de dados de cliente sob política de proteção de dados é a diferença entre uma ferramenta que dá para usar no trabalho e uma que não dá.

O teto é 100 MB por pasta de trabalho e 100 arquivos num lote. Bem antes disso, a memória é o que você vai sentir, porque a planilha é lida num array antes de ser escrita: dezenas de megabytes é rotina, e chegar perto do teto é onde uma aba começa a sofrer.

Quando um array ou um formato colunar vence um fluxo

Se o consumidor é um programa que vai ler o arquivo inteiro e entregar a outra coisa — um fixture, um script de seed —, um array JSON é a forma que ele espera, e NDJSON só adiciona uma etapa de montagem. Converta para JSON nesse caso.

Se os registros vão ser consultados repetidamente em vez de carregados uma vez, converta para Parquet: mesmas linhas, uma fração dos bytes, e uma consulta que toca dois campos lê duas colunas em vez de cada linha.

Como converter XLSX para NDJSON

  1. Solte o seu arquivo XLSX nesta página, ou clique para escolher um.
  2. Escolha NDJSON como destino. A conversão acontece no seu navegador e o arquivo não é enviado.
  3. Baixe o arquivo NDJSON pronto.

XLSX ou NDJSON: o que muda

XLSX comparado com NDJSON
XLSXNDJSON
Nome completoPasta de trabalho do ExcelNewline-Delimited JSON
Extensão do arquivo.xlsx.ndjson, .jsonl
Tipo de mídiaapplication/vnd.openxmlformats-officedocument.spreadsheetml.sheetapplication/x-ndjson
Publicado pela primeira vez20072013
Publicado porMicrosoft
EspecificaçãoECMA-376
LicençaPadrão abertoPadrão aberto
Situação hojeAtualAtual
Abre no navegadorNenhum navegadorNenhum navegador
Considerado no lugarCSV, ODS, ParquetJSON, CSV

Abrir o resultado

Os programas de sempre não se cruzam: XLSX abre em Microsoft Excel, LibreOffice Calc e Google Sheets, e NDJSON em jq e pandas, então quem receber o resultado precisa de algum do segundo grupo.

Para que serve cada formato

Os dois miram trabalhos diferentes: XLSX em a edição, NDJSON em mover dados entre programas e a transmissão. Vale pesar isso antes, porque o motivo de um existir costuma ser o motivo de o outro ser incômodo.

XLSX é o formato da Microsoft, publicado em 2007. Está descrito em ECMA-376, e vale conhecer se o arquivo precisa sobreviver à ferramenta que o escreveu.

NDJSON e de 2013. jq e pandas leem o formato.

De XLSX para NDJSON: perguntas frequentes

Meu arquivo XLSX é enviado para algum lugar?

Não. Esta conversão acontece inteiramente no seu navegador, então o arquivo não sai do seu aparelho. Você mesmo pode conferir: abra a aba de rede das ferramentas de desenvolvedor e converta alguma coisa. Você verá a própria página e as requisições de estatística e de publicidade com que este serviço é pago, e nenhuma que leve o seu arquivo. O motor deste par específico é SheetJS, um leitor e gravador de planilhas em JavaScript; seu navegador baixa isso uma vez e guarda.

Converter XLSX para NDJSON é grátis?

É. Sem conta, sem marca d’água e sem cota diária para gastar: roda no seu próprio aparelho, então você pode voltar quantas vezes quiser. O navegador processa arquivos de até 100 MB, 100 por vez. SheetJS é baixado para a sua máquina e roda lá, e por isso não há contador.

Perde qualidade ao converter XLSX para NDJSON?

XLSX e NDJSON descrevem o conteúdo de maneiras radicalmente diferentes. A conversão é, portanto, uma reconstrução e não uma cópia: fiel, mas não idêntica byte a byte. Só a primeira planilha é lida, e dela só os valores. Fórmulas, formatação, largura das colunas e todas as planilhas seguintes ficam de fora.

Preciso instalar alguma coisa para abrir um arquivo NDJSON?

Para a conversão, não: ela acontece no navegador que você já tem aberto. Para abrir o resultado você precisa depois do programa com que o seu aparelho normalmente exibe Newline-Delimited JSON.

Mais sobre esses formatos