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

PHP & Base de données Discussion :

Export de MySQL sous format EXCEL


Sujet :

PHP & Base de données

  1. #1
    Futur Membre du Club
    Inscrit en
    Février 2009
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 5
    Par défaut Export de MySQL sous format EXCEL
    Bonjour à tous !


    Je cherche à exporter des données d'une bd Mysql sous un format excel, mais je suis bloqué dans le traitement du résultat de la requête SQL qui doit être de type array. je n'ai pas de problème pour

    utiliser la boucle while et afficher les resultas sur le navigateur, mais je peine à formater la sortie sur le classeur.

    Je reçois le message d'erreur que le format de données n'est pas de type array.

    Le framework utilisé est PHPexcel pour l'export en excel. je demande votre assistance.

    Les détails du code sont :

    J'ai mis en rouge la partie où j'ai des difficultés.
    -la bd : site_db
    -table :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE TABLE localite(
        idlocalite INT UNSIGNED AUTO_INCREMENT,
        nom VARCHAR(200) NOT NULL,
        PRIMARY KEY(idlocalite)
    )ENGINE=InnoDB;
    -code pour l'export en 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
    <?php
    include 'PHPExcel.php';
    include'PHPExcel/Writer/Excel2007.php';
     
    //creer le classeur excel où seront stockées les données en instanciant l'objet PHPExcel
     
            $workbook = new PHPExcel;
    //Activer la feuille sur laquelle nous allons travailler
     
            $sheet = $workbook->getActiveSheet();
     
    //Intégration des données dans le classeur excel2007 dont la feuille d'index 0 est activée
     
            //intégrer le titre dans la cellule A1
     
            $sheet->SetCellValue('A1', Liste des localites); 
     
            //intégrer l'entete du tableau de données à intégrer
     
            $sheet->SetCellValue('A2', 'idlocalite'); 
            $sheet->SetCellValue('B2', 'nom_localite');
     
            //intégrer les données proprement dites à partir de A3
     
            include("connexion_site_db.php");
     
            $sql='SELECT idlocalite,UPPER(nom) As nom_localite FROM localite ORDER BY nom_localite DESC';
            try {
                    $req = $bdd->prepare($qsl);
     
                    $req->execute();
                    $result=$req->setFetchMode(PDO::FETCH_NUM); 
     
                    while ($row = $req->fetch()) {
                                                $data=array();
                                                $data=array($row[0],$row[1]);
     
                    $sheet->fromArray(array($row[0],$row[1]), NULL, 'A3');
     
                                            }
                }
     
            catch (PDOException $e) {
     
                    print $e->getMessage();
     
                }                                                     
    //Enfin pour créer le fichier, nous devons instancier un objet writer, spécifique au type de tableau que nous voulons générer
     
                $writer = new PHPExcel_Writer_Excel2007($workbook);
     
            //Nous donnons un nom à  notre fichier excel  et l'affichons sur le navigateur web
     
            header('Content-type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
            header('Content-Disposition:inline;filename=Fichier.xlsx ');
            $writer->save('php://output');
     
    ?>

  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
    Pourrais-tu nous donner le message d'erreur exact ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Futur Membre du Club
    Inscrit en
    Février 2009
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 5
    Par défaut
    bonjour !

    Cela me donne un fichier excel vide qui affiche à l'ouverture le message suivant :

    Nom : img2.PNG
Affichages : 304
Taille : 27,1 Ko

    Le parse error a été corrigé. Il demeure le fait que le résultat de la requête n'est pas envoyé dans le fichier excel .
    Images attachées Images attachées  

  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
    Vérifie que tu obtiens bien une page blanche sans erreur si tu enlèves les 3 dernières lignes.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     while ($row = $req->fetch()) {
                                                $data=array();
                                                $data=array($row[0],$row[1]);
     
                    $sheet->fromArray(array($row[0],$row[1]), NULL, 'A3');
     
                                            }
    Tu l'as réinitialisé à chaque itération dans la boucle.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     $i = 3;
    while ($row = $req->fetch()) {
                $sheet->SetCellValue('A'.$i, $row[0]);
                $sheet->SetCellValue('B'.$i++, $row[1]);
    }
    A+.

  6. #6
    Futur Membre du Club
    Inscrit en
    Février 2009
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 5
    Par défaut
    Bonjour Sabotage et Andry Aime !

    Sabotage ,
    En supprimant les 3 dernières lignes le test m'affiche "undefined variable qsl". la variable est $sql et je m'étais trompé et mettre $qsl.
    Malgré cette correction si je remets les dernières lignes, ma requete sql n'est pas prise en compte dans le fichier excel qui est envoyé par le navigateur.

    Andry Aime ,
    en utilisant la boucle que tu me proposes, pas de message d'erreur mais ma requete sql n'est pas prise en compte dans le fichier excel qui est envoyé par le navigateur.

  7. #7
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    La requête retourne des résultats en l'exécutant directement sur la base?
    Dans le fichier connexion_site_db.php, ajoute
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    et commente les 3 dernières lignes de code.

    A+.

  8. #8
    Futur Membre du Club
    Inscrit en
    Février 2009
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 5
    Par défaut
    oui la requete a été testée et affiche la liste des localités sur le navigateur. Le problème c'est écrire dans le classeur avec PHPExcel.
    Le code du fichier 'conexion_site_db' est :

    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
    <DOCTYPE html>
    	<html>
    		<head>
    			<meta charset="utf-8">
    			<title>connexion_site_db</title>
    		</head>	
    		<body>
    			<?php
    				try
    					{
    						$bdd = new PDO('mysql:host=localhost;dbname=site_db;charset=utf8', 'root', '',array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
    					}
    				catch (Exception $e)
    					{
    						die('Erreur : ' . $e->getMessage());
    					}
    			?>				
    		</body>		
    	</html>

  9. #9
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Vire toute les balises HTML de ce fichier. Garde seulement les codes php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php
    				try
    					{
    						$bdd = new PDO('mysql:host=localhost;dbname=site_db;charset=utf8', 'root', '',array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
    					}
    				catch (Exception $e)
    					{
    						die('Erreur : ' . $e->getMessage());
    					}
    			?>

  10. #10
    Futur Membre du Club
    Inscrit en
    Février 2009
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 5
    Par défaut
    c'est fait . mais c'est le meme resultat

    j'ai egalement fait le var_dump de la variable representant le resultat de la requete. voici les détails :

    le code de test avec l'option setFetchMode(PDO::FETCH_NUM):

    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php
    		include("connexion_site_db.php");
     
            $sql='SELECT idlocalite,UPPER(nom) As nom_localite FROM localite ORDER BY nom_localite DESC';
     
    		//try {
    		$req = $bdd->prepare($sql);
    		$req->execute();
    		$req->setFetchMode(PDO::FETCH_NUM); 
    		$result=$req->fetchall();
     
    		echo var_dump($result);
    	?>

    -le navigateur affiche :

    C:\wamp64\www\test\test_var_dump.php:21:
    array (size=611)
      0 => 
        array (size=2)
          0 => string '611' (length=3)
          1 => string 'ZOUNGOU
    ' (length=8)
      1 => 
        array (size=2)
          0 => string '610' (length=3)
          1 => string 'ZORGHO
    ' (length=7)
      2 => 
        array (size=2)
          0 => string '609' (length=3)
          1 => string 'ZONSE
    ' (length=6)
    Cela me rassure que la requête s’exécute normalement mais le problème c'est les boucles pour écrire dans excel et l'utilisation de PHPExcel.

Discussions similaires

  1. [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
  2. [ODBC] Exporter les resultats d'une requête sous format Excel
    Par razily dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 07/06/2010, 21h32
  3. exporter des données sous format excel en php
    Par legide dans le forum Langage
    Réponses: 4
    Dernier message: 25/06/2009, 09h12
  4. Export des données de la base sous format excel
    Par zanoubya dans le forum Débuter
    Réponses: 7
    Dernier message: 03/03/2009, 16h55
  5. Exporter ma datagrid sous format EXCEL
    Par zaineb.z dans le forum ASP.NET
    Réponses: 4
    Dernier message: 16/06/2008, 16h35

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