HOWTO · MySQL

Importer un fichier Excel dans une base de données MySQL

Vous découvrirez les différentes manières les plus simples d'importer des données d'un fichier Excel dans la base de données MySQL.

Sur cette page

Pour importer un classeur Excel dans MySQL, enregistrez une feuille de calcul au format CSV puis chargez-la avec LOAD DATA ou phpMyAdmin, ou utilisez Sqlizer.io pour convertir le classeur en SQL. Les méthodes avec CSV nécessitent une table de destination compatible ; la méthode avec Sqlizer.io part directement du classeur, mais produit du SQL à vérifier avant exécution. Les étapes ci-dessous utilisent une table d’étudiants avec les colonnes id, firstname, lastname, gender et city.

Utiliser l’instruction LOAD DATA pour importer des données

Enregistrez la feuille de calcul au format CSV (séparé par des virgules). Vérifiez que ses colonnes correspondent à celles de la table de destination, dans le même ordre et avec la même signification. L’exemple suppose que le CSV comporte une ligne d’en-tête, des champs séparés par des virgules, du texte entre guillemets doubles et des fins de ligne Unix. Il suppose également que la table de destination est vide pour le premier import ; un nouvel import peut créer des doublons, sauf si vous supprimez les lignes déjà importées ou configurez la gestion des doublons. Adaptez les options de format au fichier que vous avez réellement enregistré.

Avant le chargement, vous pouvez prévisualiser une ligne représentative du CSV avec la bibliothèque standard de Python. Ce petit exemple utilise une ligne avec les mêmes noms de colonnes que la table d’exemple :

import csv
from io import StringIO

sample = StringIO("id,firstname,lastname,gender,city\n1,Ada,Lovelace,F,London\n")
row = next(csv.DictReader(sample))
print(f"{row['firstname']} {row['lastname']} — {row['city']}")
Ada Lovelace — London

Cette prévisualisation vérifie que les noms d’en-tête et les valeurs sont lus comme prévu ; elle ne se connecte pas à MySQL et ne remplace pas l’instruction d’importation ci-dessous.

L’exemple pour MySQL 8.0.27 utilise un répertoire de téléversement du serveur Windows. LOAD DATA INFILE lit le chemin dans le système de fichiers du serveur MySQL : le fichier doit donc être accessible au serveur et autorisé par le paramètre secure_file_priv. Dans MySQL Workbench, exécutez l’instruction dans un onglet de requête connecté à ce serveur ; Workbench ne rend pas accessible au serveur un chemin situé sur votre poste de travail. La même règle d’accès côté serveur s’applique avec le client en ligne de commande. Avec LOAD DATA LOCAL INFILE, le client lit et envoie le fichier ; les paramètres du client et du serveur doivent tous deux autoriser le chargement local. En cas de refus d’accès, consultez les consignes de sécurité de MySQL pour LOAD DATA.

Pour le fichier d’exemple, l’instruction est LOAD DATA INFILE 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/students.csv' INTO TABLE tb_students FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' IGNORE 1 ROWS;. Remplacez le chemin, la table, le séparateur, le caractère d’encadrement et le terminateur de ligne pour les adapter à votre configuration. Pour des données séparées par des tabulations, utilisez FIELDS TERMINATED BY '\t' ; pour des données séparées par une seule espace, utilisez FIELDS TERMINATED BY ' '. Les fichiers CSV Windows utilisent souvent des fins de ligne \r\n : si les lignes ne sont pas séparées comme prévu, indiquez la fin de ligne réellement utilisée dans le fichier. IGNORE 1 ROWS ignore l’en-tête ; il ne fait pas correspondre les colonnes à partir de leur nom. Si le fichier ne contient pas id ou si l’ordre des colonnes diffère, indiquez les colonnes de destination correspondantes après le nom de la table et vérifiez que les valeurs générées automatiquement sont traitées comme prévu.

Après le chargement, vérifiez la table dans Workbench ou exécutez la requête SELECT id, firstname, lastname, gender, city FROM tb_students LIMIT 10;. Comparez les lignes avec le CSV et vérifiez le nombre de lignes importées avant d’utiliser les données.

Enregistrer la feuille de calcul au format CSV

Données du fichier CSV

Données de la table dans MySQL

Nouvelle table pour la ligne de commande

Instruction LOAD DATA dans l’invite de commandes

Résultat de LOAD DATA dans l’invite de commandes

Méthode 2 : utiliser Sqlizer.io pour importer des données

Utilisez Sqlizer.io pour convertir un classeur sans l’enregistrer d’abord au format CSV. Sélectionnez le classeur et MySQL comme type de base de données cible, puis indiquez si la première ligne contient des en-têtes. Choisissez la feuille de calcul active ou saisissez son nom, par exemple students, puis sélectionnez la feuille entière ou la plage de cellules à convertir. Indiquez le nom de la table de destination et générez le SQL.

Avant l’exécution, examinez les instructions générées : vérifiez la définition de la table, les noms de colonnes, les valeurs, ainsi que tout comportement de création de table ou de vérification de son existence. Exécutez le SQL sur la base de données voulue, puis examinez la table et comparez quelques lignes avec le classeur. Un classeur peut contenir des données confidentielles ; tenez compte de leur sensibilité et des conditions d’utilisation du service avant de les téléverser vers un convertisseur externe.

Sqlizer.io

Requêtes Sqlizer.io

Données des requêtes Sqlizer.io

Méthode 3 : importer des données avec phpMyAdmin

Cette méthode utilise également un fichier CSV. Enregistrez la feuille de calcul au format CSV, ouvrez la base de données cible, puis sélectionnez la table dont les colonnes correspondent au CSV. La table d’exemple, tb_students_phpmyadmin, comporte les colonnes id, firstname, lastname, gender et city. Dans phpMyAdmin, ouvrez l’onglet Import de la table, choisissez le fichier CSV et sélectionnez CSV comme format. Réglez les options propres au format en fonction du fichier, notamment le séparateur de champs, le caractère d’encadrement du texte, la fin de ligne et l’éventuelle exclusion de la ligne d’en-tête. Lancez l’importation avec Go.

Si les colonnes du CSV ne correspondent pas à celles de la table, corrigez la table ou le fichier avant l’importation ; choisir le format CSV ne fait pas correspondre les colonnes à partir de leurs noms d’en-tête. Une fois l’importation terminée, parcourez la table ou exécutez une requête sur ses lignes et comparez plusieurs valeurs ainsi que le nombre de lignes avec le fichier source.

Importer des données avec phpMyAdmin, étape 1

Importer des données avec phpMyAdmin, étape 2

Importer des données avec phpMyAdmin, étape 3

Importer des données avec phpMyAdmin, étape 4

Conclusion

Choisissez LOAD DATA si vous pouvez enregistrer une feuille au format CSV et si le serveur MySQL peut accéder au fichier ; utilisez phpMyAdmin pour importer un CSV depuis un navigateur. Sqlizer.io convertit un classeur en SQL, que vous pouvez examiner puis exécuter sur la base de données voulue. Quelle que soit la méthode, faites correspondre les colonnes et le format source à la table de destination, puis vérifiez les lignes insérées.