IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP Discussion :

type de données et export excel


Sujet :

ASP

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 198
    Points : 85
    Points
    85
    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 : 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
    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

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 198
    Points : 85
    Points
    85
    Par défaut
    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.

  3. #3
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    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 ?

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 198
    Points : 85
    Points
    85
    Par défaut
    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.
    é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.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    522
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 522
    Points : 522
    Points
    522
    Par défaut
    Salut,

    Essaie d'ajouter "&nbsp;" derrière ta donnée.

  6. #6
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    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

  7. #7
    Expert éminent
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Points : 9 512
    Points
    9 512
    Par défaut
    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+

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 198
    Points : 85
    Points
    85
    Par défaut
    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

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    522
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 522
    Points : 522
    Points
    522
    Par défaut
    C'est que le "&nbsp;" n'est pas interprété.
    Essaie avec son caractère unicode : &#160;

    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 _

  10. #10
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    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

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 198
    Points : 85
    Points
    85
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ...
    exportSaisine(3,9)= codorg & "&#160"
    ...
     
    'export excel au format csv
    ...

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    522
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 522
    Points : 522
    Points
    522
    Par défaut
    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.

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 198
    Points : 85
    Points
    85
    Par défaut
    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.

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 198
    Points : 85
    Points
    85
    Par défaut
    même avec le point virgule ça n'y change rien, si une petite chose quand même: au lieu de m'afficher 11345678910&#160; il m'affiche 11345678910&#160;
    le ";" est remplacé par une virgule, mais c'est tout.

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    522
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 522
    Points : 522
    Points
    522
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 198
    Points : 85
    Points
    85
    Par défaut
    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é?

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    522
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 522
    Points : 522
    Points
    522
    Par défaut
    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 : 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
     
    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>

  18. #18
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 198
    Points : 85
    Points
    85
    Par défaut
    J'ai testé, et efectivement cela fonctionne, merci TekP@f et les autres aussi.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [2005] Format de données vers export Excel
    Par Ornitho76 dans le forum SSIS
    Réponses: 1
    Dernier message: 13/10/2011, 22h48
  2. [VB.NET][EXCEL 2000] Automation et type de données
    Par Misterburma dans le forum Windows Forms
    Réponses: 4
    Dernier message: 01/02/2006, 16h51
  3. Export de données Oracle vers Excel via PHP
    Par Yanos dans le forum Oracle
    Réponses: 1
    Dernier message: 11/01/2006, 19h11
  4. [Delphi + Excel] OleApplication (type de données)
    Par mohamed dans le forum Langage
    Réponses: 2
    Dernier message: 17/10/2005, 15h36
  5. Export données MsFlexGrid vers Excel VB6.0
    Par elabbassi dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 16/09/2005, 15h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo