Cookies para estatística e publicidade
Usamos cookies de estatística e de publicidade, ambos enviados ao Google. Recusar não muda nada do que você vê.Ler a página de privacidade
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.
Até 100 arquivos de uma vez. Formatos misturados não são problema.
Eles são convertidos um após o outro e baixados juntos em um ZIP.
XLSX para NDJSON
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
| XLSX | NDJSON | |
|---|---|---|
| Nome completo | Pasta de trabalho do Excel | Newline-Delimited JSON |
| Extensão do arquivo | .xlsx | .ndjson, .jsonl |
| Tipo de mídia | application/vnd.openxmlformats-officedocument.spreadsheetml.sheet | application/x-ndjson |
| Publicado pela primeira vez | 2007 | 2013 |
| Publicado por | Microsoft | — |
| Especificação | ECMA-376 | — |
| Licença | Padrão aberto | Padrão aberto |
| Situação hoje | Atual | Atual |
| Abre no navegador | Nenhum navegador | Nenhum navegador |
| Considerado no lugar | CSV, ODS, Parquet | JSON, CSV |
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.
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.
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.
É. 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.
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.
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.