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

SGBD Perl Discussion :

Resultats d'un select vers un fichier excel


Sujet :

SGBD Perl

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2006
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 33
    Points : 18
    Points
    18
    Par défaut Resultats d'un select vers un fichier excel
    Salut a tous et merci a tous ceux qui auront participer à solutionner mon probleme.

    voila j'essai de recuperer le resultat d'un select sur une table mysql dans un fichier excel.

    voici le script
    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
     
    #EXECUTE select dans base mysql
    $requete = "SELECT * FROM X r where type ='C' order by date desc";
    	$sth = $dbh->prepare($requete);
    	$dbh->{'mysql_use_result'}=1;
    $sth->execute();
     
    #renvoie information des differents champ dans une variable globale
    while(@row = $sth->fetchrow_array){
     
    $dep_D = $row[0];
    $dep_N = $row[1];
    $dep_P= $row[2];
    $dep_L= $row[3];
    $dep_T = $row[4];
    $dep_C =$row[5];
    $dep_Di =$row[6];
    $dep_J = $row[7];
    $dep_E =$row[8];
     
    # Creer un nouveau fichier excel
        my $workbook = Spreadsheet::WriteExcel->new("$rr1");
     
        # Add a worksheet
        my $worksheet = $workbook->addworksheet();
     
        #  Add and define a format
        my $format = $workbook->addformat(); # Add a format
        $format->set_bold();						#
        $format->set_align('center');	
    	#
        # And if the keep_leading_zeros property is set:
    $worksheet->write(1, 1, "$dep_D");
    $worksheet->write(1, 2, "$dep_N");
    $worksheet->write(1, 3, "$dep_P");
    $worksheet->write(1, 4, "$dep_L");
    $worksheet->write(1, 5, "$dep_T");
    $worksheet->write(1, 6, "$dep_C");
    $worksheet->write(1, 7, "$dep_Di");
     
    }
    }
    $sth -> finish;
    $dbh -> disconnect;
    Suite au script tout ce passe bien et j'obtient le resultat dans mon fichier excel mais il n'ecrit que la derniere ligne et il semblerait que cela vient de "$sth->fetchrow_array".
    Ma requete "select" me sort un resultat contenant plusieurs lignes mais je n'arrive pas a les afficher l'une apres l'autre dans le fichier excel.

    j'ai trouve une info en utilisant:
    dump_result
    Ca donne ca en envoyant le resultat de la requete sql vers un fichier
    $lignes = $sth->dump_results(50 , "\n" ,',' ,\*R1);
    J'ai bien toutes les lignes dans le fichier mais apres faut faire du traitement dans le fichier pour extraire les infos.

    Bien que je ne sois pas un expert en perl, n'existe il pas un moyen de renvoyer l'ensemble des lignes d'une requetes sql (un select par exemple) vers un fichier excel.

  2. #2
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    while(@row = $sth->fetchrow_array){
     
    $dep_D = $row[0];
    $dep_N = $row[1];
    $dep_P= $row[2];
    $dep_L= $row[3];
    $dep_T = $row[4];
    $dep_C =$row[5];
    $dep_Di =$row[6];
    $dep_J = $row[7];
    $dep_E =$row[8];
     
    # Creer un nouveau fichier excel
        my $workbook = Spreadsheet::WriteExcel->new("$rr1");
    Suite au script tout ce passe bien et j'obtient le resultat dans mon fichier excel mais il n'ecrit que la derniere ligne et il semblerait que cela vient de "$sth->fetchrow_array".
    Ma requete "select" me sort un resultat contenant plusieurs lignes mais je n'arrive pas a les afficher l'une apres l'autre dans le fichier excel.
    A chaque passage dans le while tu recrées un nouveau fichier et écrases donc le précédent. Crée ton fichier excel avant d'entrer dans cette boucle.
    -- Jasmine --

  3. #3
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Regarde bien ton code... Tu réouvres ton fichier à chaque itération de la boucle.
    Il faut que tu ouvres ton fichier en dehors de la boucle, seuls les write() devraient rester dans la boucle, il faudrait également que tu leurs fasse écrire sur une ligne qui dépende de l'itération, et pas toujours sur la même ligne 1, rajoute un compteur $i que tu incrémente à chaque itération.

    --
    Jedaï

  4. #4
    Membre à l'essai
    Inscrit en
    Mai 2006
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 33
    Points : 18
    Points
    18
    Par défaut
    Merci de vos reponses je teste ca au plus vite en esperant m'en sortir mais c'est deja un bon depart.

  5. #5
    Membre à l'essai
    Inscrit en
    Mai 2006
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 33
    Points : 18
    Points
    18
    Par défaut
    j'ai modifie mon 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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
     
    # Creer un nouveau fichier excel
        my $workbook = Spreadsheet::WriteExcel->new("$rr1");
     
        # Add a worksheet
        my $worksheet = $workbook->addworksheet();
     
        #  Add and define a format
        my $format = $workbook->addformat(); # Add a format
        $format->set_bold();						#
        $format->set_align('center');	
    ############################
    $requete = "select count(nom) from Xwhere nom order by date desc";
    	$sth = $dbh->prepare($requete);
    	$sth->execute();
    	while(@row = $sth->fetchrow_array){
    $Nbre2 = $row[0];
     
    }
    ############################
    #EXECUTE select dans base mysql
    $requete = "SELECT * FROM X r where type ='C' order by date desc";
    	$sth = $dbh->prepare($requete);
    	$dbh->{'mysql_use_result'}=1;
    $sth->execute();
     
    #renvoie information des differents champ dans une variable globale
    while(@row = $sth->fetchrow_array){
     
    $dep_D = $row[0];
    $dep_N = $row[1];
    $dep_P= $row[2];
    $dep_L= $row[3];
    $dep_T = $row[4];
    $dep_C =$row[5];
    $dep_Di =$row[6];
    $dep_J = $row[7];
    $dep_E =$row[8];
     
     
    	#
        # And if the keep_leading_zeros property is set:
    for $i (1.."$Nbre2") {
        #print "$i\n";
        $worksheet->write($i, 0, "$dep_D");
        $worksheet->write($i, 1, "$dep_N");
        $worksheet->write($i, 2, "$dep_P");
        $worksheet->write($i, 3, "$dep_L");
        $worksheet->write($i, 4, "$dep_T");
        $worksheet->write($i, 5, "$dep_C");
        $worksheet->write($i, 6, "$dep_Di");
        $worksheet->write($i, 7, "$dep_J");
        $worksheet->write($i, 8, "$dep_E");
     
    }
    }
    $sth -> finish;
    $dbh -> disconnect;
    Et j'ai encore le meme probleme toujours la derniere ligne qui s'affiche mais la autant de fois que j'ai de ligne de reponse à ma requete sql

    Si je peux me permettre pourriez m'eclairer je ne suis pas expert en perl mais j'avoue que j'aimerais savoir m'en servir correctement.

  6. #6
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    while(@row = $sth->fetchrow_array){
     
    $dep_D = $row[0];
    $dep_N = $row[1];
    ...
     
    for $i (1.."$Nbre2") {
        #print "$i\n";
        $worksheet->write($i, 0, "$dep_D");
        $worksheet->write($i, 1, "$dep_N");
        ...
     
    }
    A chaque passage dans la boucle, tu remets $i à zéro et tu écris $Nbre2 fois la ligne active. De cette façon, tu réécris toujours sur les mêmes cellules excels et donc seules les valeurs de ta dernière ligne sont gardées $Nbre2 fois.




    Tu dois déclarer $i en dehors de ta boucle et l'incrémenter de 1 à chaque passage. De cette manière, tu décaleras tes enregistrements.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    my $i = 0;
     
    while(@row = $sth->fetchrow_array){
     
        $dep_D = $row[0];
        $dep_N = $row[1];
        $dep_P= $row[2];
        $dep_L= $row[3];    
        ...
     
        $i++;
     
        $worksheet->write($i, 0, $dep_D);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    1.."$Nbre2"   
     $worksheet->write($i, 0, "$dep_D");

    les doubles quotes encadrant tes variables sont inutiles.
    -- Jasmine --

  7. #7
    Membre à l'essai
    Inscrit en
    Mai 2006
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 33
    Points : 18
    Points
    18
    Par défaut
    Grand merci ca marche c'est fou comme on est content quand ca marche surtout que ca fait longtemps que je bloquais dessus.

    Alors un grand grand merci ca fait plaisir.


+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 02/07/2008, 11h44
  2. Réponses: 3
    Dernier message: 25/12/2007, 15h55
  3. Réponses: 8
    Dernier message: 23/05/2006, 13h13
  4. export d'access vers un fichier excel prédéfini
    Par kuhnden dans le forum Access
    Réponses: 3
    Dernier message: 05/01/2006, 23h08
  5. [Excel] PHP-MYSQL exportation de données vers un fichier excel
    Par toure32 dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 19/10/2005, 20h29

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