php for-loop phpexcel worksheet

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