Saltar al contenido

Bucle de columna de PHPExcel

Te sugerimos que pruebes esta solución en un ambiente controlado antes de enviarlo a producción, un saludo.

Solución:

No hay ColumnIterator, por lo que tendrá que hacerlo a mano.

Para cualquier hoja de trabajo dada:

Para hacer un bucle de filas para una columna:

$column = 'A';
$lastRow = $worksheet->getHighestRow();
for ($row = 1; $row <= $lastRow; $row++) 
    $cell = $worksheet->getCell($column.$row);
    //  Do what you want with the cell

Para hacer un bucle de columnas en una fila, puede aprovechar la capacidad estilo Perls de PHP para incrementar caracteres:

$row = 1;
$lastColumn = $worksheet->getHighestColumn();
$lastColumn++;
for ($column = 'A'; $column != $lastColumn; $column++) 
    $cell = $worksheet->getCell($column.$row);
    //  Do what you want with the cell

Tenga en cuenta que al comparar las letras de las columnas para probar la última columna en el ciclo, no podemos simplemente usar < o <= because we're comparing strings, and "B" > “AZ” en estándar string comparación, por lo que usamos una comparación !=, habiendo incrementado el valor de columna más alto para dar el ID de la primera columna más allá del punto final.

También puedes usar

$worksheet->cellExists($column.$row);

en el ciclo para probar la existencia de una celda antes de acceder a ella usando getCell() (o no) para emular el comportamiento del iterador getIterateOnlyExistingCells()

Los iteradores son en realidad bastante lentos, por lo que es posible que estos bucles simples sean más rápidos que usar los iteradores.

ACTUALIZAR (2015-05-06)

PHPExcel versión 1.8.1 ha introducido un nuevo iterador de columnas. Los iteradores de Fila y Columna también le permiten especificar un rango de filas o columnas para iterar, y le permiten usar prev() y next() al recorrer

Este breve fragmento proporciona un bucle a través de filas de columnas. Obtiene los índices de la última columna no vacía (y su fila) y realiza un bucle en esos índices, así que tenga en cuenta los valores olvidados en Excel.

El código recorre las filas de la columna A, luego las filas de la columna B…

$objReader = new PHPExcel_Reader_Excel2007();
$objReader->setReadDataOnly(true);
$objPHPExcel = $objReader->load($file);

foreach ($objPHPExcel->getWorksheetIterator() as $worksheet) 

    $worksheetTitle = $worksheet->getTitle();
    $highestColumn = $worksheet->getHighestColumn();
    $highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn);

    // expects same number of row records for all columns
    $highestRow = $worksheet->getHighestRow();

    for($col = 0; $col < $highestColumnIndex; $col++)
    
        // if you do not expect same number of row records for all columns
        // get highest row index for each column
        // $highestRow = $worksheet->getHighestRow();

        for ($row = 1; $row <= $highestRow; $row++)
        
            $cell = $worksheet->getCellByColumnAndRow($col, $row);
            $val = $cell->getValue();
            // do what you want with cell value
        
    

bucle de columnas como rango

foreach ( range('A', $Excel->getActiveSheet()->getHighestColumn()) as $column_key) 


Tienes la opción de añadir valor a nuestra información aportando tu veteranía en los informes.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *