Bonjour,
Je viens de créer un fichier .CSV en exportant une table sqlite. Y a t-il une possibilité rapide d'importer le fichier Excel, autrement dit, lire champs par champs le fichier créé. J'ai déjà testé la méthode de lecture caractère par caractère en vérifiant la présence du point virgule (caractère séparateur de champs), ça marche mais c'est lourd comme méthode.
Merci
[RESOLU] Importer fichier Excel
[RESOLU] Importer fichier Excel
Dernière modification par omega le dim. 08/mars/2020 22:45, modifié 1 fois.
Win7 (x64)
Pb 6.03 LTS
Pb 6.03 LTS
Re: Importer fichier Excel
Salut, j'ai une question.
Si tu viens de créer un fichier .CSV en exportant une table sqlite, pourquoi ne la lis tu pas simplement avec PB si le CSV t'ennuie ?
Une liste chainée par ligne puis un stringfield pour séparer les champs. On a vu plus lourd non ?
Si tu viens de créer un fichier .CSV en exportant une table sqlite, pourquoi ne la lis tu pas simplement avec PB si le CSV t'ennuie ?
Bah du CSV c'est du pauvre texte brute séparé par un caractère. Je vois pas ce que tu peux faire d'autre avec ce format, ni en quoi "c'est lourd" de traiter un fichier du genre.omega a écrit :J'ai déjà testé la méthode de lecture caractère par caractère en vérifiant la présence du point virgule (caractère séparateur de champs), ça marche mais c'est lourd comme méthode.
Une liste chainée par ligne puis un stringfield pour séparer les champs. On a vu plus lourd non ?
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Re: Importer fichier Excel
Je viens de trouver une meilleure solution, mais cela restera provisoire en attendant de trouver mieux.
Code : Tout sélectionner
;--------------------------------------------------------------------------------------------------------
Procedure importer()
sql="Delete from fProdD"
CheckDatabaseUpdate(idProdD,sql)
Global Chaine$,Dep,Pos,Champ,Long,wMax
;Entêtes ou noms des champs
;Chaine$="FAMILLE;CODE P.;DESIGNATION DU PRODUIT; U. M. ;QTE INITIALE;P. A.;PRIX DE VENTE"
File$="Excel.csv"
If ReadFile(0, File$)
While Eof(0) = 0
Chaine$=ReadString(0)
If Left(Chaine$,3)="FAM"
Goto NextLine
EndIf
wtaille=Len(chaine$)
wMax=CountString(chaine$,";")
For champ=1 To wmax
dep=pos+1
pos = FindString(Chaine$,";",1)
long=pos-1
champ$=Left(chaine$,long)
chaine$=Mid(chaine$,pos+1,wtaille-Len(champ$)-1)
If champ=1 : fam$=champ$ : EndIf
If champ=2 : Codeprod$=champ$ : EndIf
If champ=3 : prod$=champ$ : EndIf
If champ=4 : um$=champ$ : EndIf
If champ=5 : Qi$=champ$ : EndIf
If champ=6 : Pa$=champ$ : EndIf
If champ=7 : Pv$=champ$ : EndIf
Next champ
Pv$=chaine$
sql="insert into fProdD (fam,Codeprod,Prod,um,qi,Pa,Pv) values ("
sql+ Chr(34) + fam$ + Chr(34) + ","
sql+ Chr(34) + codeprod$ + Chr(34) + ","
sql+ Chr(34) + prod$ + Chr(34) + ","
sql+ Chr(34) + um$ + Chr(34) + ","
sql+ Chr(34) + qi$ + Chr(34) + ","
sql+ Chr(34) + pa$ + Chr(34) + ","
sql+ Chr(34) + pv$ + Chr(34) + ")"
CheckDatabaseUpdate(idProdD,sql)
NextLine:
Wend
CloseFile(0)
EndIf
MessageRequester("Terminé","Le fichier excel a été importé avec succès!")
EndProcedure
Win7 (x64)
Pb 6.03 LTS
Pb 6.03 LTS
Re: Importer fichier Excel
Ar-S t'a donné mieux il y a 6 minutes, mais peut-être que tu était en train d'écrire ?...en attendant de trouver mieux.
StringField() pour découper la ligne lue et aussi supprimer le Goto.
Et j'ajoute
SetDatabaseString() pour remplacer la ligne SQL et permettre ainsi l'insertion de champs pouvant comporter guillemets ou apostrophes.
PS. Quand une variable ne sert que dans une procédure, préférer Protected que Global ainsi la mémoire est libérée dès que la procédure est terminée.
Exemple (à vérifier et améliorer)
Code : Tout sélectionner
Procedure importer()
sql="Delete from fProdD"
CheckDatabaseUpdate(idProdD,sql)
Protected Chaine$
;Entêtes ou noms des champs
;Chaine$="FAMILLE;CODE P.;DESIGNATION DU PRODUIT; U. M. ;QTE INITIALE;P. A.;PRIX DE VENTE"
File$="Excel.csv"
If ReadFile(0, File$)
While Eof(0) = 0
Chaine$=ReadString(0)
SetDatabaseString(idProdD, 0, StringField(Chaine$, 1, ";"))
SetDatabaseString(idProdD, 1, StringField(Chaine$, 2, ";"))
SetDatabaseString(idProdD, 2, StringField(Chaine$, 3, ";"))
SetDatabaseString(idProdD, 3, StringField(Chaine$, 4, ";"))
SetDatabaseString(idProdD, 4, StringField(Chaine$, 5, ";"))
SetDatabaseString(idProdD, 5, StringField(Chaine$, 6, ";"))
SetDatabaseString(idProdD, 6, StringField(Chaine$, 7, ";"))
sql = "insert into fProdD (fam,Codeprod,Prod,um,qi,Pa,Pv)" +
" values (?, ?, ?, ?, ?, ?, ?);"
CheckDatabaseUpdate(idProdD,sql)
Wend
CloseFile(0)
EndIf
MessageRequester("Terminé","Le fichier excel a été importé avec succès!")
EndProcedureEnfin, si tu as beaucoup de lignes à insérer dans la base, tu as intérêt à les mettre toutes dans une seule transaction, ce qui évite les vérifications à chaque insertion. Envoi simplement en requête "BEGIN" au début, puis "COMMIT" après la dernière ligne (ou "ROLLBACK" pour annuler)
Re: Importer fichier Excel
En effet, StringField est exactement ce que je cherchais (ça me donne directement le champ recherché). Cela répond à mon attente. Merci à vous deux et bonne continuation.
Win7 (x64)
Pb 6.03 LTS
Pb 6.03 LTS