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

Tôi đang tìm phương pháp tương tự có tên là getCell tài liệu PHPExcel ở trên hoặc được viết tốt.Nhận các ô theo tọa độ

Cảm ơn.

Trả lời

13

Nếu bạn có thông tin $row từ RowIterator, bạn có thể chỉ dễ dàng gọi:

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

Mã hiệu hoàn chỉnh sẽ là:

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

Nó rất tốt nhưng khó để thực hiện. Tôi chỉ cần một phương pháp có giá trị tế bào. Bởi vì tôi có các cột từ A đến R. Điều đó có nghĩa là tôi phải viết hai dòng cho mỗi cột liên tiếp. – miqbal

+0

tại sao bạn không chỉ cần lặp lại các tế bào? – ariefbayu

+0

Vì tôi không cần một số cột. Tôi có thể bỏ qua các cột nhưng nó không hiệu quả. – miqbal

1

Thay vì lặp tất cả các tế bào trong một hàng, khi không sử dụng phương thức rangeToArray() cho hàng và sau đó sử dụng phương thức array_intersect_key() để chỉ lọc các cột mà bạn muốn:

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

EDIT

Mã SVN mới nhất giới thiệu một số phương pháp mới để lần thứ lặp, trong đó có khả năng làm việc với các phạm vi, hoặc đặt con trỏ đến các hàng và cột

6

này cụ thể là những gì tôi cần :

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

thực hiện:

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

Mặc dù người ta cũng có thể làm điều này cho cột 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; 
} 

thực hiện:

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

Thêm chức năng bổ sung từ http://stackoverflow.com/a/3580935/1815624 – CrandellWS

+0

Điều tôi muốn là giá trị thực tế từ ô không có gì hơn bạn có thể xem câu trả lời [ở đây] (http://stackoverflow.com/a/ 22566639/1815624) – CrandellWS

Các vấn đề liên quan