Précédent   Forum du club des développeurs et IT Pro > Environnements de développement > WinDev > Contribuez
Contribuez Vos contributions pour la rubrique Windev : articles, cours, tutoriels, faq, comparatifs, tests, sources, ...
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 19/04/2011, 14h34   #1
bastiencb
Membre régulier
 
Inscription : août 2005
Messages : 56
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 56
Points : 70
Points : 70
Par défaut Windev : Créer un fichier .csv pour Excel (Conserver les 0 non significatifs, points virgules et guillemets)

Voici une petite procédure pour exporter des données dans un fichier .csv qu'Excel saura interpréter correctement.

Pour rappel, un fichier .csv est un fichier texte dont les valeurs sont séparées par des points virgules (ou des virgules) :
http://fr.wikipedia.org/wiki/Comma-separated_values

Le problème principal rencontré lors de l'ouverture d'un fichier .csv dans Excel est que lorsque des valeurs composées uniquement de chiffres commencent par un ou plusieurs zéros, ces zéros "non significatifs" sont supprimés à l'affichage dans Excel.

Dans mon cas, je souhaite conserver ces zéros.

Les séparateurs (; ou ,) et guillemets présents dans une valeur de type texte doivent aussi être "échappés" en entourant la valeur de guillemets.

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
LOCAL
	iIDFi est un entier = 0
	sVal1 est une chaîne = ""
	sVal2 est une chaîne = ""
	sVal3 est une chaîne = ""
	sVal4 est une chaîne = ""
	sVal5 est une chaîne = ""
	sVal6 est une chaîne = ""
	sVal7 est une chaîne = ""
	sVal8 est une chaîne = ""
	sLigne1 est une chaîne = ""
	sLigne2 est une chaîne = ""
	sFiCsvChemin est une chaîne = ""
	
sFiCsvChemin = "c:\test.csv"
	
iIDFi = fOuvre(sFiCsvChemin,foCréationSiInexistant+foAjout)

sVal1 = "Ceci est un texte"
sVal2 = "Ceci est un texte; contenant un point virgule"
sVal3 = "Ceci est un ""texte"" contenant des guillemets"
sVal4 = "Ceci est un ""texte""; contenant des guillemets et un point virgule"
sVal5 = "00001"
sVal6 = "00002"
sVal7 = "04.90.90.90.90"
sVal8 = "2011"

ModifChaine(sVal1)
ModifChaine(sVal2)
ModifChaine(sVal3)
ModifChaine(sVal4)
ModifChaine(sVal5)
ModifChaine(sVal6)
ModifChaine(sVal7)
ModifChaine(sVal8)

sLigne1 = sVal1+";"+sVal2+";"+sVal3+";"+sVal4+";"+sVal5+";"+sVal6+";"+sVal7+";"+sVal8
fEcritLigne(iIDFi,sLigne1)

sLigne2 = sVal1+";"+sVal2+";"+sVal3+";"+sVal4+";"+sVal5+";"+sVal6+";"+sVal7+";"+sVal8
fEcritLigne(iIDFi,sLigne2)

fFerme(iIDFi)

LanceAppliAssociée(sFiCsvChemin)
Code de la procédure "ModifChaine" :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
PROCEDURE ModifChaine(_sChaine est une chaîne)

//Déterminer si la valeur contient uniquement des chiffres
bUniquementChiffre est un booléen = Vrai

POUR i = 1 _A_ Taille(_sChaine)
	SI PAS (Asc(_sChaine[[i]]) >= 48 ET Asc(_sChaine[[i]]) <= 57) ALORS
		bUniquementChiffre = Faux
		SORTIR
	FIN
FIN

SI bUniquementChiffre ALORS
	//Conserver les zéros non significatifs
	 SI Gauche(_sChaine,1) = "0" ALORS
	 	_sChaine = """=""""0"+Droite(_sChaine,Taille(_sChaine)-1)+""""""""
	 FIN	
SINON
	_sChaine = Remplace(_sChaine,"""","""""")
	_sChaine = """"+_sChaine+""""
FIN
Voici le résultat en ouvrant le fichier avec le bloc note Windows :

"Ceci est un texte";"Ceci est un texte; contenant un point virgule";"Ceci est un ""texte"" contenant des guillemets";"Ceci est un ""texte""; contenant des guillemets et un point virgule";"=""00001""";"=""00002""";"04.90.90.90.90";2008

Bonne prog
bastiencb est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 11h39.


 
 
 
 
Partenaires

Hébergement Web