Comment importer Excel dans une base de données

Le moyen le plus simple d'importer Excel dans une base de données est de transformer la feuille en SQL : une requête CREATE TABLE avec des types de colonnes adaptés et des requêtes INSERT pour les lignes, à exécuter dans SQL Server Management Studio, MySQL Workbench, pgAdmin ou n'importe quel client. Le convertisseur de cette page écrit ce SQL dans votre navigateur pour SQL Server, MySQL, PostgreSQL et SQLite ; pour des millions de lignes, exportez plutôt en CSV et utilisez l'outil de chargement en masse de la base.

7 min de lecture

La réponse courte

Une base de données ne sait pas lire un fichier .xlsx toute seule. Quelque chose doit lire la feuille, décider du type de chaque colonne, créer une table et insérer les lignes. Vous pouvez laisser faire l'assistant d'import de votre base, charger un CSV avec une commande de chargement en masse, ou générer du SQL simple que n'importe quel client de base de données peut exécuter.

Le SQL généré est la solution la plus portable et la plus facile à vérifier, car vous voyez exactement ce qui sera créé avant de toucher à la base. Dans le convertisseur ci-dessous, ouvrez le fichier .xlsx ou .csv (ou collez des cellules copiées depuis Excel), choisissez la Base de données, saisissez le Nom de la table, puis copiez ou téléchargez le script. Les types de colonnes sont détectés à partir des données, et les codes-barres ou les codes commençant par des zéros restent du texte.

Essayez ici : Excel en SQL

Ouvrir la page complète de l'outil

Préparez d'abord la feuille

La plupart des imports ratés viennent du tableur, pas de la base de données. Un tableur est fait pour être lu par des personnes ; une table a besoin d'un seul rectangle de données propre. Prenez deux minutes pour vérifier ces points avant d'importer quoi que ce soit :

  • Exactement une ligne d'en-tête avec des noms de colonnes uniques. Supprimez les titres au-dessus du tableau, les cellules d'en-tête fusionnées et les deuxièmes lignes d'en-tête.
  • Une ligne par enregistrement. Supprimez les lignes de total et de sous-total, les lignes vides de séparation et les notes sous les données.
  • Un seul type de valeur par colonne. Une colonne Prix ne doit pas contenir le texte sur demande dans certaines lignes ; laissez plutôt la cellule vide, elle deviendra NULL.
  • Pas de cellules fusionnées dans les données. Annulez la fusion et recopiez la valeur dans chaque ligne concernée.
  • Les formules ne posent pas de problème : c'est la dernière valeur calculée enregistrée dans le fichier qui est utilisée. Vérifiez que le classeur a été recalculé et enregistré après la dernière modification.
  • Mettez chaque table sur sa propre feuille. Quand un classeur contient plusieurs feuilles, le convertisseur affiche un sélecteur Feuille.

Les méthodes comparées

MéthodeIdéale pourPoints d'attention
SQL généré (cette page)Jusqu'à quelques dizaines de milliers de lignes, toute base, script relisibleLes très gros fichiers donnent de très gros scripts
Assistant Importation et exportation SQL ServerImports réguliers dans SQL ServerLire un .xlsx demande le Microsoft Access Database Engine ; les versions 32 bits et 64 bits doivent correspondre
Import Flat File de SSMSCSV vers SQL ServerVérifiez les types devinés avant de terminer
BULK INSERT (SQL Server), LOAD DATA (MySQL), COPY (PostgreSQL)Des millions de lignes depuis un CSVDroits d'accès au fichier sur le serveur, options de séparateur et d'encodage
Table Data Import Wizard de MySQL WorkbenchCSV ou JSON vers MySQLLent sur les gros fichiers
Import/Export de pgAdminCSV vers une table PostgreSQL existanteLa table doit exister d'abord
La commande .import du shell sqlite3 (mode csv)CSV vers SQLiteLes colonnes sont créées en TEXT si la table n'existe pas

Étape par étape avec le SQL généré

  • Ouvrez le fichier ou collez les cellules. La première ligne donne les noms de colonnes ; décochez La première ligne est l'en-tête si vos données n'en ont pas.
  • Choisissez la Base de données : SQL Server, MySQL, PostgreSQL ou SQLite. Les guillemets, les types et l'échappement changent selon ce choix.
  • Saisissez le Nom de la table. Avec Simplifier les noms activé, Nom du produit devient nom_du_produit, ce qui vous évite de mettre les noms entre guillemets dans chaque requête ensuite.
  • Choisissez Lignes par INSERT. 100 est une valeur sûre ; des lots plus grands s'importent plus vite. SQL Server accepte au maximum 1000 lignes dans une même liste VALUES, l'outil ne dépasse donc jamais ce nombre pour SQL Server.
  • Décidez des options : CREATE TABLE écrit la définition de la table, Supprimer d'abord la table efface une table existante du même nom (à réserver aux tables que vous voulez vraiment remplacer), et Utiliser une transaction rend l'import tout ou rien.
  • Copiez le SQL ou téléchargez le fichier .sql, puis exécutez-le dans votre client de base de données.

Les types de colonnes choisis par le convertisseur

Chaque colonne reçoit le type le plus étroit qui accepte toutes ses valeurs. Les colonnes de texte reçoivent une longueur arrondie au-dessus de la valeur la plus longue (par exemple VARCHAR(50) pour un maximum de 37 caractères), vous pouvez donc encore les élargir plus tard si besoin.

Données de la colonneSQL ServerMySQLPostgreSQLSQLite
Nombres entiersINT ou BIGINTINT ou BIGINTINTEGER ou BIGINTINTEGER
Nombres décimauxDECIMAL(p, s)DECIMAL(p, s)NUMERIC(p, s)REAL
true ou falseBITTINYINT(1)BOOLEANINTEGER
DatesDATEDATEDATETEXT
Date et heureDATETIME2DATETIMETIMESTAMPTEXT
Texte, codes commençant par zéroNVARCHAR(n)VARCHAR(n)VARCHAR(n)TEXT

Problèmes fréquents et comment les éviter

  • Les dates arrivent sous forme de nombres comme 45000. Excel enregistre les dates comme un nombre de jours (45000 correspond au 15 mars 2023). Quand vous lisez un .xlsx avec le convertisseur, les cellules de date redeviennent de vraies dates ; d'autres outils demandent parfois de formater d'abord la colonne en date.
  • Les zéros au début disparaissent. Les codes-barres, codes postaux et références comme 00123 doivent être du texte. Le convertisseur garde une colonne en texte quand ses valeurs commencent par zéro, et les nombres de plus de 15 chiffres restent aussi du texte.
  • Les lettres accentuées deviennent des points d'interrogation dans SQL Server. Le texte Unicode demande des colonnes NVARCHAR et le préfixe N devant les chaînes ; le script généré pour SQL Server utilise les deux. Dans MySQL, utilisez une table en utf8mb4.
  • Les nombres à virgule décimale. Dans les fichiers CSV séparés par des points-virgules, des valeurs comme 1.499,90 sont lues comme 1499.90. Dans les fichiers séparés par des virgules, la virgule sépare les colonnes, ces valeurs doivent donc être entre guillemets.
  • Les cellules vides. Elles deviennent NULL et la colonne est créée en acceptant les valeurs nulles. Si vous préférez du texte vide, modifiez-le après l'import.
  • Les apostrophes dans le texte. Une apostrophe comme dans L'Oréal casserait un INSERT écrit à la main ; les valeurs générées sont échappées, et les barres obliques inverses le sont aussi pour MySQL.

Quand utiliser plutôt un chargement en masse

Les scripts INSERT sont parfaits pour quelques milliers à quelques dizaines de milliers de lignes : vous pouvez les lire, les garder dans un gestionnaire de versions et les exécuter partout. Pour des centaines de milliers ou des millions de lignes, le script devient très gros et son exécution est plus lente qu'un chargement en masse.

Dans ce cas, enregistrez la feuille au format CSV UTF-8 et utilisez la commande de chargement de votre base : BULK INSERT dans SQL Server, LOAD DATA LOCAL INFILE dans MySQL, COPY ou \copy de psql dans PostgreSQL. Une solution intermédiaire pratique consiste à laisser le convertisseur écrire seulement la requête CREATE TABLE à partir d'un extrait des données, pour avoir des types de colonnes cohérents, puis à charger le CSV complet dans cette table avec la commande de chargement en masse.

Étape par étape

  1. Ajoutez les donnéesOuvrez un fichier .xlsx ou .csv, ou copiez des cellules dans Excel et collez-les dans la zone d'entrée.
  2. Choisissez la base et la tableSélectionnez SQL Server, MySQL, PostgreSQL ou SQLite sous Base de données et saisissez le Nom de la table.
  3. Réglez les optionsChoisissez Lignes par INSERT et cochez CREATE TABLE, Supprimer d'abord la table, Utiliser une transaction ou Simplifier les noms selon vos besoins.
  4. Vérifiez les types de colonnesLisez la partie CREATE TABLE du résultat et vérifiez que les codes sont en texte et les nombres en type numérique.
  5. Exécutez le SQLCopiez le script ou téléchargez le fichier .sql et exécutez-le dans votre client de base de données.

Questions fréquentes

Puis-je importer un fichier Excel directement dans SQL Server ?

Oui, avec l'assistant Importation et exportation SQL Server, mais la lecture d'un .xlsx demande que le Microsoft Access Database Engine soit installé sur la machine. Générer des requêtes INSERT évite cette dépendance et fonctionne avec n'importe quel client SQL Server.

Mon tableur est-il envoyé sur un serveur pour la conversion ?

Non. Le fichier est lu et le SQL est généré dans votre navigateur. Rien n'est envoyé à un serveur, ce qui compte pour des fichiers clients et des listes de prix.

Combien de lignes puis-je importer avec des requêtes INSERT ?

Quelques dizaines de milliers de lignes passent bien. Pour des millions de lignes, utilisez un chargement en masse comme BULK INSERT, LOAD DATA ou COPY avec un fichier CSV.

Les anciens fichiers .xls sont-ils pris en charge ?

Non. Ouvrez le fichier dans Excel ou LibreOffice, enregistrez-le en .xlsx et ouvrez cette copie. Les fichiers CSV fonctionnent aussi.

Puis-je ajouter des lignes à une table existante ?

Oui. Décochez CREATE TABLE et Supprimer d'abord la table, saisissez le nom de la table existante et vérifiez que les noms de colonnes correspondent. Seules les requêtes INSERT sont écrites.

Est-ce que ça fonctionne hors ligne ?

Oui. Une fois la page ouverte une première fois, elle continue de fonctionner sans connexion internet.