Recorriendo hojas de cálculo con PHPExcel
for-loop worksheet (3)
Aquí hay una función útil que utilizo para iterar sobre hojas y devolver una matriz de valores de celda para cada uno con el título de la hoja como clave de matriz:
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());
}
}
Estoy usando la biblioteca PHPExcel para leer un archivo de Excel y realizar el procesamiento en él. Quiero recorrer cada hoja de trabajo. Revisé la documentación y todo lo que pude encontrar fue cambiar el índice de la hoja de trabajo activa o solo cargar las hojas de trabajo especificadas. ¿Cómo puedo recorrer todas las hojas de trabajo?
Gracias por cualquier ayuda.
Aquí está el ejemplo de bucle de la documentación, para referencia:
<?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";
?>
Creo que puedes hacer esto. Incrementa la hoja activa hasta que no quede ninguna, luego haz lo que quieras con cada una:
<?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++;
}
...
?>
Estás utilizando iteradores. ¿Miraste el ejemplo de código para los iteradores en el directorio / Tests? Si es así, es posible que haya visto una referencia al WorksheetIterator
Alternativamente, el método getAllSheets () del objeto PHPExcel devuelve una matriz de hojas de trabajo, que le permite usar un bucle foreach