J’ai une procédure pour l’import de données d’Excel vers postgresql, elle marche bien.
Reste seulement à importer les commentaires sur les colonnes qui correspondent aux champs de la base de donnes (les colonnes).
La procédure en question est :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
install.packages("RPostgreSQL")
install.packages("gdata")
install.packages("DBI")
library(RPostgreSQL)
library(gdata)
library(DBI)
 
drv <- dbDriver("PostgreSQL")
con <- dbConnect(drv, host="postgres", user="postgres", password = "postgres", dbname="db_name")
setwd('/home/donnees/')
 
 
 
Integre_Fichier_excel<-function(schema_destination,fichierexcel,nom_table_a_creer,sheetdata,skipdata,sheetcomment,skipcomment)
{
 
## fonctions importe les donnees excel dans Rdata
importxls<-function(xls,sheet,skip,dec)
{
mycsv<-xls2csv(xls,sheet=sheet,verbose=TRUE, dec = ".")
read.csv(summary(mycsv)$description,quote = "\"",dec =dec,skip=skipdata)
}
RdataCvs<-importxls(fichierexcel,sheetdata,skip=skipdata,dec=".")
 
 
#on mets les champs en minuscule pour virer les quotes des fields
names(RdataCvs)<-tolower(names(RdataCvs))
 
# on force le schema de destination
V1=paste('set search_path to ',schema_destination,';');
dbGetQuery(con,V1)
 
# si table existe on supprime
V1=paste('drop table if exists ',schema_destination,'.',nom_table_a_creer,';',sep="");
dbGetQuery(con, V1)
 
#ecriture de la table
V1=paste(nom_table_a_creer,sep="");
dbWriteTable(con,V1,RdataCvs,row.names=FALSE)
 
# on remet le schema d'origine
V1=paste('set search_path to ',schema_origine,';');
dbGetQuery(con,V1)
 
#on force les droits
V1=paste('ALTER TABLE  ',schema_destination,'.',nom_table_a_creer,' OWNER TO droit_autre ;',sep="");
dbGetQuery(con, V1)
 
}
 
# Importe un fichier excel dans postgres
# parametre entrée
# schema_destination : nom du schema de destination
# fichierexcel : Nom du ficier Excel
# nom_table_a_creer : Nom de la table a créer dans le schema de destination
# sheetdata : Numero de la feuille qui contient les données
# skipdata  : Saut de ligne des données en debut de fichier excel
# sheetcomment : Numero de la feuille qui contient les commentaires
# skipcomment  : Saut de ligne des commentaires en debut de fichier excel
Appel de la fonction pour le fichier :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
Integre_Fichier_excel(schema_destination='mon_schema',fichierexcel='mon_fichier.xls',nom_table_a_creer='nom_ma_table',sheetdata=1,skipdata=0,sheetcomment=3,skipcomment=5);
Pour les commentaires :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#commentaires 
# on lit le fichier excel et on mets la requete comment dans V1 
mycsv<-xls2csv(fichierexcel, sheet=sheetcomment,verbose=TRUE, dec = ".")
tableaubrut<-read.csv(summary(mycsv)$description,fileEncoding="LATIN1",skip=skipcomment,sep=",")
V1=paste('COMMENT ON COLUMN ',schema_destination,'.',nom_table_a_creer,'.',tableaubrut[,1],' is ' , '\'',tableaubrut[,3],sep="");
 
# enleve les caracteres speciaux 
V1=gsub ("d'","d ",V1)
V1=gsub ("l'","l'' ",V1)
V1=gsub ("é","e",V1)
V1=gsub ("Ã*","a",V1)
#on remets le ' de la fin de chaine (gsub aavant !!)
V1=paste(V1,'\';','\n');
 
# mets le bloc en un seul element 
dbGetQuery(con,paste(V1,collapse=''))