2012-03-28 165 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 
    } 
} 

我正在寻找类似的方法,名为getCell以上或编写完整的PHPExcel文档。通过坐标获取单元格

谢谢。

回答

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(); 
} 
+0

这是非常好的,但很难实现。我只需要一种获得单元格价值的方法。因为我有列A到R.这意味着我必须为连续的每列写两行。 – miqbal 2012-03-28 02:40:14

+0

你为什么不重复单元格? – ariefbayu 2012-03-28 02:47:39

+0

因为我不需要一些列。我可以忽略这些列,但效率不高。 – miqbal 2012-03-28 02:55:10

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代码引入了一些新的方法来TH迭代器,包括范围工作,或将指针具体的行和列

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" 
+0

从http://stackoverflow.com/a/3580935/1815624添加额外的功能 – CrandellWS 2014-03-21 17:20:47

+0

我想要的是从单元格的实际值没有更多的,你可以查看答案[这里](http://stackoverflow.com/a/ 1815624分之22566639) – CrandellWS 2014-03-21 18:39:43

相关问题