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

Bibliothèques et frameworks PHP Discussion :

[WriteExcel] Accents sur MS-Excel


Sujet :

Bibliothèques et frameworks PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2010
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mai 2010
    Messages : 21
    Par défaut [WriteExcel] Accents sur MS-Excel
    Bonjour à toi, oh mon sauveur !

    Je développe un application sur laquelle on peut récupérer des données au format Excel. Tout va bien chez moi (j'utilise OpenOffice car pas assez de sous pour acheter du microsoft) je récupère un fichier XLS impeccable, qui s'ouvre très bien sous OpenOffice Calc.

    Mais problème, certains des utilisateurs de mon appli qui utilisent MS Office Excel me disent que les accents ne sont pas bons.
    Des accents pas bon !! Comment ça ??
    Et bien en fait oui, j'ai eu l'occasion de vérifier, le fichier ouvert par MS Office n'a pas d'accents (mais des caractères bizarres) (sur PC) alors qu'avec OpenOffice Calc c'est tout bon. Ca ressemble à du UTF8 affiché en ISO, ce qui est impossible sinon ça ne marcherait pas non plus sous calc...

    Diantre, je suis fait !

    Et google qui reste muet sur ce problème... Serais-je le premier ?

    Si vous vous sentez l'âme charitable, merci de m'aider .
    J'ai déjà testé utf8-decode et utf8-encode mais ça n'a pas fonctionné.

    Merci pour votre aide.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Ca ressemble à du UTF8 affiché en ISO, ce qui est impossible sinon ça ne marcherait pas non plus sous calc...
    Sauf si CALC sait lire les deux encodages alors que EXCEL non.

    Pour ce que j'en lis, par contre, ni Writeexcel, ni Excel ne savent travailler en UTF8. Il faudrait donc bien decoder tes données ou travailler en ANSI.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2010
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mai 2010
    Messages : 21
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Sauf si CALC sait lire les deux encodages alors que EXCEL non.
    Merci pour ta réponse rapide, effectivement il doit y avoir un truc qui plait pas à Excel, ou plutôt qui devrait pas passer mais qui est quand même géré par Calc.

    Par contre, oui, je te confirme, je travaille bien en ansi et il y a bien un décodage utf8-ansi des champs qui proviennent de la base, et j'ai essayé avec un test simple (genre je génère un xls avec 1 seule cellule "Pétard" par exemple) et ça foire copieusement avec le é.
    Ah, au fait, mes scripts php (les fichiers .php) sont codés en UTF8, mais je décode tout avant d'envoyer à writeExcel, je fais pas un write("pétard"... mais un write(utf8-decode...

    En tout cas merci de ton aide.

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Tu obtiens quoi par exemple pour "pétard" ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    On peut avoir un bout de code ?

  6. #6
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2010
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mai 2010
    Messages : 21
    Par défaut
    Citation Envoyé par MaitrePylos Voir le message
    On peut avoir un bout de code ?
    Le problème c'est que si je rajoute une couche de utf8_decode(), j'obtiens par exemple "Civilit?" et si je rajoute une couche de utf8_encode(), j'obtiens "Civilité".... (toujours sur OpenOffice calc) donc ce n'est pas ça...

    voilà le contenu de $donnees (c'est un print_r)
    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
     
    Array
    (
        [cols] => Array
            (
                [0] => 15
                [1] => Type
                [2] => 5
                [3] => Civilité
                [4] => 16
                [5] => Nom
                [6] => 16
                [7] => Prénom
                [8] => 20
                [9] => Courriel
                [10] => 5
                [11] => Voiture aller
                [12] => 5
                [13] => Place aller
                [14] => 10
                [15] => Départ aller
                [16] => 10
                [17] => Arrivée aller
                [18] => 5
                [19] => Repas aller
                [20] => 5
                [21] => Voiture retour
                [22] => 5
                [23] => Place retour
                [24] => 10
                [25] => Départ retour
                [26] => 10
                [27] => Arrivée retour
                [28] => 5
                [29] => Repas retour
                [30] => 5
                [31] => Nombre de repas
            )
        [data] => Array
            (
                [0] => Array
                    (
                        [0] => center
                        [1] => Pèlerin malade
                        [2] => center
                        [3] => Mr
                        [4] => center
                        [5] => TRUC
                        [6] => center
                        [7] => Thérèse
                        [8] => center
                        [9] => 
                        [10] => center
                        [11] => Voiture 17
                        [12] => center
                        [13] => 27
                        [14] => center
                        [15] => 05/01/2010
                        [16] => center
                        [17] => 05/01/2010
                        [18] => center
                        [19] => OUI
                        [20] => center
                        [21] => 
                        [22] => center
                        [23] => 
                        [24] => center
                        [25] => N.P.
                        [26] => center
                        [27] => N.P.
                        [28] => grayed
                        [29] => non
                        [30] => center
                        [31] => 1
                    )
            )
    )
    Et voici le 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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    		$fname = tempnam("/tmp", "logistique.xls");
    		$workbook = new writeexcel_workbook($fname);
     
    		$worksheet1 = $workbook->addworksheet(utf8_decode($nom_onglet));
     
    		// bloquage haut grille
    		$worksheet1->freeze_panes(1, 0); # 1 row
     
    		$header = $workbook->addformat();
    		$header->set_align('center');
     
    		$center = $workbook->addformat();
    		$center->set_align('center');
     
    		$grayed = $workbook->addformat();
    		$grayed->set_align('center');
    		$grayed->set_italic();
    		$grayed->set_color('gray');
     
    		$worksheet1->set_row(0, 20);
    		$worksheet1->set_selection('A2');
     
    		for( $i=0; $i<count($donnees['cols'])/2; $i++ ){
    		    $worksheet1->set_column($i, $i, $donnees['cols'][$i*2]);
    		    $worksheet1->write(0, $i, $donnees['cols'][$i*2+1], $header);
    		}
     
    		for( $j=1; $j<=count($donnees['data']); $j++ ){
    			$ligne = $donnees['data'][$j-1];
    			for( $i=0; $i<count($donnees['cols']); $i++ ) {
    				if(array_key_exists($i*2+1,$ligne) && $ligne[$i*2+1]){
    					$style = $ligne[$i*2];
    					$valeur = $ligne[$i*2+1];
    					if(array_key_exists($i*2,$ligne))$worksheet1->write($j, $i, $valeur, $$style); // Il y a bien 2 '$'
    				}
    		    }
    		}
     
    		$workbook->close();
     
    		header("Content-Type: application/x-msexcel; name=\"$nom_fichier\"");
    		header("Content-Disposition: inline; filename=\"$nom_fichier\"");
    		$fh=fopen($fname, "rb");
    		fpassthru($fh);
    		unlink($fname);

Discussions similaires

  1. Réponses: 1
    Dernier message: 03/08/2012, 11h34
  2. Pb d'accent et autre sur feuille EXCEL
    Par Mengué georges dans le forum Documents
    Réponses: 2
    Dernier message: 06/04/2008, 19h51
  3. [Spreadsheet-WriteExcel] Largeur des colonnes Excel
    Par Longrais dans le forum Modules
    Réponses: 2
    Dernier message: 17/10/2005, 16h41
  4. Réponses: 8
    Dernier message: 11/10/2005, 14h30
  5. Trouver doublons sur feuille excel
    Par taku dans le forum Langage
    Réponses: 6
    Dernier message: 27/09/2005, 11h14

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