通过坐标获取细胞

时间:2012-03-28 01:26:54

标签: php phpexcel

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
    }
}

我正在寻找一种名为getCell的类似方法,或者写得很好的PHPExcel文档。

感谢。

3 个答案:

答案 0 :(得分:13)

如果您拥有RowIterator中的$row信息,则可以轻松致电:

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

完整的代码是:

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

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

答案 1 :(得分:6)

这就是我需要的:

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

实现:

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

虽然也可以为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;
}

实现:

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

答案 2 :(得分:1)

当不对行使用rangeToArray()方法时,不使用行中的所有单元格,而是使用array_intersect_key()方法仅过滤所需的列:

$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
}

修改

最新的SVN代码为迭代器引入了许多新方法,包括使用范围的能力,或者将指针设置为特定的行和列