2012-03-28 11 views
5
foreach ($objPHPExcel->getWorksheetIterator() as $worksheet) { 

    foreach ($worksheet->getRowIterator() as $row) { 
     $cellIterator = $row->getCellIterator(); 
     $cellIterator->setIterateOnlyExistingCells(false); 
      // I wish 
      echo $cellIterator->getCell("A3"); // row: $row, cell: A3 
    } 
} 

Estoy buscando un método similar que nombra getCell anterior o bien redactada la documentación PHPExcel.Obteniendo celdas por coordenadas

Gracias.

Respuesta

13

Si usted tiene la información $row de RowIterator, puede llamar simplemente fácilmente:

$rowIndex = $row->getRowIndex(); 
$cell = $sheet->getCell('A' . $rowIndex); 
echo $cell->getCalculatedValue(); 

El código completo sería:

foreach($worksheet->getRowIterator() as $row){ 
    $rowIndex = $row->getRowIndex(); 

    $cell = $worksheet->getCell('A' . $rowIndex); 
    echo $cell->getCalculatedValue(); 
    $cell = $worksheet->getCell('B' . $rowIndex); 
    echo $cell->getCalculatedValue(); 
} 
+0

Es muy buena, pero difícil de implementar. Necesito solo un método que tenga valor para las células. Porque tengo las columnas A a R. Eso significa que tengo que escribir dos líneas para cada columna en una fila. – miqbal

+0

¿por qué no iteras la celda? – ariefbayu

+0

Porque no necesito algunas columnas. Puedo ignorar las columnas pero no es eficiente. – miqbal

1

En lugar de iterar todas las celdas de una fila, cuando no use el método rangeToArray() para la fila, y luego use el método array_intersect_key() para filtrar solo las columnas que desee:

$worksheet = $objPHPExcel->getActiveSheet(); 
$highestColumn = $worksheet->getHighestColumn(); 

$columns = array_flip(array('A','C','E')); 
foreach($worksheet->getRowIterator() as $row) 
{ 
    $range = 'A'.$row->getRowIndex().':'.$highestColumn.$row->getRowIndex(); 
    $rowData = $worksheet->rangeToArray($range, 
             NULL, 
             TRUE, 
             TRUE, 
             TRUE); 
    $rowData = array_intersect_key($rowData[$row->getRowIndex()],$columns); 
    // do what you want with the row data 
} 

EDITAR

El último código SVN introduce una serie de nuevos métodos para th iteradores, incluyendo la capacidad de trabajar con rangos, o establecer el puntero a filas y columnas

6

Este específicos es lo que necesitaba :

function coordinates($x,$y){ 
return PHPExcel_Cell::stringFromColumnIndex($x).$y; 
} 

aplicación:

coordinates(5,7); //returns "E7" 

Aunque también se podría hacer esto para las columnas A-Z:

function toNumber($dest) 
{ 
    if ($dest) 
     return ord(strtolower($dest)) - 96; 
    else 
     return 0; 
} 

function lCoordinates($x,$y){ 
$x = $toNumber($x); 
return PHPExcel_Cell::stringFromColumnIndex($x).$y; 
} 

aplicación:

lCoordinates('E',7); //returns "E7" 
+0

Agregar función adicional desde http://stackoverflow.com/a/3580935/1815624 – CrandellWS

+0

Lo que quería era el valor real de la celda nada más que puede ver la respuesta [aquí] (http://stackoverflow.com/a/ 22566639/1815624) – CrandellWS

Cuestiones relacionadas