2010-11-13 13 views
22

Wiem, jak czytać mój arkusz kalkulacyjny Xlsx i przechodzić pierwszy arkusz.Jak odczytać drugi arkusz pliku xlsx za pomocą PHPExcel?

Ma 5 arkuszy i nie mogę dostać się do żadnej innej niż pierwsza.

Oto kod, którego używam, który był bezpośrednio z dokumentacji. Widzisz, próbowałem wykorzystać setActiveSheet, ale to spowodowało błąd Call to undefined method PHPExcel::setActiveSheet().

Kod:

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

Odpowiedz

27

Ok ... nazwy są mylące. setActiveSheetIndex również robi się więc rozwiązaniem było to

$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

Jak już odkryte, setActiveSheet() nie istnieje: setActiveSheetIndex() i setActiveSheetIndexByName() są dwie metody do zmiany aktywny arkusz. –

+0

Gdzie mogę pobrać tę bibliotekę? – 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

Dzięki, bardzo pomocne – Ozzy

+3

+1 dla getSheetCount(), szukałem go – Hemc

Powiązane problemy