2010-11-13 6 views
22

Je sais lire ma feuille de calcul xlsx et parcourir la première feuille.Comment lire la feuille deux d'un fichier xlsx avec PHPExcel?

Il a 5 feuilles et j'ai du mal à arriver à autre que le premier.

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 j'ai lancé l'erreur Call to undefined method PHPExcel::setActiveSheet().

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"; 

Répondre

27

Ok ... les noms sont trompeuses. setActiveSheetIndex fait aussi obtenir Comme vous avez déjà découvert la solution était ce

$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"; 
+6

, setActiveSheet() n'existe pas: setActiveSheetIndex() et setActiveSheetIndexByName() sont les deux méthodes disponibles pour changer l'actif drap. –

+0

Où puis-je télécharger cette bibliothèque? – heinkasner

+0

https://phpexcel.codeplex.com/ – Tom

12
<?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); 

}?> 
+0

Merci, très utile – Ozzy

+3

+1 pour getSheetCount(), je cherchais – Hemc

Questions connexes