JSON vers Excel
JSON vers Excel crée un vrai classeur .xlsx dans votre navigateur, et non un CSV renommé en .xls. Les nombres restent des nombres, le texte reste du texte, la ligne d’en-tête est figée et filtrable, et les objets imbriqués deviennent des chemins de colonne explicites. Rien n’est envoyé.
| 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 | Laisser chez le voisin |
Comment fonctionne JSON vers Excel ?
Presque tous les convertisseurs « JSON vers Excel » du Web produisent un fichier CSV avec l’extension .xls, et la différence compte plus qu’elle n’en a l’air. Une cellule CSV est du texte, rien de plus. Excel devine alors : il lit 00123 comme le nombre 123 et mange les zéros initiaux, il décide que 2026-10-03 est une date que vous en vouliez une ou non, et il transforme 1e5 en cent mille. C’est Excel qui se rend utile, et il n’y a aucun moyen de l’empêcher, car le fichier ne porte aucun type à opposer.
Un classeur porte des types. Cet outil écrit du SpreadsheetML — les parties XML à l’intérieur d’un .xlsx — si bien qu’un nombre JSON devient une cellule numérique, une chaîne JSON une cellule texte et un booléen un vrai booléen. "00123" reste 00123 parce que le document a dit que c’était une chaîne.
Objets imbriqués et tableaux
Un tableur est un rectangle et JSON est un arbre, donc quelque chose doit céder. Le choix fait ici est un encodage explicite des chemins, le même qu’emploie l’outil JSON vers CSV : customer.name pour un membre d’objet et tags[0] pour un indice de tableau. Les deux notations sont volontairement différentes pour qu’un nom de colonne ne puisse jamais être ambigu sur son origine.
L’ensemble des colonnes est l’union des champs de chaque enregistrement, dans l’ordre de première apparition. L’implémentation évidente lit les clés du premier enregistrement et perd tout ce qui apparaît ensuite — une note optionnelle sur une commande sur cinquante, une remise qui ne s’applique que parfois. Ces champs ont ici leur colonne, avec des cellules vides partout ailleurs.
Ce que contient le classeur
Une ligne d’en-tête en gras et figée pour que les noms de colonnes restent à l’écran pendant le défilement, un filtre automatique pour restreindre n’importe quelle colonne en un clic, et des largeurs de colonne mesurées à partir de la valeur la plus large de chacune, plutôt que laissées au réglage par défaut d’Excel. L’archive est écrite par le même writer ZIP qu’emploie l’export d’images par lot — aucune bibliothèque de tableur n’est chargée, car le format n’a pas changé depuis 2006 et une dépendance pour lui serait le plus gros morceau du bundle de cette route.
JSON en entrée
[
{ "id": 1, "user": { "name": "Ada" }, "tags": ["a","b"], "vip": true },
{ "id": 2, "user": { "name": "Grace" }, "tags": ["c"] }
]Cellules du classeur
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 en entrée → Cellules du classeur
JSON en entrée
[
{ "id": 1, "user": { "name": "Ada" }, "tags": ["a", "b"], "vip": true },
{ "id": 2, "user": { "name": "Grace" }, "tags": ["c"], "note": "gift" }
]Cellules du classeur
id user.name tags[0] tags[1] vip note 1 Ada a b true 2 Grace c gift
Quelles options et quels cas limites JSON vers Excel prend en charge ?
| Paramètre | Type | Valeur par défaut | Comportement et cas limites |
|---|---|---|---|
| Format de sortie | .xlsx | SpreadsheetML | Un vrai classeur OOXML, avec des cellules typées, un en-tête figé, un filtre automatique et des largeurs de colonne mesurées. Un CSV renommé en .xls ne peut en porter aucun, et c’est là toute la différence. |
| Nombres | type de cellule | numérique | Un nombre JSON devient une cellule numérique, donc les sommes et les moyennes fonctionnent aussitôt. Un nombre écrit comme une chaîne JSON reste une chaîne, et c’est ce qui préserve les codes produits, les numéros de téléphone et les zéros initiaux. |
| Tableaux | explode | join | explode | Explode produit tags[0], tags[1] et conserve chaque élément. Join regroupe un tableau de scalaires dans une seule cellule, séparée par votre délimiteur — c’est souvent ce que veut la personne qui lit la feuille, et c’est avec perte. Un tableau d’objets est toujours traité avec explode, car le regrouper détruirait la structure. |
| Objets imbriqués | chemin de colonne | customer.name | Des points pour les membres d’objet et des crochets pour les indices de tableau, si bien que les deux se distinguent et que l’ensemble des colonnes reste sans ambiguïté. Un convertisseur qui colle [object Object] dans une cellule est précisément l’échec que cela évite. |
| Ensemble de colonnes | union | tous les enregistrements | Chaque champ présent dans au moins un enregistrement, dans l’ordre de première apparition. Lire l’en-tête sur le premier enregistrement, c’est la façon la plus courante pour un export de perdre des données en silence. |
| En-tête figé | booléen | true | Fige la ligne 1, pour que les noms de colonnes restent visibles pendant le défilement d’un long export. Excel appelle cela « Figer les volets » ; c’est écrit dans la vue de la feuille plutôt que laissé au lecteur. |
| Filtre automatique | booléen | true | Ajoute les listes déroulantes de filtre à la ligne d’en-tête. Il faut au moins une ligne de données, car un filtre sur la seule ligne d’en-tête n’a rien à filtrer. |
| Structure de premier niveau | array | object | array | Un tableau d’enregistrements est l’entrée attendue. Un objet seul devient une ligne. Un objet dont le seul membre tableau est la donnée — l’enveloppe {"data":[…]} que renvoient la plupart des API — utilise ce tableau et le signale. |
| Taille de l’entrée | octets | 8 MB | Tout s’exécute sur le thread principal, donc au-delà de ce plafond, le classeur est refusé plutôt que tenté. Rien n’est envoyé, quelle que soit la taille. |
Questions fréquentes
Est-ce un vrai fichier Excel ou un CSV avec une autre extension ?
Un vrai classeur. La sortie est un .xlsx OOXML : un ZIP de parties SpreadsheetML, avec des cellules typées, une ligne d’en-tête figée en gras, un filtre automatique et des largeurs de colonne mesurées. C’est la différence qui compte — un CSV renommé en .xls ne porte aucun type, donc Excel doit deviner chaque cellule et se trompe sur les zéros initiaux, les codes produits et tout ce qui ressemble à une date.
Mes zéros initiaux survivront-ils ?
Oui, si le JSON les avait comme chaîne. {"sku":"00123"} écrit le texte 00123 et Excel affiche 00123, car la cellule dit que c’est du texte. {"sku":123} écrit le nombre 123, et c’est le document qui est exact, pas l’outil qui perd quelque chose. C’est la plainte la plus courante contre les exporteurs basés sur CSV, et la raison pour laquelle celui-ci écrit un classeur.
Que deviennent les objets imbriqués et les tableaux ?
Ils deviennent des chemins de colonne : {"customer":{"name":"Ada"}} produit une colonne nommée customer.name, et tags devient tags[0], tags[1]. La forme à crochets pour les tableaux est volontairement différente de la forme à points pour les objets, si bien qu’un nom de colonne ne peut jamais être ambigu sur son origine. Passez les tableaux en mode Join pour les obtenir dans une seule cellule — c’est avec perte, et cela ne s’applique qu’aux tableaux de scalaires.
Certains enregistrements ont des champs que d’autres n’ont pas. Sont-ils abandonnés ?
Non. L’ensemble des colonnes est l’union des champs de tous les enregistrements, dans l’ordre de première apparition, si bien qu’une note présente sur une commande sur cinquante obtient quand même sa propre colonne, avec des cellules vides ailleurs. Les exporteurs qui lisent l’en-tête sur le premier enregistrement perdent ces champs sans le dire.
Mes données sont-elles envoyées quelque part ?
Non. Le classeur est assemblé dans votre navigateur et passe directement au téléchargement. Ouvrez DevTools, allez dans le panneau Network, collez un document et cliquez sur Télécharger — aucune requête ne l’emporte. Cela compte plus qu’on ne le croit : le JSON que les gens mettent dans un tableur est généralement un vrai export de vrais enregistrements.
Quelle taille de document peut-il traiter ?
8 MB de JSON, soit des dizaines de milliers d’enregistrements. Au-delà, l’outil refuse plutôt que de figer l’onglet, car le travail se fait sur le thread principal. Le classeur lui-même est petit relativement à l’entrée : l’archive contient du texte XML et est écrite avec des entrées stored plutôt que deflated ; attendez-vous donc à un fichier un peu plus grand que le CSV équivalent.
Que peut faire d'autre JSON vers Excel ?
Quels outils liés devriez-vous utiliser ensuite ?
- Convertir JSON en CSVTransforme des enregistrements en feuille de calcul, imbrications comprises
- Convertir CSV en JSONLit un export de feuille de calcul, guillemets compris
- JSON vers ZodGénérez un schéma Zod qui valide à l’exécution, pas juste un type
- Formater du JSONIndente, trie les clés et supprime les commentaires