Passer un fichier excel dans une base de donnée postgreSQL
Avec linux , c'est tres facile de passer un fichier excel dans une base de donnée postgres.
(thématiques : csv to sql, excel to sql, csv to bdd, excel to bdd)
Voici comment faire sur postgres :
1/ exporter depuis excel votre fichier au format CSV (fichier / exporter et choisir format CSV) , avec comme séparateur le point virgule
sur linux maintenant :
1/ si besoin, reconvertir si besoin le fichier csv en utf8 (moi je préfère bosser en utf8, et ouinedoz est encore en iso-8859-1 :
# iconv -f iso-8859-1 -t utf-8 fichier.csv > /tmp/fichierUTF8.csv
libreoffice : depuis libreoffice vous pouvez exporter en utf8 directement
2/ nous allons utiliser la première ligne du fichier , qui contient les noms des têtes de colonnes :
# head -n 1 /tmp/fichierUTF8.csv
Nom;Prénom;Code postal;Ville;Téléphone;Fax;Email
Pour produire un code SQL capable de créer une table "import" portant ces mêmes colonnes, grâce à sed nous allons tout simplement reformatter la ligne pour en faire un ordre sql , comme ceci :
# head -n 1 /tmp/fichierUTF8.csv |sed -e 's/[^a-zA-Z0-9;]//g' -e 's/;/" text,"/g' -e 's/^/create table import ("/' -e 's/$/" text);/'
create table import ("Nom" text,"Prénom text","Codepostal" text,"Ville" text,"Téléphone" text,"Fax" text,"Email" text);
c'est beau hein ? (bon ok faut être connaisseur pour apprécier)
libreoffice : si vous avez exporter avec la simple quote autour de chaque champs et la virgule en séparateur :
# head -n 1 /tmp/fichierUTF8.csv |sed 's/,/;/g' |sed -e 's/[^a-zA-Z0-9;]//g' -e 's/;/" text,"/g' -e 's/^/create table import ("/' -e 's/$/" text);/'
3/ Bien maintenant passont sur postgres pour créer la table, il suffit de se connecter à votre base, ou bien d'en créer une nouvelle d'abord comme ceci (sous root avec sudo -i) :
# su - postgres
$ createdb -E utf8 mabase
$ psql mabase
mabase=#
4/ maintenant que vous êtes connecté en psql sur la base, il suffit de copier/coller l'ordre SQL produit en 2 :
mabase=# create table import ("Nom" text,"Prénom text","Codepostal" text,"Ville" text,"Téléphone" text,"Fax" text,"Email" text);
CREATE TABLE
5/ et il suffit de copier le contenu du fichier csv dans la table import fraichement créée :
mabase=# copy import from '/tmp/fichierUTF8.csv' CSV HEADER DELIMITER ';' ;
COPY
libreoffice : si vous avez exporter avec la simple quote autour de chaque champs et la virgule en séparateur :
copy import from '/tmp/fichierUTF8.csv' CSV HEADER QUOTE as '''' DELIMITER ',' ;
6/ on vérifie le contenu importé ( x pour passer en affichage étendu ) :
mabase=# [antislashe]x
Affichage étendu activé.
mabase=# select * from import;
-[ RECORD 1]---+-------------------------
Nom | Billout
Prénom | raoul
Codepostal | 90000
Ville | Epinal
Téléphone | 03 xx xx xx xx
Fax |
Email | xxxxxx@wanadoo.fr
-[ RECORD 2]---+-------------------------
Nom | Machin
...
A voir aussi :
Un peu de littérature sur le sujet chez Amazon8 273 clics - Créé le 01/04/2010 par Tito - Modifié le 02/10/2012