web-dev-qa-db-fra.com

PhpSpreadsheet - Récupère une ligne sans itérer sur chaque cellule

J'utilise PhpSpreadsheet pour lire facilement un document xls et l'insérer dans une base de données après quelques calculs. J'ai réussi à utiliser des exemples de la documentation, mais je trouve cela tellement compliqué que je suis sûr d'avoir manqué quelque chose et que cela peut être fait beaucoup plus facilement.

$worksheet = $this->getWorksheet("file.xls");
foreach ($worksheet->getRowIterator() as $row) {
  $cellIterator = $row->getCellIterator();
  $cellIterator->setIterateOnlyExistingCells(FALSE);
  foreach ($cellIterator as $key => $cell) {
    $cellValue = $cell->getValue();

    if($key == 'A')
      $field1 = $cellValue;
    if($key == 'B') {
      $dateTime = \PhpOffice\PhpSpreadsheet\Shared\Date::excelToDateTimeObject($cellValue);
      $date = $dateTime->format("Y-m-d");
    }
    if($key == 'C')
      $field2 = $cellValue;
    if($key == 'D')
      $field3 = $cellValue;
    if($key == 'E')
      $field4 = $cellValue;
  }
}

Je m'attendais à ce que quelque chose comme $row->getCell("A")->getValue() soit disponible. 

Alors ... Ai-je raté quelque chose?

4
Jeremy Belolo

J'espère que cela t'aides

$highestRow = $worksheet->getHighestRow(); // e.g. 10
$highestColumn = $worksheet->getHighestColumn(); // e.g 'F'
$highestColumnIndex = \PhpOffice\PhpSpreadsheet\Cell\Coordinate::columnIndexFromString($highestColumn); // e.g. 5
for ($row = 1; $row <= $highestRow; ++$row) {
    for ($col = 1; $col <= $highestColumnIndex; ++$col) {
        $value = $worksheet->getCellByColumnAndRow($col, $row)->getValue();
    }
}    
2
saeed yadgari

Voir les docs pour obtenir les valeurs directement par colonne et ligne plutôt que de tester les clés 

De l'exemple:

// Get the value from cell B5
$cellValue = $spreadsheet->getActiveSheet()->getCellByColumnAndRow(2, 5)->getValue();

J'espère que cela pourra aider

0
jhoskins98