PHPExcel comparaison cellules et boucle

PHPExcel comparaison cellules et boucle - PHP - Programmation

Marsh Posté le 10-06-2015 à 15:48:44    

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.

Reply

Marsh Posté le 10-06-2015 à 15:48:44   

Reply

Marsh Posté le 11-06-2015 à 18:05:15    

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
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed