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 :

[PHPExcel] Sélection des données


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2012
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2012
    Messages : 48
    Points : 29
    Points
    29
    Par défaut [PHPExcel] Sélection des données
    Bonjour,

    Je dois créer des rapports automatisés sur Excel via PHP à partir d'informations de base de données.

    J'utilise la librairie PhpExcel.

    Récupération des données ok !
    Création du fichier Excel ok !
    Transcription des données de la base et affichage dans le fichier excel ok !
    Création de graphique ok !

    Le problème coince au moment de la sélection des données à afficher dans les graphes.

    Quand je sélectionne des données côtes à côtes tout va bien avec les ":" des formules classiques d'excel qui permettent de sélectionner plusieurs valeurs.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?php
    $xAxisTickValues1 = array(
    new PHPExcel_Chart_DataSeriesValues('String', 'Feuil1!$A$1:$C$1', NULL, 3),
    );?>
    Mon problème est pour sélectionner plusieurs valeurs qui ne sont pas côtes à côtes... exemple Cellule A1, Cellule B10 et Cellule C13 donc en gros Feuil1!$A$1, Feuil1!$B$10, Feuil1!$C$13

    J'ai essayé avec le code suivant mais il n'affiche que la première valeur.
    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
    $dataSeriesLabels1 = array(
    	new PHPExcel_Chart_DataSeriesValues('String', 'Feuil1!$A$1', NULL, 1),
    	new PHPExcel_Chart_DataSeriesValues('String', 'Feuil1!$B$10', NULL, 1),
    	new PHPExcel_Chart_DataSeriesValues('String', 'Feuil1!$C$13', NULL, 1),
    );
     
    $xAxisTickValues1 = array(
    	new PHPExcel_Chart_DataSeriesValues('String', 'Feuil1!$A$1', NULL, 1),
    	new PHPExcel_Chart_DataSeriesValues('String', 'Feuil1!$B$10', NULL, 1),
    	new PHPExcel_Chart_DataSeriesValues('String', 'Feuil1!$C$13', NULL, 1),
    );
     
    $dataSeriesValues1 = array(
    	new PHPExcel_Chart_DataSeriesValues('Number', 'Feuil1!$A$1', NULL, 1),
    	new PHPExcel_Chart_DataSeriesValues('Number', 'Feuil1!$B$10', NULL, 1),
    	new PHPExcel_Chart_DataSeriesValues('Number', 'Feuil1!$C$13', NULL, 1),
    );

    Le code de la partie graphique pour générer un camembert qui fonctionne avec les cellules voisines.
    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
    <?php
    $dataSeriesLabels1 = array(
    	new PHPExcel_Chart_DataSeriesValues('String', 'Feuil1!$A$1:$C$1', NULL, 1),
    );
     
    $xAxisTickValues1 = array(
    	new PHPExcel_Chart_DataSeriesValues('String', 'Feuil1!$A$1:$C$1', NULL, 3),
    );
     
    $dataSeriesValues1 = array(
    	new PHPExcel_Chart_DataSeriesValues('Number', 'Feuil1!$A$2:$C$2', NULL, 3),
    );
     
    $series1 = new PHPExcel_Chart_DataSeries(
    	PHPExcel_Chart_DataSeries::TYPE_PIECHART, // plotType
    	NULL,                           // plotGrouping
    	range(0, count($dataSeriesValues1)-1),      // plotOrder
    	$dataSeriesLabels1,             // plotLabel
    	$xAxisTickValues1,              // plotCategory
    	$dataSeriesValues1              // plotValues
    );?>
    Merci d'avance

    Guillaume

  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
    Et en écrivant comme dans Excel ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new PHPExcel_Chart_DataSeriesValues('String', 'Feuil1!$A$1;Feuil1!$B$10;Feuil1!$C$13', NULL, 1)
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2012
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2012
    Messages : 48
    Points : 29
    Points
    29
    Par défaut
    Bonjour @sabotage,

    Merci de ton aide.

    Oui j'ai déjà essayé en faisant comme sur Excel c'est à dire en séparant les cellules par des ";"

    Mais j'ai ces erreurs qui apparaissent :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    /var/www/.../inc/PhpExcel/Classes/PHPExcel/Shared/String.php on line 575 Warning: mb_substr() expects parameter 1 to be string, array given in /var/www/.../inc/PhpExcel/Classes/PHPExcel/Shared/String.php on line 575 
    Warning: mb_substr() expects parameter 1 to be string, array given in /var/www/.../inc/PhpExcel/Classes/PHPExcel/Shared/String.php on line 575 
     
    Fatal error: Uncaught exception 'PHPExcel_Calculation_Exception' with message 'undefined variable ';'' in /var/www/.../inc/PhpExcel/Classes/PHPExcel/Calculation.php:3715 
    Stack trace: #0 /var/www/.../inc/PhpExcel/Classes/PHPExcel/Calculation.php(3473): PHPExcel_Calculation->_raiseFormulaError('undefined varia...') #1 /var/www/.../inc/PhpExcel/Classes/PHPExcel/Calculation.php(2404): 
    PHPExcel_Calculation->_processTokenStack(Array, NULL, Object(PHPExcel_Cell)) #2 /var/www/.../inc/PhpExcel/Classes/PHPExcel/Chart/DataSeriesValues.php(288): PHPExcel_Calculation->_calculateFormulaValue('=Feuil1!$A$1;Fe...', NULL, Object(PHPExcel_Cell)) #3 /var/www/.../inc/PhpExcel/Classes/PHPExcel/Chart/DataSeries.php(357): PHPExcel_Chart_DataSeriesValues->refresh(Object(PHPExcel_Worksheet), true) #4 /var/www/.../inc/PhpExcel/Classes/PHPExcel/Chart/PlotArea.php(124): PHPExcel_Chart_DataSeries->refresh(Object(PHPExcel_Works in /var/www/.../inc/PhpExcel/Classes/PHPExcel/Calculation.php on line 3715
    L'idéal serait même de pouvoir utiliser des valeurs non définies dans des cellules comme ci-dessous :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new PHPExcel_Chart_DataSeriesValues('String', 'Produit;Vendu;En stock', NULL, 3),
    Merci.

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2012
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2012
    Messages : 48
    Points : 29
    Points
    29
    Par défaut Solution
    Bon c'était finalement tout bête... le weekend porte conseil !!!

    En analysant mieux la structure de PHPExcel_Chart_DataSeriesValues on s'aperçoit qu'il y a le paramètre dataValues qui permet de passer un array dans la source de données.

    dataValues fonctionne à la fois pour les labels et les données.

    J'ai pour le moment testé sur un graph de type camembert mais je ne vois pas pourquoi ça ne marcherait pas ailleurs...

    Il est donc possible de créer des graphs sur Excel avec PhpExcel sans que le contenu des cellules ne soit côtes à côtes ou sans utiliser une données présente dans la cellule mais en base de données

    Exemple et solutions qui pourra aider quelques un d'entre vous :
    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
     
    <?php 
    // On récupère les légendes en base de données et on créé un tableau. Ici mes légendes sont stockées au format texte et séparées par des "|".
    $legende = SeeText($tabStats->legende);
    $legende = explode("|",$legende);
    $TTLegende = count($legende);
     
    $tab_legende = array();
    for($iLegende = 0; $iLegende < $TTLegende; $iLegende++)
    {
            $TT_elm = SeeText($legende[$iLegende]);
    	$tab_legende[] = $TT_elm;
    }
     
    // On fait de la même manière pour les résultats c'est à dire le contenu des cellules et on y insère dans le paramètre dataValues N°5 le tableau.
    // Attention à bien préciser NULL en variable n°2
     
    // Puis on génère le graph normalement avec PHPExcel
    $dataSeriesLabels1 = array(
    	new PHPExcel_Chart_DataSeriesValues('String', NULL, NULL, 1,$tab_legende),
    );
     
    $xAxisTickValues1 = array(
    	new PHPExcel_Chart_DataSeriesValues('String', NULL, NULL, 1,$tab_legende),
    );
     
    $dataSeriesValues1 = array(
    	new PHPExcel_Chart_DataSeriesValues('String', NULL, NULL, 1,$tab_value),
    );
     
    // Attention avec ce système automatique on ne sait pas combien on a de légende.... sauf si on le calcul... et qu'on ajoute l'info.... si on veut pas s'embêter plus et que l'on souhaite qu'excel se débrouille :) il faut donc mettre 1 en paramètre 4
    Voilà !

    Merci

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

Discussions similaires

  1. Requête de sélection des données!
    Par deleterz dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 09/08/2010, 16h06
  2. Sélection des données linéaire.
    Par mongilotti dans le forum SQL
    Réponses: 6
    Dernier message: 03/12/2009, 09h55
  3. [WD10] Tri : sélection des données à trier
    Par SIPRO43 dans le forum WinDev
    Réponses: 6
    Dernier message: 13/01/2009, 15h38
  4. Batch d'extraction avec sélection des données ?
    Par beastman007 dans le forum Requêtes
    Réponses: 2
    Dernier message: 24/05/2006, 11h02
  5. Sélection des données d'un champ avec le focus de la souris
    Par Nerva dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 13/12/2005, 15h23

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