L'auteur
Francis Faure France Membre Actif (personne physique) # 0000000001 enregistré le 11/10/2004
http://www.wanagain.net 56 ans Faure Francis de la société Design Or Decline Fiche personnelle
Note des membres
pas de note
|
Contributions > 01 - PRG : Programmation > Import - Export
Utilisation/importation/information feuille excel en utilisant SQL
# 0000000465
ajouté le 18/08/2007 13:48:20 et modifié le 18/08/2007
consulté 11104 fois
Niveau
initié
|
Description |
La plupart des besoins d'imports de feuilles EXCEL dans VFP sont couvert par la commande native de VFP qui est : IMPORT FROM FileName [DATABASE DatabaseName [NAME LongTableName]]
[TYPE] FW2 | MOD | PDOX | RPD | WK1 | WK3 | WKS | WR1 | WRK | XLS
| XL5 [SHEET cSheetName] | XL8 [SHEET cSheetName] [AS nCodePage] pour aller plus loin (nombre d'onglets, nom des onglets et contenu des onglets), alors il faut manipuler la feuille Excel comme une base de données que l'on accéde avec des commandes SQL au travers d'un driver ODBC. On considère alors les onglets (feuilles/sheets) comme des tables, les lignes comme des enregistrements, et les colonnes comme des champs... Cordialement Francis FAURE |
Code source : |
* Feuilles Excel dans VFP en utilisant SQL
* but : Nombre d'onglets, nom des onglets et contenu des onglets
* pour aller + loin que "IMPORT FORM... TYPE XL8 SHEET ... "
CLEAR
SET TALK off
LOCAL cDriver as String && nom du driver
LOCAL cFile as String && nom du fichier excel a traiter
LOCAL ic as Integer && id connection sql
LOCAL iNombreOnglets as Integer && nombre d'onglets
LOCAL iSheet as Integer
cDriver = "driver={Microsoft Excel Driver (*.xls)}"
cFile = "c:\temp\testxls.xls"
ic = SQLSTRINGCONNECT(cDriver + "; DBQ=" + cFile)
IF m.ic>0
if SQLTABLES(m.ic, "", "CursorListSheets")>0
iNombreOnglets = RECCOUNT()
? "Nombre d'onglets = "+ ALLTRIM(STR(m.iNombreOnglets))
SCAN
? "Nom de l'onglet " + ALLTRIM(STR(RECNO()))+ "=" + ALLTRIM(Table_Name)
SELECT 0
iSheet = SQLEXEC(m.ic, "select * from ["+ALLTRIM(CursorListSheets.Table_Name)+"]")
IF iSheet>0
? " Nombre de lignes dans "+ ALLTRIM(CursorListSheets.Table_Name)+" = "+ALLTRIM(STR(RECCOUNT()))
endif
use
SELECT CursorListSheets
ENDSCAN
use
endif
=SQLDISCONNECT(m.ic)
endif
|
Commentaires |
|
Bonjour Francis,
C'est bien, mais c'est encore beaucoup plus sympa quand on utilise les ranges dans Excel. Pour simplifier, prenons un range rectangulaire, la première ligne définissant les nom des colonnes de la table et les autres lignes les données. Si "Client" est un tel range la commande :
iTable = SqlExec( "select * from Client", "CurClient" )
te donne une remote table dans le cursor CurClient, avec les bons noms de champ.
Sympa, non?