Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > Langages serveur > ASP
ASP Forum sur la programmation ASP. Avant de poster : Cours ASP, FAQ ASP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 07/12/2007, 14h52   #1
Invité de passage
 
Inscription : décembre 2007
Messages : 7
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 7
Points : 1
Points : 1
Par défaut Ouverture fichier Excel via ADODB

Bonjour à tous,

Je me tourne vers vous, car je me trouve face à un problème que je n'arrive pas à résoudre.

En ASP 4, j'ai à effectuer un traitement sur un fichier Excel, que j'ouvre via ADODB puis que je traite via des requêtes SQL.


Mon problème vient du nom de la 1ère page, qui peut varier (surtout en fonction de la langue du client en face) : Feuil1 peut être Foglio1 ou Sheet1 etc etc.

Or, je suis obligé visiblement de lancer un
"SELECT * FROM [Feuil1$]" (si la page s'appelle Feuil1, of course) ...

Quelqu'un saurait comment je peux faire pour récupérer le nom de la 1ère feuille ?

Merci d'avance.

Cordialement
GrandByblos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2007, 15h10   #2
J1
Membre actif
 
Inscription : mai 2004
Messages : 225
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 225
Points : 195
Points : 195
Tu peux utiliser la méthode OpenSchema pour récupérer la liste des tables de ta source de données, dans ton cas, la liste des feuilles de ton classeur.
Tu trouveras ici un exemple d'utilisation de la méthode OpenSchema (c'est en VB, donc facilement transposable à ton cas de figure si tu codes en VBScript).
J1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2007, 15h56   #3
Invité de passage
 
Inscription : décembre 2007
Messages : 7
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 7
Points : 1
Points : 1
Mhhh je dois être idiot ...

Pour un test, j'ai fait :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
rep = Request.ServerVariables("APPL_PHYSICAL_PATH") & "upload/"
nouveau_nom_fichier_complet = rep & "test_excel.xls"
 
 
Set fso = CreateObject("Scripting.FileSystemObject")
Set oConnExcel = Server.CreateObject("ADODB.Connection")
strConnect = "Provider=Microsoft.Jet.OLEDB.4.0;" _
& "Data Source=" & Replace(nouveau_nom_fichier_complet,"/","\") & ";" _
& "Extended Properties=Excel 8.0;"
 
oConnExcel.Open strConnect
Jusqu'ici tout se passe bien (normal, déjà testé de nombreuses fois )

Ensuite, j'essaye de passer par la méthode OpenSchema pour récupérer le nom des "tables" (en fait, les feuilles)
Code :
1
2
3
4
5
6
 
Set rs = oConnExcel.OpenSchema(adSchemaColumn)
Do While Not rs.EOF
	Response.Write rs("table_name")
	rs.MoveNext
Loop
Mais là ...

Code :
1
2
3
ADODB.Connection error '800a0cb3' 
 
Object or provider is not capable of performing requested operation.
Etant donné que je suis en ASP, et que ma base n'est pas vraiment une base, mais un fichier Excel, est-ce que c'est sensé marcher ? Je veux dire : elle n'a pas de tables systèmes etc...

Merci en tous cas de l'idée ... et des futures
GrandByblos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2007, 16h44   #4
J1
Membre actif
 
Inscription : mai 2004
Messages : 225
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 225
Points : 195
Points : 195
C'est normal, il faut que tu utilises la constante adSchemaTables et non adSchemaColumns à la ligne...
Code :
1
2
 
Set rs = oConnExcel.OpenSchema(adSchemaColumn)
Une petite remarque : avec la constante adSchemaTables, tu vas en théorie récupérer le noms des tables ET des requêtes de ta base, mais comme ta base est un fichier Excel, ça ne devrait pas changer grand chose.
J1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2007, 16h52   #5
Invité de passage
 
Inscription : décembre 2007
Messages : 7
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 7
Points : 1
Points : 1
En fait, j'avais essayé déjà avec adSchemaTables, je n'avais mis en code que ma 2nde tentative avec adSchemaColumns.

Ceci étant dit, ça donne le même résultat ! hélas

Je continue à chercher, si par hasard tu as une autre idée ... merci d'avance
GrandByblos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2007, 17h15   #6
J1
Membre actif
 
Inscription : mai 2004
Messages : 225
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 225
Points : 195
Points : 195
Dans ta deuxième tentative, tu avais écrit adSchemaColumn (il manquait le "s"). Es-tu sûr que, lors de ta première tentative, tu avais bien écrit adSchemaTables (avec un "s") ?
J1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2007, 17h20   #7
Invité de passage
 
Inscription : décembre 2007
Messages : 7
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 7
Points : 1
Points : 1
Voici mon code, tel quel, pour tester cette méthode :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<%
rep = Request.ServerVariables("APPL_PHYSICAL_PATH") & "upload/"
nouveau_nom_fichier_complet = rep & "test_excel.xls"
Set fso = CreateObject("Scripting.FileSystemObject")
Set oConnExcel = Server.CreateObject("ADODB.Connection")
strConnect = "Provider=Microsoft.Jet.OLEDB.4.0;" _
& "Data Source=" & Replace(nouveau_nom_fichier_complet,"/","\") & ";" _
& "Extended Properties=Excel 8.0;"
oConnExcel.Open strConnect
 
Set rs = oConnExcel.OpenSchema(adSchemaTables)
Do While Not rs.EOF
	Response.Write rs("table_name")
	rs.MoveNext
Loop
%>
Résultat :

Code :
1
2
3
ADODB.Connection error '800a0cb3' 
 
Object or provider is not capable of performing requested operation.
Ceci étant dit, es-tu sûr qu'il soit possible d'utiliser cette méthode concernant normalement des bases sur un fichier Excel ?
Peut-être as-tu toi-même essayé ?

En tous cas, merci de ton temps pris pour voir ceci
GrandByblos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2007, 17h47   #8
J1
Membre actif
 
Inscription : mai 2004
Messages : 225
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 225
Points : 195
Points : 195
Mais j'y pense, as-tu mis adovbs.inc en include dans ton code ? Si ce n'est pas le cas, tu n'as pas accès aux constantes ADO.
Dans ce cas, essaie en remplaçant adSchemaTables par 20 (c'est la valeur de la constante).
J1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/12/2007, 08h47   #9
Invité de passage
 
Inscription : décembre 2007
Messages : 7
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 7
Points : 1
Points : 1
Merci, merci, merci

En effet, je n'avais pas mis le .inc en question (en fait, je ne savais même pas que les constantes ADO se trouvaient dedans !! )

Ceci étant dit, maintenant, ça fonctionne parfaitement !

Merci bien.
GrandByblos est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h32.


 
 
 
 
Partenaires

Hébergement Web