2012-07-23 79 views
19

Estoy usando la biblioteca de 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 hojas de trabajo especificadas. ¿Cómo puedo recorrer todas las hojas de trabajo?Looping a través de hojas de cálculo con PHPExcel

Gracias por cualquier ayuda.

Aquí es 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"; 
?> 

Respuesta

9

Usted está utilizando iteradores. ¿Miraste el ejemplo de código para iteradores en el directorio/Tests? Si es así, se puede haber visto referencia a la WorksheetIterator

Alternativamente, los getAllSheets() método del objeto PHPExcel devuelve una matriz de hojas de trabajo, lo que le permite utilizar un bucle foreach

+0

¡Muchas gracias! Encontré el iterador en el directorio de prueba - 28iterator.php. getAllSheets() también se ve bien. Gracias. – user717236

14

Creo que se puede hacer esto . Incrementar la hoja activa hasta que no hay ninguna izquierda, a continuación, hacer lo que quiera con cada uno:

<?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++; 

    } 

    ... 

?> 
+0

Muchas gracias por su ayuda. Esto funciona bien! – user717236

+0

Enfoque interesante. Gracias por esa respuesta. – Yitzhak

+1

necesita probar ... atrapar construcción, porque la última página arroja la excepción –

7

Aquí es una función útil que utilizo para iterar sobre las hojas y devuelve una matriz de valores de celda para cada uno con la hoja título 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()); 
    } 
} 
Cuestiones relacionadas