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

  1. #1
    Membre à l'essai
    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
    Points : 15
    Points
    15
    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
    Points : 44 155
    Points
    44 155
    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.

  3. #3
    Membre à l'essai
    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
    Points : 15
    Points
    15
    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
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu obtiens quoi par exemple pour "pétard" ?

  5. #5
    Modérateur

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

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

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

  6. #6
    Membre à l'essai
    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
    Points : 15
    Points
    15
    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);

  7. #7
    Modérateur

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

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 497
    Points : 12 600
    Points
    12 600
    Par défaut
    Plutôt que d'envoyer le fichier, tu ne peux pas l'enregistrer pour voir si il y a une différence ?

  8. #8
    Membre à l'essai
    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
    Points : 15
    Points
    15
    Par défaut
    Citation Envoyé par MaitrePylos Voir le message
    Plutôt que d'envoyer le fichier, tu ne peux pas l'enregistrer pour voir si il y a une différence ?
    Déjà testé, c'est tout pareil.

    Je suis triste et super déçu je ne vois toujours pas d'où ça peut venir....

  9. #9
    Modérateur

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

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 497
    Points : 12 600
    Points
    12 600
    Par défaut
    Quelles sont les entête du fichier HTML ?

    As tu déjà Essayer PHPExcel

  10. #10
    Membre à l'essai
    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
    Points : 15
    Points
    15
    Par défaut
    Citation Envoyé par MaitrePylos Voir le message
    Quelles sont les entête du fichier HTML ?

    As tu déjà Essayer PHPExcel
    Heu....

    Il n'y a pas de fichier HTML puisque
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    		header("Content-Type: application/x-msexcel; name=\"$nom_fichier\"");
    		header("Content-Disposition: inline; filename=\"$nom_fichier\"");
    		$fh=fopen($fname, "rb");
    		fpassthru($fh);
    		unlink($fname);
    et qu'ensuite rien n'est envoyé au navigateur, ce qui poserait effectivement problème (et encore une fois, tout va bien jusqu'à l'ouverture du fichier dans MS-Office-Excel, et aucun problème avec OpenOffice).

    Je ne vois pas pourquoi tu me poses cette question du coup je me dis qu'il y a quelque chose à quoi je n'ai pas pensé. Peux tu expliquer ton idée ?

    Pour répondre à ta 2ème question, non, je n'ai pas essayé, et je refuse d'abandonner sur un problème que je suis le seul à avoir (sinon j'aurais des réponses avec Google), donc un problème dont je suis forcément responsable. Cette librairie fonctionne avec les autres, pourquoi pas avec moi ?

  11. #11
    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
    Points : 44 155
    Points
    44 155
    Par défaut
    Quel est l'encodage du fichier php et d'ou viennent les données ?

  12. #12
    Modérateur

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

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 497
    Points : 12 600
    Points
    12 600
    Par défaut
    Citation Envoyé par The_Fakir Voir le message

    Je ne vois pas pourquoi tu me poses cette question du coup je me dis qu'il y a quelque chose à quoi je n'ai pas pensé. Peux tu expliquer ton idée ?
    Tu n'as donc rien de ce genre ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      <META HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=iso-8859-1">
    Suit la piste de Sabotage cfr : ci-dessus

    De plus après la génération de ton document, as tu vérifié dans Excel (le microsoft hein ) les propriétés de la cellule ?

  13. #13
    Membre à l'essai
    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
    Points : 15
    Points
    15
    Par défaut
    Citation Envoyé par MaitrePylos Voir le message
    Tu n'as donc rien de ce genre ?
    <META HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=iso

    Suit la piste de Sabotage cfr : ci-dessus

    De plus après la génération de ton document, as tu vérifié dans Excel (le microsoft hein ) les propriétés de la cellule ?
    Heu là vous êtes sur la mauvaise piste : sur une retour serveur qui envoie un fichier au client, il n'y a pas de HTTP-EQUIV car seul le fichier est envoyé en binaire (donc sans transformation) et le client l'ouvre en regardant le type mime précisé (là je suis archi-sûr de moi je fais cela tout le temps), et si j'envoie de cette façon un fichier xls généré par directement par microsoft office (donc pas par WriteExcel), tout va bien. Le problème est dans la génération du fichier, pas dans sa transmission.

    L'origine des données est sans importance (il est multiple, en grande partie une base mysql et un retour de SOAP sur un site partenaire), il est déterminé dynamiquement par des plugins additionnels qui viennent se greffer dynamiquement suivant les besoins et s'assurent qu'on récupère bien de l'ANSI. Je me suis assuré qu'il était bien codé en ANSI. Encore une fois ça ne marche pas non plus avec un test statique tel que celui que j'ai donné en dernier (en rentrant les données "à la main").

    Par contre qu'est-ce qu'il faut que je regarde dans les propriétés de la cellule ?

  14. #14
    Modérateur

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

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 497
    Points : 12 600
    Points
    12 600
    Par défaut
    Et avec l'entête suivante ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    		header("Content-Type: application/vnd.ms-excel;");
    		header("Content-Disposition: inline; filename=\"$nom_fichier\"");
    		$fh=fopen($fname, "rb");
    		fpassthru($fh);
    		unlink($fname);

  15. #15
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Salut

    Il y a plusieurs point que je pige pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    		header("Content-Type: application/x-msexcel; name=\"$nom_fichier\"");
    		header("Content-Disposition: inline; filename=\"$nom_fichier\"");
    		$fh=fopen($fname, "rb");
    		fpassthru($fh);
    		unlink($fname);
    Ici, le fichier est de type Excel, cependant, tu indique inline.
    Ce ne serait pas plutôt attachment ? Car il doit être téléchargé, non ?

    Puis après, tu fais un fpassthru(), ce qui théoriquement doit renvoyer le contenu du fichier, et stopper le script (suivant la doc).
    Pourquoi renvoyer le contenu du fichier ?
    C'est de l'Excel, donc un navigateur ne pourra pas interpréter ce fichier.
    A mon sens, il n'y a pas en revoyer le contenu, juste le proposer en téléchargement.


    Pour ce qui est des caractère, tu précise que le contenu doit être codé en ANSI.
    Mais je remarque des fonction comme utf8_decode(). Mais selon la doc, cette fonction va décoder un contenu UTF-8 pour la convertir en ISO-8859-1.
    Ce ne serait pas là le problème ? Ne faudrait il pas utiliser une autre fonction pour un jeu de caractère propre à Microsoft ?
    Les données au départ sont elles réellement en UTF-8 ?

    Juste comme ça, l'excel n'accepterait il pas de l'UTF-8 (ce qui m'étonnerais) ?
    Ou c'est la librairie Php/Excel qui n'accepterait pas l'UTF-8 ?

    Pour ma part, il serait mieux rester en UTF-8 si c'est possible.
    Et si j'ai compris le problème aussi.

  16. #16
    Membre à l'essai
    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
    Points : 15
    Points
    15
    Par défaut
    Citation Envoyé par RunCodePhp Voir le message
    Salut

    Il y a plusieurs point que je pige pas.

    Ici, le fichier est de type Excel, cependant, tu indique inline.
    Ce ne serait pas plutôt attachment ? Car il doit être téléchargé, non ?
    Non, le inline permet d'envoyer un fichier sans rien faire d'autre justement, d'où l'inutilité de préciser le codage HTML. Ainsi l'utilisateur peut choisir de l'ouvrir ou de l'enregistrer.
    Citation Envoyé par RunCodePhp Voir le message
    Puis après, tu fais un fpassthru(), ce qui théoriquement doit renvoyer le contenu du fichier, et stopper le script (suivant la doc).
    Pourquoi renvoyer le contenu du fichier ?
    Ben pour l'envoyer
    Citation Envoyé par RunCodePhp Voir le message
    C'est de l'Excel, donc un navigateur ne pourra pas interpréter ce fichier.
    A mon sens, il n'y a pas en revoyer le contenu, juste le proposer en téléchargement.
    Non mais ne t'inquiètes pas ça marche tout le temps, je m'en sert en permanence, et comme je l'ai déjà dit plus haut, si je prends un fichier XLS généré par MS-Office et que je l'envoie comme ça tout va bien.

    Encore une fois, pour tout le monde, le problème n'est pas dans la transmission mais dans la génération du fichier.

    Citation Envoyé par RunCodePhp Voir le message
    Pour ce qui est des caractère, tu précise que le contenu doit être codé en ANSI.
    Mais je remarque des fonction comme utf8_decode(). Mais selon la doc, cette fonction va décoder un contenu UTF-8 pour la convertir en ISO-8859-1.
    Oui pardon, autant pour moi, en ISO-8859-1. Tu as raison j'ai dit ANSI au lieu de ISO.
    Citation Envoyé par RunCodePhp Voir le message
    Les données au départ sont elles réellement en UTF-8 ?
    Les tites des onglets sont en UTF-8 (d'où le utf8-decode) et les données récupérées sont directement en ISO (et pas en ANSI comme je l'ai dit). Donc pas de utf8-decode pour les données. Et j'ai le même problème pour les entêtes et les données.
    Citation Envoyé par RunCodePhp Voir le message
    Juste comme ça, l'excel n'accepterait il pas de l'UTF-8 (ce qui m'étonnerais) ?
    Ou c'est la librairie Php/Excel qui n'accepterait pas l'UTF-8 ?
    Ni excel ni WriteExcel n'accepte l'UTF-8, d'où le passage en ISO. Si j'envoie de l'utf8, ça ne marche plus ni dans OpenOffice ni dans MS-Office
    Citation Envoyé par RunCodePhp Voir le message
    Pour ma part, il serait mieux rester en UTF-8 si c'est possible.
    Ben non, justement il ne prend pas de l'UTF-8 (sinon ça serait trop simple )

    En tout cas merci à tous de vous intéresser à mon souci !!

  17. #17
    Membre à l'essai
    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
    Points : 15
    Points
    15
    Par défaut
    Citation Envoyé par MaitrePylos Voir le message
    Et avec l'entête suivante ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    header("Content-Type: application/vnd.ms-excel;");
    Je vais tester ça merci (mais pas contre ça sera ce soir tard, sauf si j'ai un créneau avant)

  18. #18
    Modérateur

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

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 497
    Points : 12 600
    Points
    12 600
    Par défaut
    Tu as essayé ?

    Citation Envoyé par MaitrePylos Voir le message
    Et avec l'entête suivante ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    		header("Content-Type: application/vnd.ms-excel;");
    		header("Content-Disposition: inline; filename=\"$nom_fichier\"");
    		$fh=fopen($fname, "rb");
    		fpassthru($fh);
    		unlink($fname);

  19. #19
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    J'ai l'impression qu'on a perdu le fil, le fond du problème.
    Le rappeler ne serait peut être pas inutile

    C'est un problème pour ouvrir le fichier, le télécharger ? A mon avis non, vu que tu l'obtient.
    Ce serait un problème d'encodage (correcte sur Calc, mais pas sur Excel) ? C'est ça ?

    Il y a un truc qui m'intrigue, c'est justement le fait de faire un fpassthru(), ça renvoie donc le contenu.
    Si au niveau de Php l'encodage est UTF-8 quelque part, ça pourrait causer un problème.
    Enfin, c'est une idée.
    Donc juste comme ça, essai de rajouter/définir le charset, un truc comme : (avant le fpassthru)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    header('Content-Type: text/html; charset=ISO-8859-1');
    N'empêche que je reste d'avis que de faire un inline + fpassthru() serait inutile, car si on précise juste attachement, la boite de dialogue proposera les 2, soit télécharger, soit d'ouvrir le fichier.
    Puis c'est un mécanisme coté client, donc on décide soit même comment cette boite de dialogue doit réagir normalement.
    Enfin, je peux me tromper

  20. #20
    Membre à l'essai
    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
    Points : 15
    Points
    15
    Par défaut
    Citation Envoyé par RunCodePhp Voir le message
    C'est un problème pour ouvrir le fichier, le télécharger ? A mon avis non, vu que tu l'obtient.
    Ce serait un problème d'encodage (correcte sur Calc, mais pas sur Excel) ? C'est ça ?
    Oui, je confirme, le téléchargement, je maitrise, ce n'est pas le problème, puisqu'encore une fois avec un fichier sain envoyé de cette méthode, tout marche bien.

    Citation Envoyé par RunCodePhp Voir le message
    Il y a un truc qui m'intrigue, c'est justement le fait de faire un fpassthru(), ça renvoie donc le contenu.
    Si au niveau de Php l'encodage est UTF-8 quelque part, ça pourrait causer un problème.
    Enfin, c'est une idée.
    Donc juste comme ça, essai de rajouter/définir le charset, un truc comme : (avant le fpassthru)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    header('Content-Type: text/html; charset=ISO-8859-1');
    Non et encore non, le content-type ne sert à rien dans ce cas. Si tu le mets il est ignoré, vu qu'il n'y a aucun contenu HTML, c'est juste le fichier en binaire. Tu peux me faire confiance là-dessus. D'habitude je n'ai aucun souci, et encore une fois, ce n'est pas un problème de transfert, le problème est DANS WriteExcel, qui génère un fichier sur le disque.

    Citation Envoyé par RunCodePhp Voir le message
    N'empêche que je reste d'avis que de faire un inline + fpassthru() serait inutile, car si on précise juste attachement, la boite de dialogue proposera les 2, soit télécharger, soit d'ouvrir le fichier.
    Puis c'est un mécanisme coté client, donc on décide soit même comment cette boite de dialogue doit réagir normalement.
    C'est déjà ce qui se passe avec le inline, comme d'habitude.

    D'autre part, si tu ne fais pas le fpassthru, rien n'est envoyé au navigateur, car writeExcel n'envoie rien, il se contente de générer un fichier sur le serveur.

    Pour information, le attachement, c'est quand tu veux renvoyer une page html PLUS un fichier attaché à la page. Là, la requête ne doit renvoyer QUE le fichier, d'où le inline. C'est comme ça que ça doit marcher, je n'ai aucun contenu HTML à envoyer.

    Donc, à ta demande, je recentre le débat :

    N'essayez pas de me dire comment transférer le fichier, ça je maitrise. Le problème est dans mon utilisation de writeexcel, qui génère un fichier sur le serveur qui est défectueux. Si j'utilise le fichier généré sur le serveur et que je l'ouvre avec MS-Office-Excel, je constate le problème.

    Donc PITIÉ, arrêtez de me reprendre sur les entêtes HTML et tout ça, le problème EST dans mon utilisation de writeExcel, je le sais et j'en ai la preuve.

    LE FICHIER GÉNÉRÉ AVANT ENVOI EST DÉJÀ DÉFECTUEUX

    voilà voilà...

    Donc si vous connaissez WriteExcel, vous pouvez m'aider, sinon vous ne pouvez pas.

    Par contre là j'ai l'air de m'enerver, je m'en excuse, mais c juste pour être clair :

    Je sais où est le problème, il est dans mon utilisation de writeExcel, donc ne perdez pas votre temps à essayer de le trouver ailleurs

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