Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I read sheet two of an xlsx file with PHPExcel?

Tags:

I know how to read my xlsx spreadsheet and loop through the first sheet.

It has 5 sheets and I am having trouble getting to any other than the first.

Here is the code I am using which was straight from the documentation. You can see I tried to utilize setActiveSheet, but that threw the error 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"; 
like image 999
Tom Avatar asked Nov 13 '10 00:11

Tom


People also ask

How to read Excel file using PhpSpreadsheet?

The simplest way to load a workbook file is to let PhpSpreadsheet's IO Factory identify the file type and load it, calling the static load() method of the \PhpOffice\PhpSpreadsheet\IOFactory class. $inputFileName = './sampleData/example1.


2 Answers

Ok...the names are deceiving. setActiveSheetIndex also does a get so the solution was this

$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"; 
like image 97
Tom Avatar answered Sep 29 '22 23:09

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);  }?> 
like image 38
Thiwanka Avatar answered Sep 29 '22 23:09

Thiwanka