2012-03-28 139 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