← Retour au Blog

Convertir JSON en Excel : Guide complet avec outils et code

Apprenez à convertir des données JSON en fichiers Excel (.xlsx, .csv). Guide pratique avec JavaScript, Python, outils en ligne et exemples de code.

Big JSON Team12 min de lecturetutorial
B

Big JSON Team

Technical Writer

Expert in JSON data manipulation, API development, and web technologies. Passionate about creating tools that make developers' lives easier.

12 min de lecture

# Convertir JSON en Excel : Guide complet avec outils et code

La conversion JSON vers Excel est une tâche courante en analyse de données. Ce guide vous montre toutes les méthodes pour convertir JSON en fichiers Excel (.xlsx) ou CSV.

Pourquoi convertir JSON en Excel ?

  • Analyse de données : Excel offre des outils puissants
  • Partage : Format familier pour non-développeurs
  • Visualisation : Graphiques et tableaux croisés dynamiques
  • Reporting : Génération de rapports automatisés

JSON vers CSV (Simple)

Méthode JavaScript

\\\javascript

function jsonToCSV(jsonData) {

const items = Array.isArray(jsonData) ? jsonData : [jsonData];

if (items.length === 0) return '';

// En-têtes

const headers = Object.keys(items[0]);

const csvHeaders = headers.join(',');

// Lignes

const csvRows = items.map(item =>

headers.map(header => {

const value = item[header];

// Échapper guillemets et virgules

if (typeof value === 'string') {

return \"${value.replace(/"/g, '""')}"\;

}

return value;

}).join(',')

);

return [csvHeaders, ...csvRows].join('\n');

}

// Exemple

const donnees = [

{nom: "Alice", age: 30, ville: "Paris"},

{nom: "Bob", age: 25, ville: "Lyon"},

{nom: "Charlie", age: 35, ville: "Marseille"}

];

const csv = jsonToCSV(donnees);

console.log(csv);

/

nom,age,ville

"Alice",30,"Paris"

"Bob",25,"Lyon"

"Charlie",35,"Marseille"

/

// Télécharger CSV

function downloadCSV(csv, filename = 'data.csv') {

const blob = new Blob([csv], {type: 'text/csv;charset=utf-8;'});

const link = document.createElement('a');

link.href = URL.createObjectURL(blob);

link.download = filename;

link.click();

}

downloadCSV(csv, 'utilisateurs.csv');

\\\

Méthode Python

\\\python

import json

import csv

# Charger JSON

with open('data.json', 'r', encoding='utf-8') as f:

data = json.load(f)

# Convertir en CSV

with open('output.csv', 'w', newline='', encoding='utf-8') as f:

if isinstance(data, list) and len(data) > 0:

writer = csv.DictWriter(f, fieldnames=data[0].keys())

writer.writeheader()

writer.writerows(data)

# Avec pandas (recommandé)

import pandas as pd

# Lire JSON

df = pd.read_json('data.json')

# Sauvegarder en CSV

df.to_csv('output.csv', index=False, encoding='utf-8')

\\\

JSON vers Excel (.xlsx)

Avec JavaScript (XLSX library)

\\\javascript

// Installation: npm install xlsx

import as XLSX from 'xlsx';

function jsonToExcel(jsonData, filename = 'data.xlsx') {

// Créer workbook

const wb = XLSX.utils.book_new();

// Convertir JSON en worksheet

const ws = XLSX.utils.json_to_sheet(jsonData);

// Ajouter worksheet au workbook

XLSX.utils.book_append_sheet(wb, ws, 'Données');

// Écrire fichier

XLSX.writeFile(wb, filename);

}

// Exemple

const utilisateurs = [

{nom: "Alice", age: 30, email: "alice@ex.com"},

{nom: "Bob", age: 25, email: "bob@ex.com"}

];

jsonToExcel(utilisateurs, 'utilisateurs.xlsx');

\\\

Avec formatage avancé

\\\javascript

import as XLSX from 'xlsx';

function jsonToExcelAvance(jsonData, filename) {

const wb = XLSX.utils.book_new();

const ws = XLSX.utils.json_to_sheet(jsonData);

// Largeur des colonnes

const wscols = [

{wch: 20}, // Colonne A

{wch: 10}, // Colonne B

{wch: 30} // Colonne C

];

ws['!cols'] = wscols;

// Style des en-têtes (nécessite xlsx-style)

const range = XLSX.utils.decode_range(ws['!ref']);

for (let C = range.s.c; C <= range.e.c; ++C) {

const address = XLSX.utils.encode_col(C) + "1";

if (!ws[address]) continue;

ws[address].s = {

font: {bold: true},

fill: {fgColor: {rgb: "CCCCCC"}}

};

}

XLSX.utils.book_append_sheet(wb, ws, 'Feuille1');

XLSX.writeFile(wb, filename);

}

\\\

Avec Python (openpyxl)

\\\python

import json

from openpyxl import Workbook

from openpyxl.styles import Font, PatternFill

# Charger JSON

with open('data.json', 'r', encoding='utf-8') as f:

data = json.load(f)

# Créer workbook

wb = Workbook()

ws = wb.active

ws.title = "Données"

# En-têtes

if data and len(data) > 0:

headers = list(data[0].keys())

ws.append(headers)

# Style des en-têtes

for cell in ws[1]:

cell.font = Font(bold=True)

cell.fill = PatternFill(start_color="CCCCCC",

end_color="CCCCCC",

fill_type="solid")

# Données

for item in data:

ws.append([item.get(h) for h in headers])

# Sauvegarder

wb.save('output.xlsx')

\\\

Avec Python (pandas - le plus simple)

\\\python

import pandas as pd

import json

# Lire JSON

with open('data.json', 'r', encoding='utf-8') as f:

data = json.load(f)

# Convertir en DataFrame

df = pd.DataFrame(data)

# Sauvegarder en Excel

df.to_excel('output.xlsx', index=False, sheet_name='Données')

# Avec formatage

with pd.ExcelWriter('output_formate.xlsx', engine='openpyxl') as writer:

df.to_excel(writer, index=False, sheet_name='Données')

# Accéder au worksheet

worksheet = writer.sheets['Données']

# Ajuster largeur colonnes

for column in worksheet.columns:

max_length = 0

column = [cell for cell in column]

for cell in column:

try:

if len(str(cell.value)) > max_length:

max_length = len(cell.value)

except:

pass

adjusted_width = (max_length + 2)

worksheet.column_dimensions[column[0].column_letter].width = adjusted_width

\\\

JSON imbriqué vers Excel

Aplatir JSON

\\\javascript

function flattenJSON(obj, prefix = '') {

const flattened = {};

for (const [key, value] of Object.entries(obj)) {

const newKey = prefix ? \${prefix}.${key}\ : key;

if (value && typeof value === 'object' && !Array.isArray(value)) {

Object.assign(flattened, flattenJSON(value, newKey));

} else if (Array.isArray(value)) {

flattened[newKey] = value.join(', ');

} else {

flattened[newKey] = value;

}

}

return flattened;

}

// Exemple

const jsonNested = {

nom: "Jean",

adresse: {

rue: "123 Rue Main",

ville: "Paris",

code: "75001"

},

hobbies: ["lecture", "sport"]

};

const flat = flattenJSON(jsonNested);

console.log(flat);

/

{

nom: "Jean",

"adresse.rue": "123 Rue Main",

"adresse.ville": "Paris",

"adresse.code": "75001",

hobbies: "lecture, sport"

}

/

\\\

Python avec json_normalize

\\\python

import pandas as pd

import json

# JSON imbriqué

with open('nested.json', 'r') as f:

data = json.load(f)

# Aplatir automatiquement

df = pd.json_normalize(data)

# Sauvegarder

df.to_excel('output.xlsx', index=False)

\\\

Outils en ligne

1. ConvertCSV.com

  • URL: convertcsv.com/json-to-csv.htm
  • Simple et rapide
  • Gratuit

2. Code Beautify

  • URL: codebeautify.org/json-to-excel-converter
  • Conversion directe JSON → Excel
  • Téléchargement immédiat

3. JSON-CSV.com

  • Options de configuration
  • Gestion JSON imbriqué

Cas d'usage avancés

Plusieurs feuilles Excel

\\\javascript

import * as XLSX from 'xlsx';

function createMultiSheetExcel(dataObj, filename) {

const wb = XLSX.utils.book_new();

// Créer une feuille pour chaque clé

for (const [sheetName, data] of Object.entries(dataObj)) {

const ws = XLSX.utils.json_to_sheet(data);

XLSX.utils.book_append_sheet(wb, ws, sheetName);

}

XLSX.writeFile(wb, filename);

}

// Exemple

const donnees = {

"Utilisateurs": [

{nom: "Alice", age: 30},

{nom: "Bob", age: 25}

],

"Produits": [

{nom: "Laptop", prix: 999},

{nom: "Souris", prix: 25}

]

};

createMultiSheetExcel(donnees, 'multi-sheets.xlsx');

\\\

API vers Excel

\\\javascript

async function apiToExcel(apiUrl, filename) {

const response = await fetch(apiUrl);

const data = await response.json();

const wb = XLSX.utils.book_new();

const ws = XLSX.utils.json_to_sheet(data);

XLSX.utils.book_append_sheet(wb, ws, 'API Data');

XLSX.writeFile(wb, filename);

}

// Utilisation

apiToExcel('https://api.example.com/users', 'users.xlsx');

\\\

Bonnes pratiques

  • Gérer les valeurs nulles
  • \\\javascript

    const cleanData = data.map(item => ({

    ...item,

    field: item.field ?? 'N/A'

    }));

    \\\

  • Formater les dates
  • \\\python

    df['date'] = pd.to_datetime(df['date']).dt.strftime('%Y-%m-%d')

    \\\

  • Limiter les grandes datasets
  • \\\javascript

    // Paginer si > 1M lignes

    const MAX_ROWS = 1000000;

    if (data.length > MAX_ROWS) {

    // Diviser en plusieurs fichiers

    }

    \\\

    Conclusion

    Meilleure méthode par langage :
    • JavaScript : Bibliothèque XLSX
    • Python : Pandas (le plus simple)
    • Rapide : Outils en ligne (données non-sensibles)

    Points clés :
  • CSV pour simplicité
  • XLSX pour formatage
  • Aplatir JSON imbriqué
  • Gérer gros volumes
  • Valider avant conversion
  • Share:

    Articles Connexes

    Read in English