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 03/01/2008, 10h37   #1
Membre du Club
 
Inscription : février 2007
Messages : 172
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 172
Points : 44
Points : 44
Par défaut type de données et export excel

bonjour, j'ai un formulaire que je voudrais exporté sous excel, mais j'ai un souci avec certains type de données.

En effet, j'ai des identifiants qui sont des suites de chiffres (ex: code organisme: 12540572008), et lors de l'export excel me les affiches en format scientifique 1.25*10^9).

J'ai éssayé de convertir en string avec cstr() avant d'importer, mais rien n'y change, j'ai même éssayer de mettre des espaces au début et à la fin de mon code mais le problème perciste.

Voici le code utilisé pour l'export excel:
je rempli un tableau asp que j'exporte ensuite au format csv.
(les valeurs en pourpre sont les codes en questions)

Code :
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87

dim exportSaisine(11,16)
				
			'-------------------------------------------------------------------
			'entête
                                      exportSaisine(1,1)="FORMATION"		
			exportSaisine(2,1)="N° Référencement"
			exportSaisine(2,2)="N° Convention"
			exportSaisine(2,3)="Date début convention"
			exportSaisine(2,4)="Date fin convention"
			exportSaisine(2,5)="Date décision"
			exportSaisine(2,6)="Département principal mise en oeuvre convention"
			exportSaisine(2,7)="Formacode"
			exportSaisine(2,8)="Intitulé Formation"
			exportSaisine(2,9)="Code organisme"
			exportSaisine(2,10)="Intitulé organisme"
			exportSaisine(2,11)="Nb heures formation"
			exportSaisine(2,12)="Nb heures en entreprise"
			exportSaisine(2,13)="Nb heures en centre de formation"
			exportSaisine(2,14)="Nb stagiaires prévu"
			exportSaisine(2,15)="Porteur de projet"
			exportSaisine(2,16)="Info Complémentaire"
			
                                       ' valeurs
			exportSaisine(3,1)=numref 
			exportSaisine(3,2)=numconv 
			exportSaisine(3,3)=datedeb
			exportSaisine(3,4)=datefin
			exportSaisine(3,5)=dateDec
			exportSaisine(3,6)=dpt
			exportSaisine(3,7)=codform
			exportSaisine(3,8)=formationtab("LibelleFormation")
			exportSaisine(3,9)=codorg
			exportSaisine(3,10)=organismetab("LibelleOrganisme")
			exportSaisine(3,11)=nbht
			exportSaisine(3,12)=nbhe
			exportSaisine(3,13)=nbhf
			exportSaisine(3,14)=nbs
			exportSaisine(3,15)=port
			exportSaisine(3,16)=info
			
			'----------------------------------------------------------------------
		
		
		
			' export excel
			
			dim file, filename
			Sub EcrireXL(MyStr,byref Target)
				on error resume next
				Tmp=Mystr
				for i=1 to 30
					tmp=replace(tmp,chr(i)," ")
				next
				tmp=replace(tmp,";",",")
				Target=Target & chr(34)&tmp&chr(34)&";"
			end sub
			Sub Export
				Set FSO = Server.CreateObject("Scripting.FileSystemObject")
				dim dir : dir = Server.MapPath("export")
				
				path=dir & "\"
				filename="Engagements par type de frais"&year(Now)&month(Now)&hour(Now)&minute(Now)&second(Now)&".csv"
				file=path & filename
															
				while fso.FileExists(file)
					file=file&"_"
					filename=filename&"_"
				wend
					
				set inF = FSO.CreateTextFile(file)
				
				Dim XLstr
				For k=1 to 11
				
					XLStr=""				
					for j=1 to 16
						EcrireXL exportSaisine(k,j),XLStr			
					next
					inf.writeline XLStr
					
				Next
			End sub
			export%>
			
		<input type='button' onClick="Fexport('export/<%=filename%>')">
Merci
__________________
Citation:
La plus grande ruse du diable est de faire croire à tout le monde qu'il n'existe pas.
Baudelaire
mohcultiv est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2008, 16h41   #2
Membre du Club
 
Inscription : février 2007
Messages : 172
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 172
Points : 44
Points : 44
J'ai vu qu'en ajoutant ' devant mon nombre ce dernier serait obligatoirement pris comme du texte sous excel mais ce caractère sera également visible dans ma cellule excel et mon identifiant au lieu d'être 125458121 (par exemple) dviendra '125458121.
__________________
Citation:
La plus grande ruse du diable est de faire croire à tout le monde qu'il n'existe pas.
Baudelaire
mohcultiv est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2008, 19h18   #3
Rédacteur/Modérateur
 
Avatar de _Mac_
 
Inscription : août 2005
Messages : 8 313
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 8 313
Points : 8 596
Points : 8 596
L'affichage en 1.25*10^9 est "normal" : c'est parce que l'affichage par défaut des nombres dans Excel utilise la notation scientifique pour les nombres qu'il ne peut pas afficher en entier dans la cellule : élargis la colonne et oh !! miracle, ton nombre apparaîtra (j'ai fait le test avec un simple fichier CSV contenant uniquement le nombre 12540572008). Par ailleurs, si tu cliques dans la cellule en question, tu verras que la valeur initiale est conservée dans la barre de formule. Le problème c'est que tu ne peux pas forcer la largeur des colonnes avec un fichier CSV.

En revanche, il y a un souci quand le nombre commence par un 0 : c'est pas un vrai nombre mais une chaîne de caractères. Sans rien faire de spécial, Excel supprimera le 0 frontal. Pour le conserver, une petite recherche avec mon ami le moteur de recherche bien connu me renvoie 2 solutions au moins :
  1. Si tu veux faire un fichier CSV qui n'est ouvrable que par Excel (c'est bien mais pas top...), y a une gruge : dans ton fichier CSV écris tes valeurs ainsi : "=""012540572008"""
  2. Si tu veux générer un vrai fichier CSV ouvrable par plein de logiciels, t'as pas vraiment de solution Tout ce que tu peux faire, c'est écrire le "nombre" tel quel dans ton fichier CSV (012540572008) puis enregistrer le fichier CSV dans un fichier .txt et ouvrir ce fichier dans Excel par le menu Fichier > Ouvrir... Cf.
    http://exceltips.vitalnews.com/Pages...CSV_Files.html

Si vraiment y a un pb, peux-tu nous mettre un extrait CSV qui pose problème ?
__________________

Du détail, du détail, du détail !!!
Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute
_Mac_ est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2008, 11h11   #4
Membre du Club
 
Inscription : février 2007
Messages : 172
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 172
Points : 44
Points : 44
merci pour ton aide, mais ce que je veux, c'est que mon fichier csv affiche mes nombres sous forme normal sans passer par le mode scientifique, en format texte ça serait l'idéal, et ce automatiquement dès l'ouverture du fichier.
Citation:
élargis la colonne et oh !! miracle, ton nombrea apparaîtra
Merci, j'éttais au courant, mais dès que mes utilisateurs importent leur tableau, si les identifiant apparaissent en forme sciebtifique, je vais les entendre raller (et je te raconte pas si je leurs dis qu'il faut qu'ils agrandissent leur colonne.).
Ensuite, que mon fichier s'ouvre qu'en excel ou autre m'importe peu.
Et, pour finir, si je trouve, comme je le souhaitais un moyen de faire apparaitre mes identifiants en format texte, le pb avec le zéro ne se pose plus.

Pour le moment je les ai mi entre quote pour qu'il soit considérer comme du texte mais mes utilisateurs aimeraient que les quotes n'apparaissent pas.

Merci encore.
__________________
Citation:
La plus grande ruse du diable est de faire croire à tout le monde qu'il n'existe pas.
Baudelaire
mohcultiv est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2008, 11h23   #5
Membre expérimenté
 
Inscription : octobre 2004
Messages : 516
Détails du profil
Informations personnelles :
Âge : 32
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : octobre 2004
Messages : 516
Points : 508
Points : 508
Envoyer un message via MSN à TekP@f
Salut,

Essaie d'ajouter "&nbsp;" derrière ta donnée.
TekP@f est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2008, 13h13   #6
Rédacteur/Modérateur
 
Avatar de _Mac_
 
Inscription : août 2005
Messages : 8 313
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 8 313
Points : 8 596
Points : 8 596
Citation:
Envoyé par mohcultiv Voir le message
merci pour ton aide, mais ce que je veux, c'est que mon fichier csv affiche mes nombres sous forme normal sans passer par le mode scientifique, en format texte ça serait l'idéal, et ce automatiquement dès l'ouverture du fichier.
Relis bien ce que j'ai dit : en gros c'est impossible car la notation scientifique vient que la colonne est trop étroite pour afficher le nombre en entier, or, avec un fichier CSV, tu ne peux pas définir la largeur d'affichage d'une colonne

Pour forcer le format texte, c'est un peu pareil : le format CSV ne connaît pas les types, c'est juste une syntaxe pour rentrer des données tabulées. L'interprétation du type est faite par le logiciel qui lit le fichier CSV. Donc soit tu gardes le fait que c'est un fichier CSV qui s'ouvre "automatiquement" avec Excel et dans ce cas tu ne peux que conserver la façon standard qu'a Excel d'interpréter les fichiers CSV, soit tu utilises la gruge du "sauvegarde en .txt + menu Fichier > Ouvrir fichier .txt" pour ouvrir l'assistant d'import d'Excel et dans ce cas tu peux définir le type de chaque colonne importée. Le coup de mettre un ' devant et de le virer après c'est pareil, ça ne pourra jamais marcher : pour faire cela il faudrait exécuter une macro et c'est pas possible en standard dans un fichier CSV.

Franchement, la seule solution que je vois c'est que tu génères un vrai fichier au vrai format Excel
__________________

Du détail, du détail, du détail !!!
Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute
_Mac_ est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2008, 00h49   #7
Expert Confirmé Sénior

 
Avatar de Immobilis
 
Inscription : mars 2004
Messages : 5 859
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 5 859
Points : 5 979
Points : 5 979
Salut,
Citation:
Envoyé par _Mac_ Voir le message
en gros c'est impossible car la notation scientifique vient que la colonne est trop étroite
Il me semble que c'est surtout parce que quelque soit la largeur de la colonne dès qu'un nombre comporte plus de 10 chiffres, Excel utilise la notation scientifique.
Toutefois, il semble qu'en appliquant un formatage de la cellule en "nombre", Excel n'applique plus la numérotation scientifique.
Pour obtenir ce résultat, il faut effectivement un vrai fichier Excel pour typer la cellule.
Qu'a donné le "&nbsp;" comme suggéré par TekP@f?

A+
Immobilis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2008, 09h57   #8
Membre du Club
 
Inscription : février 2007
Messages : 172
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 172
Points : 44
Points : 44
Citation:
Qu'a donné le "&nbsp;" comme suggéré par TekP@f?
Et bien le "&nbsp;" apparait à la suite de mon nombre dans mon fichier csv
ex: 0123456789&nbsp

merci de vos réponses
__________________
Citation:
La plus grande ruse du diable est de faire croire à tout le monde qu'il n'existe pas.
Baudelaire
mohcultiv est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2008, 10h07   #9
Membre expérimenté
 
Inscription : octobre 2004
Messages : 516
Détails du profil
Informations personnelles :
Âge : 32
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : octobre 2004
Messages : 516
Points : 508
Points : 508
Envoyer un message via MSN à TekP@f
C'est que le "&nbsp;" n'est pas interprété.
Essaie avec son caractère unicode :  

Héhé !
En mettant l'unicode, le forum l'a interprété en mettant du blanc.
Donc voici le caractère : &_#160; sauf qu'il faut enlever le _
TekP@f est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2008, 10h51   #10
Rédacteur/Modérateur
 
Avatar de _Mac_
 
Inscription : août 2005
Messages : 8 313
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 8 313
Points : 8 596
Points : 8 596
Personnellement, je ne pense pas que mettre un caractère supplémentaire soit une bonne idée : si les utilisateurs qui récupèrent le tableau veulent effectuer des traitements ou des opérations sur les nombres qu'ils récupèrent, ils vont avoir des surprises du style une addition qui ne marche pas
__________________

Du détail, du détail, du détail !!!
Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute
_Mac_ est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2008, 11h02   #11
Membre du Club
 
Inscription : février 2007
Messages : 172
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 172
Points : 44
Points : 44
il n'est pas interprété non plus.
A l'affichage j'ai un truc du genre 0123456789&#160

je n'ai peut etre pas ajouté le caractère comme il faut:

Code :
1
2
3
4
5
6
7
 
...
exportSaisine(3,9)= codorg & "&#160"
...
 
'export excel au format csv
...
__________________
Citation:
La plus grande ruse du diable est de faire croire à tout le monde qu'il n'existe pas.
Baudelaire
mohcultiv est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2008, 11h25   #12
Membre expérimenté
 
Inscription : octobre 2004
Messages : 516
Détails du profil
Informations personnelles :
Âge : 32
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : octobre 2004
Messages : 516
Points : 508
Points : 508
Envoyer un message via MSN à TekP@f
Il te manque le ";". C'est important.

Citation:
Envoyé par _Mac_ Voir le message
Personnellement, je ne pense pas que mettre un caractère supplémentaire soit une bonne idée : si les utilisateurs qui récupèrent le tableau veulent effectuer des traitements ou des opérations sur les nombres qu'ils récupèrent, ils vont avoir des surprises du style une addition qui ne marche pas
Tout à fait d'accord. Mais comme on dit, le client est roi. Et s'il demande d'avoir l'affichage de la donnée du premier coup d'oeil, faut trouver une solution.
TekP@f est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2008, 11h35   #13
Membre du Club
 
Inscription : février 2007
Messages : 172
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 172
Points : 44
Points : 44
Citation:
Envoyé par _Mac_
Personnellement, je ne pense pas que mettre un caractère supplémentaire soit une bonne idée : si les utilisateurs qui récupèrent le tableau veulent effectuer des traitements ou des opérations sur les nombres qu'ils récupèrent, ils vont avoir des surprises du style une addition qui ne marche pas
je suis d'accord avec TekP@f. De plus, ce ne sont pas des nombres mais des identifiant, donc pas d'opération, sinon pourquoi voudrais-je les convertir en texte.
__________________
Citation:
La plus grande ruse du diable est de faire croire à tout le monde qu'il n'existe pas.
Baudelaire
mohcultiv est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2008, 11h40   #14
Membre du Club
 
Inscription : février 2007
Messages : 172
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 172
Points : 44
Points : 44
même avec le point virgule ça n'y change rien, si une petite chose quand même: au lieu de m'afficher 11345678910  il m'affiche 11345678910 
le ";" est remplacé par une virgule, mais c'est tout.
__________________
Citation:
La plus grande ruse du diable est de faire croire à tout le monde qu'il n'existe pas.
Baudelaire
mohcultiv est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2008, 11h49   #15
Membre expérimenté
 
Inscription : octobre 2004
Messages : 516
Détails du profil
Informations personnelles :
Âge : 32
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : octobre 2004
Messages : 516
Points : 508
Points : 508
Envoyer un message via MSN à TekP@f
Citation:
Envoyé par mohcultiv Voir le message
même avec le point virgule ça n'y change rien, si une petite chose quand même: au lieu de m'afficher 11345678910* il m'affiche 11345678910*
le ";" est remplacé par une virgule, mais c'est tout.
Je sèche un peu là ...

Sinon, pourquoi ne passes-tu pas par un export xl "classique", c'est à dire une page HTML en modifiant le contentType.

Code :
1
2
Response.ContentType = "application/vnd.ms-excel"
Response.AddHeader "Content-Disposition","filename=ExportExcel.xls"
Perso, c'est ce que je fais toujours, et la bidouille de &nbsp; fonctionne bien.
TekP@f est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2008, 12h32   #16
Membre du Club
 
Inscription : février 2007
Messages : 172
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 172
Points : 44
Points : 44
je vais tester, je ne l'ai jammais fait auparavant.
Si je comprend bien j'ai juste à créer une page html en modifiant le contentType comme tu me l'a indiqué?
__________________
Citation:
La plus grande ruse du diable est de faire croire à tout le monde qu'il n'existe pas.
Baudelaire
mohcultiv est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2008, 13h58   #17
Membre expérimenté
 
Inscription : octobre 2004
Messages : 516
Détails du profil
Informations personnelles :
Âge : 32
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : octobre 2004
Messages : 516
Points : 508
Points : 508
Envoyer un message via MSN à TekP@f
Exactement !
Par contre, le code HTML ne doit contenir que des balises supportées par Excel. Je ne connais pas la liste exacte. Mais en général, je ne fais que des tableaux. Un exemple de code :

Code :
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
 
Set RsContactList = server.CreateObject("ADODB.Recordset")
With RsContactList
	.Source = strReq
	.ActiveConnection = "....."
	.CursorType = 3
	.CursorLocation = 3
	.LockType = 3
	.Open()
End With
 
Response.ContentType = "application/vnd.ms-excel"
Response.AddHeader "Content-Disposition","filename=ExportExcel.xls"
 
%>
<table>
  <tr> 
    <th>Identité</th>
  </tr>
<%
While not RsContactList.EOF
%>
  <tr> 
    <td><%=RsContactList("strCP")%>&nbsp;</td>
  </tr>
<%
  RsContactList.moveNext
Wend
%>
</table>
TekP@f est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2008, 16h03   #18
Membre du Club
 
Inscription : février 2007
Messages : 172
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 172
Points : 44
Points : 44
J'ai testé, et efectivement cela fonctionne, merci TekP@f et les autres aussi.
__________________
Citation:
La plus grande ruse du diable est de faire croire à tout le monde qu'il n'existe pas.
Baudelaire
mohcultiv 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 13h47.


 
 
 
 
Partenaires

Hébergement Web