Précédent   Forum des professionnels en informatique > PHP > Langage
Langage Forum sur le langage PHP, la POO, les conventions, la sécurité, etc. Avant de poster : FAQ Langage, toutes les FAQ PHP, cours langage et sources PHP
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 21/02/2011, 12h15   #1
Membre Expert
 
Avatar de gwinyam
 
Homme Mathieu ROBIN
Développeur Web
Inscription : mai 2006
Messages : 1 116
Détails du profil
Informations personnelles :
Nom : Homme Mathieu ROBIN
Âge : 25
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mai 2006
Messages : 1 116
Points : 2 142
Points : 2 142
Par défaut Exporter un CSV avec caractères spéciaux pour Excel

Bonjour à tous,

J'ai un souci. Je souhaite exporter des données au format CSV pour des clients. Le fichier est très bien lu par OpenOffice Calc sur mon linux, et il passe tout aussi bien sur le bloc-notes de Windows, mais dès que je l'ouvre avec Excel, c'est fini, les caractères spéciaux ne sont plus gérés et c'est le grand n'importe quoi. Quelqu'un a une idée de ce que je peux faire?

Voilà mon script :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
header("Pragma: public");
header("Expires: 0"); // set expiration time
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-Type: application/txt; charset=UTF-8");
header('Content-Disposition: attachment; filename="' . $name . '.csv"');
//header('Content-type: application/octet-stream');
//$fp = fopen("php://output", 'w');
foreach($data as $ligne) {
	//fputcsv($fp, $ligne);
	foreach($ligne as $value)
		echo $value.',';
	echo "\n";
}
Les lignes en commentaire correspondent à des alternatives que j'ai testé mais qui m'ont donné le même résultat final.

Je sais qu'Excel utilise par défaut le format Windows125x, ou un truc similaire, mas même en faisant des trucs du genre :
Code :
iconv("UTF-8", "Windows-1252", maData);
et en virant l'entête disant que c'est de l'UTF-8, j'obtiens le même problème.

A l'heure actuelle, je fais un utf8_encode sur toutes mes données dans la fonction d'export.

J'ai presque envie de dire "pitié, sauvez ma chevelure" XD
Merci d'avance à tous!
__________________
Mon blog techno et son billet hebdomadaire sur l'actualité jQuery. Et mon blog cuisine pour une personne.
Le bouton ne masse pas les pieds, mais ça aide la communauté.
gwinyam est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/02/2011, 12h21   #2
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Citation:
A l'heure actuelle, je fais un utf8_encode sur toutes mes données dans la fonction d'export.
Est-ce que cela fonctionne ?
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/02/2011, 12h23   #3
Membre Expert
 
Avatar de gwinyam
 
Homme Mathieu ROBIN
Développeur Web
Inscription : mai 2006
Messages : 1 116
Détails du profil
Informations personnelles :
Nom : Homme Mathieu ROBIN
Âge : 25
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mai 2006
Messages : 1 116
Points : 2 142
Points : 2 142
Citation:
Envoyé par sabotage Voir le message
Est-ce que cela fonctionne ?
Non, justement. D'où mon incompréhension du problème.
__________________
Mon blog techno et son billet hebdomadaire sur l'actualité jQuery. Et mon blog cuisine pour une personne.
Le bouton ne masse pas les pieds, mais ça aide la communauté.
gwinyam est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/02/2011, 13h29   #4
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
et ta méthode pour créer un CSV n'est pas bonne non plus, pourtant t'éetait bien partis avec fputcsv, de plus ca par souvent d'une moauvaise habitude de l'utilisateur : sous Excel on ouvre pas un CSV mais on importe un CSV
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/02/2011, 13h43   #5
Membre Expert
 
Avatar de gwinyam
 
Homme Mathieu ROBIN
Développeur Web
Inscription : mai 2006
Messages : 1 116
Détails du profil
Informations personnelles :
Nom : Homme Mathieu ROBIN
Âge : 25
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mai 2006
Messages : 1 116
Points : 2 142
Points : 2 142
Va expliquer ça à un client lambda.
__________________
Mon blog techno et son billet hebdomadaire sur l'actualité jQuery. Et mon blog cuisine pour une personne.
Le bouton ne masse pas les pieds, mais ça aide la communauté.
gwinyam est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/02/2011, 13h47   #6
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
Citation:
Envoyé par gwinyam Voir le message
Va expliquer ça à un client lambda.
si il attend de l'Excel c'est a toi de faire un fichier Excel, d'ailleurs qu'en t'ouvre directement un CSV y'a un message d'alerte, tu peux utiliser des lib comme PHPExcel, sinon Google Docs fait ca aussi en webservice
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/02/2011, 14h58   #7
Membre Expert
 
Avatar de gwinyam
 
Homme Mathieu ROBIN
Développeur Web
Inscription : mai 2006
Messages : 1 116
Détails du profil
Informations personnelles :
Nom : Homme Mathieu ROBIN
Âge : 25
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mai 2006
Messages : 1 116
Points : 2 142
Points : 2 142
On préfère un CSV parce que certains clients veulent pouvoir l'utiliser directement dans leur SI sans avoir de conversions à faire.
Et on ne passera pas par Google Docs, tout simplement parce que ce sont des données critiques et qu'il est bien évidemment hors de question de les faire passer par Google.

Du coup, j'ai toujours mon problème moi.
__________________
Mon blog techno et son billet hebdomadaire sur l'actualité jQuery. Et mon blog cuisine pour une personne.
Le bouton ne masse pas les pieds, mais ça aide la communauté.
gwinyam est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/02/2011, 15h07   #8
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
Citation:
Envoyé par gwinyam Voir le message
On préfère un CSV parce que certains clients veulent pouvoir l'utiliser directement dans leur SI sans avoir de conversions à faire.
Et on ne passera pas par Google Docs, tout simplement parce que ce sont des données critiques et qu'il est bien évidemment hors de question de les faire passer par Google.

Du coup, j'ai toujours mon problème moi.
Fait deux types d'export un xls et un csv.
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/02/2011, 15h26   #9
Membre Expert
 
Avatar de gwinyam
 
Homme Mathieu ROBIN
Développeur Web
Inscription : mai 2006
Messages : 1 116
Détails du profil
Informations personnelles :
Nom : Homme Mathieu ROBIN
Âge : 25
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mai 2006
Messages : 1 116
Points : 2 142
Points : 2 142
Citation:
Envoyé par stealth35 Voir le message
Fait deux types d'export un xls et un csv.
Effectivement. D'ailleurs je vois que même Google propose un export CSV classique et un export CSV dit "pour Excel".
On va revoir la stratégie mais ça saoule.
__________________
Mon blog techno et son billet hebdomadaire sur l'actualité jQuery. Et mon blog cuisine pour une personne.
Le bouton ne masse pas les pieds, mais ça aide la communauté.
gwinyam est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/02/2011, 15h33   #10
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
Citation:
Envoyé par gwinyam Voir le message
Effectivement. D'ailleurs je vois que même Google propose un export CSV classique et un export CSV dit "pour Excel".
On va revoir la stratégie mais ça saoule.
je compatis, en plus qu'en t'ouvre un CSV avec Excel il formate les champs, par exemple pour X raisons dans ton champs y'a : 03-12, lui il va formater ca en 3 Décembre ....
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2011, 11h44   #11
Membre Expert
 
Avatar de gwinyam
 
Homme Mathieu ROBIN
Développeur Web
Inscription : mai 2006
Messages : 1 116
Détails du profil
Informations personnelles :
Nom : Homme Mathieu ROBIN
Âge : 25
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mai 2006
Messages : 1 116
Points : 2 142
Points : 2 142
La solution que j'adopte est de retirer tout caractères spéciaux. Pour les caractères spéciaux, rien de compliqué, pour les valeurs monétaires, j'utilise Zend_Currency, donc avec l'option display à SHORT_NAME, je n'ai pas de caractères spéciaux et ainsi de suite.
__________________
Mon blog techno et son billet hebdomadaire sur l'actualité jQuery. Et mon blog cuisine pour une personne.
Le bouton ne masse pas les pieds, mais ça aide la communauté.
gwinyam est actuellement 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 12h51.


 
 
 
 
Partenaires

Hébergement Web