Comment importer un fichier Excel dans une base de données MySQL

88

Quelqu'un peut-il expliquer comment importer un fichier Microsoft Excel dans une base de données MySQL?

Par exemple, mon tableau Excel ressemble à ceci:

Country   |   Amount   |   Qty
----------------------------------
America   |   93       |   0.60

Greece    |   9377     |   0.80

Australia |   9375     |   0.80
Fero
la source
[Vous pouvez jeter un œil à ce fil de discussion] [1] sur les forums MySQL. Il explique comment faire exactement ce que vous voulez. [1]: forums.mysql.com/read.php?32,216343,216344#msg-216344
Kredns
1
Cet utilitaire gratuit permet d'importer rapidement et facilement des feuilles de calcul Excel dans des tables mysql panofish.net
...
+1 pour une idée nouvelle et différente. Le traitement est incroyablement lent, il lit d'abord chaque ligne du fichier, puis télécharge tout. Il a fallu environ 15 minutes pour importer 5,2K lignes
Fr0zenFyr
Pour certaines feuilles de calcul, cela peut être lent, en raison du nombre de colonnes et de lignes. Mais, je blâme la bibliothèque microsofts com-object qui est ce qui est utilisé pour lire la feuille de calcul. Mon programme lit la feuille de calcul aussi vite que la bibliothèque le permet. Les inserts mysql sont très rapides. Si vous pouvez éliminer les colonnes inutiles avant d'importer ... cela peut vous aider.
panofish
J'avais 14 colonnes sur 5173 lignes. J'avais déjà sélectionné toutes les colonnes / lignes vides et les ai supprimées pour éviter un traitement inutile. Le système que j'utilisais avait 2,5G de RAM et un processeur core2duo, n'avait pas beaucoup de processus en cours d'exécution, l'onglet de performances montrait une utilisation de 65% en tout et beaucoup de RAM encore inutilisée. Donc, je suppose que je ne blâmerais pas le matériel, mais comme vous l'avez dit, les objets MS com sont nuls ... Je ne sais pas quand MS arrêtera de construire des conneries qui ressemblent à des sauveurs de vie pour les novices. J'en ai marre de faire des conneries supplémentaires pour les produits MS.
Fr0zenFyr

Réponses:

46
  1. Exportez-le dans un format de texte. Le plus simple sera probablement une version délimitée par des tabulations, mais CSV peut également fonctionner.

  2. Utilisez la capacité de chargement des données. Voir http://dev.mysql.com/doc/refman/5.1/en/load-data.html

  3. Regardez à mi-chemin de la page, car cela donnera un bon exemple de données séparées par des tabulations:

    CHAMPS TERMINÉS PAR '\ t' FERMÉ PAR '' ÉCHAPPÉ PAR '\'

  4. Vérifiez vos données. Parfois, les guillemets ou les échappements posent des problèmes, et vous devez ajuster votre source, commande d'importation - ou il peut simplement être plus facile de post-traiter via SQL.

ndp
la source
2
Lors de l'exportation au format CSV, [au moins] excel 2013 tente activement d'empoisonner les données en utilisant des guillemets doubles échappés par VBA, en utilisant un séparateur décimal dépendant des paramètres régionaux (en fonction des paramètres régionaux du système d'exploitation) pour les valeurs 0 (par exemple ',', tout en utilisant 'comme défini dans le séparateur des propriétés de la cellule pour toutes les autres valeurs. Il
vaut mieux éviter le format
1
Notez que cette procédure nécessite que vous créiez d'abord la table, avec les champs appropriés.
LarsH
Ce n'est pas le seul problème. Je ne suis pas sûr que cette procédure traite correctement le retour chariot à l'intérieur d'une cellule dans Excel. Même les importations de CSV pour exceller échouent en cela
Raul Luna
1
@ afk5min qu'entendez-vous par "données de poison" ??? Toutes ces balises et balisages sont très utiles pour les utilisateurs qui vont évidemment importer cela dans un autre produit MS ...
Mindwin
1
* Vous
vouliez
102

Il existe un outil en ligne simple qui peut faire cela appelé sqlizer.io .

Capture d'écran de sqlizer.com

Vous y téléchargez un fichier XLSX, entrez un nom de feuille et une plage de cellules, et il générera une instruction CREATE TABLE et un tas d'instructions INSERT pour importer toutes vos données dans une base de données MySQL.

(Clause de non-responsabilité: j'aide à exécuter SQLizer)

d4nt
la source
22
Il est bon de savoir que cet outil existe, mais réfléchissez bien si vous devez l'utiliser ou non. Si votre feuille de calcul contient des données sensibles (par exemple, les e-mails des utilisateurs, les mots de passe, les informations cc, les informations médicales, etc.), cela peut ne pas être une bonne idée. Ce site peut ne pas stocker vos données et il peut être sécurisé, mais il n'y a aucun moyen pour vous de le savoir avec certitude.
Chris Schmitz
1
@DivyeshJesadiya C'est gratuit pour tout jusqu'à 5000 lignes. Après cela, vous devez payer 10 $ pour un mois d'utilisation.
d4nt
@doxsi cela me semble bien, quel genre de problème avez-vous rencontré?
d4nt
@ChrisSchmitz, nous sommes très prudents avec la sécurité et avons récemment écrit un article de blog sur la façon dont nous opérons SQLizer blog.sqlizer.io/posts/privacy-at-sqlizer
a_good_swan
Cela fonctionne, faites attention au format Excel, xlt n'est pas accepté tandis que xls est accepté.
Emanuel Pirovano
40

Vous trouverez ci-dessous une autre méthode pour importer des données de feuille de calcul dans une base de données MySQL qui ne repose sur aucun logiciel supplémentaire. Supposons que vous souhaitiez importer votre table Excel dans la salestable d'une base de données MySQL nommée mydatabase.

  1. Sélectionnez les cellules pertinentes:

    entrez la description de l'image ici

  2. Collez dans Mr. Data Converter et sélectionnez la sortie comme MySQL:

    entrez la description de l'image ici

  3. Modifiez le nom de la table et les définitions de colonne en fonction de vos besoins dans la sortie générée:

CREATE TABLE sales (
  id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  Country VARCHAR(255),
  Amount INT,
  Qty FLOAT
);
INSERT INTO sales
  (Country,Amount,Qty)
VALUES
  ('America',93,0.60),
  ('Greece',9377,0.80),
  ('Australia',9375,0.80);
  1. Si vous utilisez MySQL Workbench ou que vous êtes déjà connecté à mysqlpartir de la ligne de commande, vous pouvez exécuter directement les instructions SQL générées à partir de l'étape 3. Sinon, collez le code dans un fichier texte (par exemple, import.sql) et exécutez cette commande à partir d'un shell Unix:

    mysql mydatabase < import.sql

    Vous trouverez d'autres façons d'importer à partir d'un fichier SQL dans cette réponse Stack Overflow .

thdoan
la source
1
C'était le moyen le plus simple. Merci! N'oubliez pas de supprimer l'ID de clé primaire supplémentaire dans le SQL et de placer un incrément AUTO de votre choix.
Fandango68
29

Il existe en fait plusieurs façons d'importer un fichier Excel dans une base de données MySQL avec différents degrés de complexité et de succès.

  1. Excel2MySQL . Sans conteste, le moyen le plus simple et le plus rapide d'importer des données Excel dans MySQL. Il prend en charge toutes les versions d'Excel et ne nécessite pas d'installation d'Office.

    capture d'écran d'Excel2MySQL

  2. LOAD DATA INFILE : Cette option populaire est peut-être la plus technique et nécessite une certaine compréhension de l'exécution des commandes MySQL. Vous devez créer manuellement votre table avant de charger et utiliser des types de champs VARCHAR de taille appropriée. Par conséquent, vos types de données de champ ne sont pas optimisés. LOAD DATA INFILE a du mal à importer des fichiers volumineux qui dépassent la taille «max_allowed_packet». Une attention particulière est requise pour éviter les problèmes d'importation de caractères spéciaux et de caractères Unicode étrangers. Voici un exemple récent que j'ai utilisé pour importer un fichier csv nommé test.csv.

    entrez la description de l'image ici

  3. phpMyAdmin : sélectionnez d'abord votre base de données, puis sélectionnez l'onglet Importer. phpMyAdmin créera automatiquement votre table et dimensionnera vos champs VARCHAR, mais il n'optimisera pas les types de champs. phpMyAdmin a du mal à importer des fichiers volumineux qui dépassent la taille «max_allowed_packet».

    entrez la description de l'image ici

  4. MySQL pour Excel : il s'agit d'un complément Excel gratuit d'Oracle. Cette option est un peu fastidieuse car elle utilise un assistant et l'importation est lente et boguée avec de gros fichiers, mais cela peut être une bonne option pour les petits fichiers avec des données VARCHAR. Les champs ne sont pas optimisés.

    entrez la description de l'image ici

panofish
la source
Salut @panofish, j'ai un Excel qui est mis à jour quotidiennement. Je voudrais mettre uniquement les données mises à jour à mettre dans la table de base de données mysql plutôt que dans la table entière. (c'est-à-dire) mettre une ligne dans le tableau par jour. Comment cela peut-il être fait?
Arun Raja
Ces solutions se concentrent toutes sur le chargement d'une feuille de calcul entière et le remplacement de votre table MySQL ou son ajout à la table. Les modifications ajoutent-elles de nouveaux enregistrements ou modifient-elles des enregistrements existants?
panofish
Ils écrasent simplement les valeurs. Mais je ne veux que les valeurs ajoutées qui ne sont pas déjà présentes dans la base de données en fonction de la date. Cela peut augmenter les performances en ajoutant simplement quelques lignes au lieu d'ajouter plusieurs lignes par jour.
Arun Raja
2
L'outil Excel2MySQL devrait avoir la possibilité de créer uniquement le script de base de données :(
joseantgv
PHPMyAdmin était le plus simple et le plus rapide.
Amir Hajiha
2

Je ne sais pas si vous avez toute cette configuration, mais pour moi, j'utilise PHP et MYSQL. J'utilise donc une classe PHP PHPExcel. Cela prend un fichier dans presque tous les formats, xls, xlsx, cvs, ... et vous permet ensuite de lire et / ou d'insérer.

Donc, ce que je finis par faire est de charger l'Excel dans un objet phpexcel, puis de parcourir toutes les lignes. En fonction de ce que je veux, j'écris une simple commande d'insertion SQL pour insérer les données du fichier Excel dans ma table.

Sur le front-end, c'est un peu de travail, mais c'est juste une question de peaufiner certains des exemples de code existants. Mais lorsque vous l'avez composé, apporter des modifications à l'importation est simple et rapide.

user1441213
la source
1

le moyen le meilleur et le plus simple est d'utiliser l'application "MySQL pour Excel" qui est une application gratuite d'Oracle. cette application a ajouté un plugin pour exceller pour exporter et importer des données vers mysql. vous pouvez le télécharger ici

Sadeq Shajary
la source
1

Lors de l'utilisation de fichiers texte pour importer des données, j'ai eu des problèmes avec les citations et la façon dont Excel formait les nombres. Par exemple, ma configuration Excel a utilisé la virgule comme séparateur décimal au lieu du point.

J'utilise maintenant Microsoft Access 2010 pour ouvrir ma table MySql en tant que table liée. Là, je peux simplement copier et coller des cellules d'Excel vers Access.

Pour ce faire, installez d'abord le pilote ODBC MySql et créez une connexion ODBC . Puis en accès, dans l'onglet "Données externes", ouvrez la boîte de dialogue "Base de données ODBC" et liez à n'importe quelle table utilisant la connexion ODBC.

À l'aide de MySql Workbench , vous pouvez également copier et coller vos données Excel dans la grille de résultats de MySql Workbench. J'ai donné des instructions détaillées dans cette réponse .

Christophe Weis
la source
0

Pour un exemple étape par étape pour importer Excel 2007 dans MySQL avec un encodage correct (UTF-8), recherchez ce commentaire:

"Posté par Mike Laird le 13 octobre 2010 00h50"

dans l'URL suivante:

http://dev.mysql.com/doc/refman/5.1/en/load-data.html

Raúl Moreno
la source
0

Vous pouvez utiliser DocChow , un GIU très intuitif pour importer Excel dans MySQL, et il est gratuit sur la plupart des plates-formes courantes (y compris Linux).

Plus particulièrement si vous êtes préoccupé par la date, les types de données datetime, DocChow gère facilement les types de données. Si vous travaillez avec plusieurs feuilles de calcul Excel que vous souhaitez importer dans une table MySQL, DocChow fait le sale boulot.

Seanj1000
la source
0

Étape 1 Créez votre fichier CSV

Étape 2 Connectez-vous à votre serveur mysql

     mysql -uroot -pyourpassword 

Étape 3 Chargez votre fichier csv

     load data local infile '//home/my-sys/my-excel.csv' into table my_tables fields terminated by ',' enclosed by '"' (Country, Amount,Qty);
Syed Shibli
la source
0

Toad pour MySQL est un autre outil utile, et en tant que remplacement frontal de MySQL . Malheureusement, ce n'est plus pris en charge par Quest , mais un brillant IDE pour MySQL, avec des assistants IMPORT et EXPORT, prenant en charge la plupart des types de fichiers.

Fandango68
la source