web-dev-qa-db-fra.com

Boucler les feuilles de calcul avec PHPExcel

J'utilise la bibliothèque PHPExcel pour lire un fichier Excel et effectuer un traitement dessus. Je souhaite parcourir chaque feuille de calcul. J'ai vérifié la documentation et tout ce que j'ai pu trouver était de changer l'index de feuille de calcul actif ou de charger uniquement les feuilles de calcul spécifiées. Comment puis-je parcourir toutes les feuilles de calcul?

Merci pour toute aide.

Voici l'exemple de boucle de la documentation, pour référence:

<?php
$objReader = PHPExcel_IOFactory::createReader('Excel2007');
$objReader->setReadDataOnly(true);

$objPHPExcel = $objReader->load("test.xlsx");
$objWorksheet = $objPHPExcel->getActiveSheet();

echo '<table>' . "\n";
foreach ($objWorksheet->getRowIterator() as $row) {
  echo '<tr>' . "\n";

  $cellIterator = $row->getCellIterator();
  $cellIterator->setIterateOnlyExistingCells(false); // This loops all cells,
                                                     // even if it is not set.
                                                     // By default, only cells
                                                     // that are set will be
                                                     // iterated.
  foreach ($cellIterator as $cell) {
    echo '<td>' . $cell->getValue() . '</td>' . "\n";
  }

  echo '</tr>' . "\n";
}
echo '</table>' . "\n";
?>
19
user717236

Vous utilisez des itérateurs. Avez-vous regardé l'exemple de code pour les itérateurs dans le répertoire/Tests? Si c'est le cas, vous avez peut-être vu une référence à WorksheetIterator

Alternativement, la méthode getAllSheets () de l'objet PHPExcel renvoie un tableau de feuilles de calcul, qui vous permet d'utiliser une boucle foreach

11
Mark Baker

Je pense que vous pouvez le faire. Incrémentez la feuille active jusqu'à ce qu'il n'en reste plus, puis faites ce que vous voulez avec chacune:

<?php

    $objReader = PHPExcel_IOFactory::createReader('Excel2007');
    $objReader->setReadDataOnly(true);

    $objPHPExcel = $objReader->load("test.xlsx");

    $i = 0;
    while ($objPHPExcel->setActiveSheetIndex($i)){

        $objWorksheet = $objPHPExcel->getActiveSheet();
        //now do whatever you want with the active sheet
        ...
        $i++;

    }

    ...

?>
16
jeffery_the_wind

Voici une fonction utile que j'utilise pour parcourir les feuilles et retourner un tableau de valeurs de cellule pour chacune avec le titre de la feuille comme clé de tableau:

function getSheets($fileName) {
    try {
        $fileType = PHPExcel_IOFactory::identify($fileName);
        $objReader = PHPExcel_IOFactory::createReader($fileType);
        $objPHPExcel = $objReader->load($fileName);
        $sheets = [];
        foreach ($objPHPExcel->getAllSheets() as $sheet) {
            $sheets[$sheet->getTitle()] = $sheet->toArray();
        }
        return $sheets;
    } catch (Exception $e) {
         die($e->getMessage());
    }
}
10
billynoah