Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2093 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  PHPExcel comparaison cellules et boucle

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

PHPExcel comparaison cellules et boucle

n°2260071
yacknick
Posté le 10-06-2015 à 15:48:44  profilanswer
 

Bonjour,  
j'ai crée un script PHP qui grâce à l'API PHPExcel me permet de créer un fichier contenant le résultat d'une requête SQL(un export pour faire plus simple). Mais je rencontre deux difficultées :
 
la première est que je voudrais colorer en orange avec écriture orange (qui devient "invisible" ) les cellules avec une valeur >0  
L'écriture dans les du tableau est mise en blanc et ainsi les 0 deviennent aussi "invisibles".
 
et en second je génère sur une feuille excel cinq tableaux qui représente les 5 jours de la semaine. Pour créer les tableaux de la semaine je fais comme ça :

Code :
  1. $ligne1= 3;//correspond à la ligne où la formule est écrite  
  2. $ligne2=$ligne1+3;
  3. $a=2;//correspond à la ligne où la formule doit chercher la chaine de caractère
  4. for ($i=0; $i <5 ; $i++) {
  5. while($data2 = $req3->fetch(PDO::FETCH_ASSOC)){
  6.     $colonne  = 'A';//correspond à la colonne où la liste d'identifiant est écrite
  7.     $colonne2 = 'C';//correspond à la colonne où la formule  est écrite
  8.     $colonne3='C';
  9.     $colonne4='B';
  10.        foreach($data2 as $value){
  11.            $sheet8->setCellValue($colonne.$ligne1, $value);//liste des identifiant
  12.            $sheet8->setCellValue('B'.$ligne1,'=COUNTIF(\'tout à fait_reg\'!$Q'.$a.',"* "&B$1&"*" )',PHPExcel_Cell_DataType::TYPE_FORMULA);
  13.            $sheet8->setCellValue($colonne.$ligne2, $value);//liste des identifiant
  14.            $sheet8->setCellValue('B'.$ligne2,'=COUNTIF(\'tout à fait_reg\'!$Q'.$a.',"* "&B$1&"*" )',PHPExcel_Cell_DataType::TYPE_FORMULA);
  15.            for ($i=0; $i <=34 ; $i++) {
  16.             $sheet8->setCellValue( $colonne2++.$ligne1,'=IF(COUNTIF($B'.$ligne1.':'.$colonne4.$ligne1.',2)=1,0,COUNTIF(\'tout à fait_reg\'!$R'.$a.',"* "&'.$colonne3++.'1&"*" )+'.$colonne4++.$ligne1.')',PHPExcel_Cell_DataType::TYPE_FORMULA);
  17.              }
  18.      $colonne2++; 
  19.     }
  20.   $ligne1++;
  21.   $ligne2++;
  22. $a++;
  23. }
  24. }
  25. //mardi
  26. $ligne2=$ligne1+3;
  27. $b = 2;
  28. while($data2 = $req4->fetch(PDO::FETCH_ASSOC )){
  29.     $colonne  = 'A';//correspond à la colonne où la liste d'identifiant est écrite
  30.     $colonne2 = 'C';//correspond à la colonne où la formule  est écrite
  31.     $colonne3='C';
  32.     $colonne4='B';
  33.        foreach($data2 as $value){
  34.         $sheet8->setCellValue('B'.$ligne2,'=COUNTIF(\'tout à fait_reg\'!$Q'.$b.',"* "&B$1&"*" )',PHPExcel_Cell_DataType::TYPE_FORMULA);
  35.          $sheet8->setCellValue($colonne.$ligne2, $value);
  36.           for ($i=0; $i <=34 ; $i++) {
  37.     $sheet8->setCellValue( $colonne2++.$ligne2,'=IF(COUNTIF($B'.$ligne2.':'.$colonne4.$ligne2.',2)=1,0,COUNTIF(\'tout à fait_reg\'!$R'.$b.',"* "&'.$colonne3++.'1&"*" )+'.$colonne4++.$ligne2.')',PHPExcel_Cell_DataType::TYPE_FORMULA);       }
  38.   $colonne2++;
  39.  }
  40.  $ligne2++;
  41.  $b++;                                     
  42. }
  43. $ligne3=$ligne2+3;
  44. $c = 2;
  45. while($data2 = $req5->fetch(PDO::FETCH_ASSOC )){
  46.     $colonne  = 'A';//correspond à la colonne où la liste d'identifiant est écrite
  47.     $colonne2 = 'C';//correspond à la colonne où la formule  est écrite
  48.     $colonne3='C';
  49.     $colonne4='B';
  50.        foreach($data2 as $value){
  51.         $sheet8->setCellValue('B'.$ligne3,'=COUNTIF(\'tout à fait_reg\'!$Q'.$c.',"* "&B$1&"*" )',PHPExcel_Cell_DataType::TYPE_FORMULA);
  52.          $sheet8->setCellValue($colonne.$ligne3, $value);
  53.           for ($i=0; $i <=34 ; $i++) {
  54.     $sheet8->setCellValue( $colonne2++.$ligne3,'=IF(COUNTIF($B'.$ligne3.':'.$colonne4.$ligne3.',2)=1,0,COUNTIF(\'tout à fait_reg\'!$R'.$c.',"* "&'.$colonne3++.'1&"*" )+'.$colonne4++.$ligne3.')',PHPExcel_Cell_DataType::TYPE_FORMULA);       }
  55.   $colonne2++;
  56.  }
  57.  $ligne3++;
  58.  $c++;                                     
  59. }
  60. $ligne4=$ligne3+3;
  61. $d=2;
  62. while($data2 = $req6->fetch(PDO::FETCH_ASSOC)){
  63. $colonne  = 'A';
  64. $colonne2 = 'B';
  65. $colonne3='C';
  66.     $colonne4='B';
  67.      foreach($data2 as $value){
  68.       $sheet8->setCellValue('B'.$ligne4,'=COUNTIF(\'tout à fait_reg\'!$Q'.$d.',"* "&B$1&"*" )',PHPExcel_Cell_DataType::TYPE_FORMULA);
  69.         $sheet8->setCellValue($colonne.$ligne4, $value);
  70.         for ($i=0; $i <=34 ; $i++) {
  71.   $sheet8->setCellValue( $colonne2++.$ligne4,'=IF(COUNTIF($B'.$ligne4.':'.$colonne4.$ligne4.',2)=1,0,COUNTIF(\'tout à fait_reg\'!$R'.$d.',"* "&'.$colonne3++.'1&"*" )+'.$colonne4++.$ligne4.')',PHPExcel_Cell_DataType::TYPE_FORMULA);       
  72.     }
  73.         $colonne2++;
  74. }
  75. $ligne4++;
  76. $d++;                                     
  77. }
  78. $ligne5=$ligne4+3;
  79. $e=2;
  80. while($data2 = $req7->fetch(PDO::FETCH_ASSOC)){
  81.     $colonne  = 'A';//correspond à la colonne où la liste d'identifiant est écrite
  82.     $colonne2 = 'C';//correspond à la colonne où la formule  est écrite
  83.     $colonne3='C';
  84.     $colonne4='B';
  85.      foreach($data2 as $value){
  86.       $sheet8->setCellValue('B'.$ligne5,'=COUNTIF(\'tout à fait_reg\'!$Q'.$e.',"* "&B$1&"*" )',PHPExcel_Cell_DataType::TYPE_FORMULA);
  87.         $sheet8->setCellValue($colonne.$ligne5, $value);
  88.         for ($i=0; $i <=34 ; $i++) {
  89.         $sheet8->setCellValue( $colonne2++.$ligne5,'=IF(COUNTIF($B'.$ligne5.':'.$colonne4.$ligne5.',2)=1,0,COUNTIF(\'tout à fait_reg\'!$R'.$e.',"* "&'.$colonne3++.'1&"*" )+'.$colonne4++.$ligne5.')',PHPExcel_Cell_DataType::TYPE_FORMULA);
  90.                }
  91.         $colonne2++;
  92. }
  93. $ligne5++;
  94. $e++;
  95.                                    
  96. }


et je voudrais faire en sorte qu'avec une seule boucle j'obtienne la même chose. Je précise que les req3,4,5,6,7 sont les même car si j'utilise la même requête pour chaque tableaux le 1er tableau s'affiche correctement mais pour les suivant je n'arrive pas afficher autre chose que la dernière valeur de la table. Et je dois faire ces cinq tableaux six fois donc vous imaginez bien mon code est lourd à exécuter.  
 
Est-ce possible ? Merci d'avance.
Cordialement yacknick.

mood
Publicité
Posté le 10-06-2015 à 15:48:44  profilanswer
 

n°2260179
yacknick
Posté le 11-06-2015 à 18:05:15  profilanswer
 

pour coloriser les cellules j'ai fais ça mais ça ne marche pas correctement il ne colorie pas les cellules que je veux  

Code :
  1. for ($i='B'; $i <'Z'; $i++) {
  2.     for ($a=3; $a <10 ; $a++) {
  3.         $cell=$sheet8->getCell($i.$a)->getOldCalculatedValue();
  4.         if ($cell != 0){
  5.         $sheet8->getStyle($i.$a)
  6.         ->applyFromArray(
  7.              array( 'fill' =>
  8.                  array( 'type' => PHPExcel_Style_Fill::FILL_SOLID, 'color' =>
  9.                      array('rgb' => 'FFCC00')
  10.                  )
  11.              )
  12.         );}
  13.         else{
  14.             $sheet8->getStyle($i.$a)
  15.         ->applyFromArray(
  16.              array( 'fill' =>
  17.                  array( 'type' => PHPExcel_Style_Fill::FILL_SOLID, 'color' =>
  18.                      array('rgb' => '66CC66')
  19.                  )
  20.              )
  21.         );
  22.     }
  23.     }
  24. }


En fait si la première cellules est égale 0 il colorie toutes celle d'après même si elle sont égale à 1 ou 2
et inversement.


Message édité par yacknick le 12-06-2015 à 10:10:56

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  PHPExcel comparaison cellules et boucle

 

Sujets relatifs
Comparaison des moteurs PHPMettre en pied de page les valeurs de deux cellules différentes ?
Récupérer valeur dans un tableau avec boucle sous VBA[BAT] Comment forcer l'exécution au sein d'une boucle ?
Lire une variable contenu dans un fichier durant une boucle ?Condition sur une boucle for
Problème de sortie d'une boucle while en PYTHONprobleme de msgbox dans une boucle
Boucle while avec fwriteTest sur les couleurs des cellules
Plus de sujets relatifs à : PHPExcel comparaison cellules et boucle


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR