2013-07-30 29 views
12

Tôi đã cố gắng tìm cách để có được một hàng bằng cách sử dụng PHPExcel. Sau nhiều tìm kiếm trên internet, tôi chỉ tìm thấy một cách để lặp qua chúng, với một hàng bắt đầu tùy chọn. Điều này dẫn đến giải pháp sau:Chỉ cần lấy một hàng từ PHPExcel

foreach ($this->objPHPExcel->getActiveSheet()->getRowIterator($rownumber) as $row) { 
    $cellIterator = $row->getCellIterator(); 
    $cellIterator->setIterateOnlyExistingCells(false); 

    foreach ($cellIterator as $cell) { 
     echo $cell->getValue(); 
    } 

    break; 
} 

nhưng điều này có vẻ hơi xấu xí. Có cách nào khác để làm điều đó không?

Trả lời

19

Có!

$row = $this->objPHPExcel->getActiveSheet()->getRowIterator($rownumber)->current(); 

$cellIterator = $row->getCellIterator(); 
$cellIterator->setIterateOnlyExistingCells(false); 

foreach ($cellIterator as $cell) { 
    echo $cell->getValue(); 
} 

Tôi không nhớ nếu bạn có nghĩa vụ phải sử dụng next hoặc current. Nếu bạn nhận được hàng sai, hãy sử dụng current() thay vì next().

+0

Cảm ơn, tôi nghĩ rằng nó sẽ theo hướng đó, chỉ cần không bao giờ biết về các phương pháp sử dụng để chu kỳ trong 'foreach'. –

+0

Bộ xử lý hàng và tế bào của PHPExcel đều triển khai giao diện chuẩn PHP [Iterator] (http://www.php.net/manual/en/class.iterator.php); vì vậy tất cả các phương thức Iterator chuẩn - current(), key(), next(), rewind() và valid() - đều có sẵn. Ngoài ra, chúng cũng thực hiện các phương thức seek(), prev() và resetStart(), sau này hữu ích nếu bạn khởi tạo trình lặp với giá trị hàng hoặc cột khác với hàng hoặc cột đầu tiên –

+2

Tôi đã sử dụng 'current()'. Hoạt động tuyệt vời, cảm ơn. –

10
$myRow = 123; 

$this->objPHPExcel->getActiveSheet() 
    ->rangeToArray(
     'A' . $myRow . 
     ':' . 
     $this->objPHPExcel->getActiveSheet()->getHighestColumn() . $myRow 
    ); 

sẽ trả lại hàng quy định như một mảng của các tế bào

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