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

Langage PHP Discussion :

exporter des données sous format excel en php


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Inscrit en
    Mars 2007
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 140
    Points : 62
    Points
    62
    Par défaut exporter des données sous format excel en php
    Bonjour ,

    je voudrai exporter des données depuis ma base de données vers un fichier excel en utilisant PHP.

    le problème auquel je suis buté est l'encodage des caractères. je ne sais comment définir l'encodage du fichier excel?

    j'ai essayé avec ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    header("Content-type: application/octet-stream ; charset:ISO-8859-14");
    header("Content-Disposition: attachment; filename=newsletter.xls");// Donner un nom au fichier excel
    header("Pragma: no-cache");
    header("Expires: 0");
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    header("Content-type: application/octet-stream ; charset='ISO-8859-14' ");
    header("Content-Disposition: attachment; filename=newsletter.xls");// Donner un nom au fichier excel
    header("Pragma: no-cache");
    header("Expires: 0");
    mais ça ne marche pas.

    comment résoudre ce problème.

    Merci d'avance.

  2. #2
    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

  3. #3
    Membre du Club
    Inscrit en
    Mars 2007
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 140
    Points : 62
    Points
    62
    Par défaut
    Merci,
    mais je ne peux pas utilisé cette bibliothèque du fait que j'utilise un CMS. intégrer cette biblio compliquerai la tache.
    dans les lignes de ce tutoriel j'ai vu cette ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    header('Content-type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
    .
    j'ai remplacé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    header("Content-type: application/octet-stream ; charset='iso-8859-1'");
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    header('Content-type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
    mais ça ne marche toujours pas.

    J'ai essayé aussi d'utiliser des fonctions php pour forcer l'encodage mais ça ne marche toujours pas.
    voici un exemple (pour afficher le texte de la variable $email) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $email ="les élèment";
    $em = mb_convert_encoding($email,"UTF-8",mb_detect_encoding($email, "UTF-8, ISO-8859-1, ISO-8859-15", true));
     
    	      echo $em. $tab;
    mais ça ne marche pas.

  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
    Si tu veux decoder de l'utf8, utiliser utf8_decode : malheureusement la detection de l'encodage n'est d'experience pas fiable et il faut soit decoder, soit ne pas le faire ... mais le faire dynamiquement ca ne fonctionne pas.

    Si tu n'utilises pas une classe comme PHPExcel, qu'utilises-tu pour générer ton fichier ?

  5. #5
    Membre du Club
    Inscrit en
    Mars 2007
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 140
    Points : 62
    Points
    62
    Par défaut
    merci,

    voici mon code pour la génération du fichier excel:

    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
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
     
     
    <?php
     
    //Déclarer des variables    
    $tab = "\t";
    $cr = "\n";
     
    $fp = fopen($filename,"a"); // $fp pointeur du fichier $filename
    if($fp){
        fwrite($fp,$data);    //    Write information to the file
        fclose($fp);  //    Close the file
        echo "File saved successfully";
    } else {
       // echo "Error saving file!";
    }
     
    header("Content-type: application/ms-excel");
    header("Content-Disposition: attachment; filename=newsletter.xls");// Donner un nom au fichier excel
    header("Pragma: no-cache");
    header("Expires: 0"); 
     
     
    // Fetch d'extration du contenu depuit la base de données EZ
    $v=eZContentObjectTreeNode::subTreeByNodeID(
            array(  'ClassFilterType' => 'include',
                    'ClassFilterArray' => array('compte_newsletter'),// identifiant de la classe
                    'Depth' => 1,
                    'DepthOperator' => 'eq'),
           12448// ID du noeud parent
    );
     
    // Affichage du titre et des libellés
     
    echo 'Inscription à la newsletter'. $cr;
     
    echo $cr. $cr. $cr;
     
     
    $libelle = "Adresse E-mail ( E-mail Adress )" . $tab . " Nom ( Last name ) " . $tab . "Prénom ( First name)" . $tab . " Enseigne ( Chain )" . $tab . " Fonction ( Function )" . $tab . " Téléphone ( Phone )" . $tab . " Fax "  . $tab . "Langue ( Language ) " . $cr .$cr;
     
    echo $libelle;
     
    foreach ( $v as $o )
    {
     
     
     
            $dataMap =& $o->dataMap();
            $email =& $dataMap['email']->content();
            $em = mb_convert_encoding($email,"UTF-8",mb_detect_encoding($email, "UTF-8, ISO-8859-1, ISO-8859-15", true));
     
    	      echo $em. $tab;
     
    	      $dataMap =& $o->dataMap();
            $nom =& $dataMap['nom']->content();
            $nm = mb_convert_encoding($nom,"UTF-8",mb_detect_encoding($nom, "UTF-8, ISO-8859-1, ISO-8859-15", true));
     
    	      echo $nm. $tab;
     
    	      $dataMap =& $o->dataMap();
            $prenom =& $dataMap['prenom']->content();
            $prnm = mb_convert_encoding($prenom,"UTF-8",mb_detect_encoding($prenom, "UTF-8, ISO-8859-1, ISO-8859-15", true));
     
    	      echo $prnm. $tab;
     
    	      $dataMap =& $o->dataMap();
            $enseigne =& $dataMap['enseigne']->content();
            $ensig = mb_convert_encoding($enseigne,"UTF-8",mb_detect_encoding($enseigne, "UTF-8, ISO-8859-1, ISO-8859-15", true));
     
    	      echo $ensig. $tab;
     
    	      $dataMap =& $o->dataMap();
            $fonction =& $dataMap['fonction']->content();
            $font = mb_convert_encoding($fonction,"UTF-8",mb_detect_encoding($fonction, "UTF-8, ISO-8859-1, ISO-8859-15", true));
     
    	      echo $font. $tab;
     
    	      $dataMap =& $o->dataMap();
            $telephone =& $dataMap['telephone']->content();
            $phone = mb_convert_encoding($telephone,"UTF-8",mb_detect_encoding($telephone, "UTF-8, ISO-8859-1, ISO-8859-15", true));
     
    	      echo $phone. $tab;
     
    	      $dataMap =& $o->dataMap();
            $fax =& $dataMap['fax']->content();
            $fx = mb_convert_encoding($fax,"UTF-8",mb_detect_encoding($fax, "UTF-8, ISO-8859-1, ISO-8859-15", true));
     
    	      echo $fx. $tab;
     
    	      $objetlangue = & $o->object();
    	      $langue =& $objetlangue->attribute('current_language');
     
    	      $fr = " Français";
    	      $en = " English ";
     
            if($langue == 'fre-FR'){
     
            	echo $fr. $cr ;
            }else{
            	echo $en. $cr ;
            }
     
     
    }
     
     
     
     
    ?>
    j' utilise le CMS EZ publish ce qui explique la présence des certaines fonctions

    (permettant de recupérer les données depuis une BD) que vous ne savez peut être pas.

Discussions similaires

  1. [PHP 5.3] l'exportation des données sous format pdf
    Par mariem deve dans le forum Langage
    Réponses: 2
    Dernier message: 15/05/2013, 14h11
  2. [XL-2010] Exportation des données sous format excel
    Par mariem deve dans le forum Excel
    Réponses: 2
    Dernier message: 08/05/2013, 12h35
  3. Exporter des données sous Excel
    Par Au pays des stats dans le forum ODS et reporting
    Réponses: 1
    Dernier message: 30/12/2011, 10h53
  4. Problème pour exporter des données sous Excel
    Par antoine2933 dans le forum ODS et reporting
    Réponses: 10
    Dernier message: 28/06/2011, 11h16
  5. Réponses: 2
    Dernier message: 01/05/2010, 20h38

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