web-dev-qa-db-fra.com

Comment lire la feuille deux d'un fichier xlsx avec PHPExcel?

Je sais comment lire ma feuille de calcul xlsx et parcourir la première feuille.

Il a 5 feuilles et j’ai du mal à accéder à autre chose que la première.

Voici le code que j'utilise et qui vient directement de la documentation . Vous pouvez voir que j'ai essayé d'utiliser setActiveSheet, mais que l'erreur Call to undefined method PHPExcel::setActiveSheet() a été renvoyée.

Code :

$objReader = PHPExcel_IOFactory::createReader('Excel2007');
$objReader->setReadDataOnly(true);
$objPHPExcel = $objReader->load("cmt_school_data.xlsx");
//$objPHPExcel->setActiveSheet(1);
$objWorksheet = $objPHPExcel->getActiveSheet();

echo '<table border=1>' . "\n";

foreach ($objWorksheet->getRowIterator() as $row) {

  echo '<tr>' . "\n";

  $cellIterator = $row->getCellIterator();

  // This loops all cells, even if it is not set.
  // By default, only cells that are set will be iterated.
  $cellIterator->setIterateOnlyExistingCells(false);

  foreach ($cellIterator as $cell) {
    echo '<td>' . $cell->getValue() . '</td>' . "\n";
  }

  echo '</tr>' . "\n";

}

echo '</table>' . "\n";
22
Tom

Ok ... les noms sont trompeurs. setActiveSheetIndex fait aussi un get si la solution était la suivante

$objReader = PHPExcel_IOFactory::createReader('Excel2007');
$objReader->setReadDataOnly(true);
$objPHPExcel = $objReader->load("cmt_school_data.xlsx");
$objWorksheet = $objPHPExcel->setActiveSheetIndex(1);
//objWorksheet = $objPHPExcel->getActiveSheet();
echo '<table border=1>' . "\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";
29
Tom
<?php

/** Include path **/
set_include_path(get_include_path() . PATH_SEPARATOR . '../../../Classes/');

/** PHPExcel_IOFactory */
include 'PHPExcel/IOFactory.php';


$inputFileType = 'Excel5';
//  $inputFileType = 'Excel2007';
//  $inputFileType = 'Excel2003XML';
//  $inputFileType = 'OOCalc';
//  $inputFileType = 'Gnumeric';
$inputFileName = './sampleData/example1.xls';

echo 'Loading file ',pathinfo($inputFileName,PATHINFO_BASENAME),' using IOFactory with a defined reader type of ',$inputFileType,'<br />';
$objReader = PHPExcel_IOFactory::createReader($inputFileType);
echo 'Loading all WorkSheets<br />';
$objReader->setLoadAllSheets();
$objPHPExcel = $objReader->load($inputFileName);


echo '<hr />';

echo $objPHPExcel->getSheetCount(),' worksheet',(($objPHPExcel->getSheetCount() == 1) ? '' : 's'),' loaded<br /><br />';
$loadedSheetNames = $objPHPExcel->getSheetNames();
foreach($loadedSheetNames as $sheetIndex => $loadedSheetName) {
    echo **$sheetIndex**,' -> ',$loadedSheetName,'<br />';
    $sheetData = $objPHPExcel->**getSheet**(**$sheetIndex**)->toArray(null,true,true,true);
    var_dump($sheetData);

}?>
12
Thiwanka

Je sais que c'est trop tard pour la réponse. Mais je trouve la solution ci-dessous.

//load library - Excel
$this->load->library('Excel');
$objPHPExcel = PHPExcel_IOFactory::load('./folder/exceldata.xls');

//Get How Many Sheets in your Excel file.
echo $objPHPExcel->getSheetCount();

Ensuite, pour accéder à une feuille par son index, utilisez la méthode getSheet (). Notez que les feuilles sont indexées à partir de 0 ..__, par exemple.

//Retrieve the **1st 'tab' worksheet** e.g. called 'Sheet 1'
$worksheet = $objPHPExcel->getSheet(0);

Donc, dans votre cas, si vous voulez lire uniquement la feuille 2,

$worksheet = $objPHPExcel->getSheet(1);

OU pour lire toutes les feuilles de votre fichier Excel, vous devez utiliser la boucle foreach comme ci-dessous.

    foreach($objPHPExcel->getWorksheetIterator() as $worksheet)
    {
      $highestRow = $worksheet->getHighestRow();
      $highestColumn = $worksheet->getHighestColumn();
      //echo $highestRow;
      //echo $highestColumn;
      //die();
      for($row=2; $row<=$highestRow; $row++)
      {
        $column1 = $worksheet->getCellByColumnAndRow(0, $row)->getValue();
        $column2= $worksheet->getCellByColumnAndRow(1, $row)->getValue();

        $finaldata[] = array(
            'data1'   =>    trim($column1),
            'data2'   =>    trim($column2),
          );
      }
    }
    /*echo "<pre>";
    echo count($finaldata);
    print_r($finaldata);
    die();*/
1
VirenPanchal