2017-09-30 1 views
0

J'essaie de trouver la dernière valeur de cellules d'une ligne dans un tableau Excel par la première valeur de cellules en utilisant PHPExcel. L'utilisateur entre la valeur de la première cellule de la ligne (qui est le paramètre "command") et si elle existe dans le tableau, ma fonction est supposée passer à la dernière cellule de la ligne et retourner la valeur. Ceci est mon code:Recherche dans Excel avec PHP

public function search($command, $excelobj) { 
    foreach ($excelobj->getWorksheetIterator() as $worksheet) { 
     foreach ($worksheet->getRowIterator() as $row) { 
      $rowiterator = $worksheet->getRowIterator(); 
      foreach ($row->getCellIterator() as $cell) { 
       $celliterator = $row->getCellIterator(); 
       $head = $celliterator->current()->getValue(); 
       if(strcmp($head, $command)) { 
        for ($i = 0; $i == 8; $i++) { 
         $celliterator->next(); 
        } 
        return $cell->getValue(); 
       } 
      } 
     } 
    } 
    return false; 
} 

Pour une raison quelconque, il renvoie toujours faux.

+0

note rapide: cette fonction est un exemple de conception de code très mauvais car il renvoie simplement valeur trouvée ou rien du tout. Vous devriez retourner par exemple 'false' ou' null' ou lancer une exception. –

Répondre

0

Je l'ai résolu moi-même, ce code fonctionne correctement:

public function search($command, $excelobj) { 
    foreach ($excelobj->getWorksheetIterator() as $worksheet) { 
     foreach ($worksheet->getRowIterator() as $row) { 
      $rowiterator = $worksheet->getRowIterator(); 
      $celliterator = $row->getCellIterator(); 
      $celliterator->setIterateOnlyExistingCells(true); 
      $head = $celliterator->current()->getValue(); 
      while (strcmp($head, $command) !== 0 && $rowiterator->valid()) { 
       $rowiterator->next(); 
       $row = new PHPExcel_Worksheet_Row($worksheet, $rowiterator->key()); 
       $celliterator = $row->getCellIterator(); 
       $head = $celliterator->current()->getValue(); 
      } 
      for ($i = 0; $i <= 7; $i++) { 
       $celliterator->next(); 
      } 
      return $celliterator->current()->getValue(); 
     } 
    } 
    return false; 
}