2012-07-23 31 views
19

Tôi đang sử dụng thư viện PHPExcel để đọc tệp Excel và thực hiện quá trình xử lý trên đó. Tôi muốn lặp qua từng trang tính. Tôi đã kiểm tra tài liệu và tất cả những gì tôi có thể tìm thấy là thay đổi chỉ mục trang tính đang hoạt động hoặc chỉ tải các trang tính được chỉ định. Làm thế nào tôi có thể lặp qua tất cả các bảng tính?Lặp qua các trang tính với PHPExcel

Cảm ơn bạn đã được trợ giúp.

Dưới đây là ví dụ vòng lặp của tài liệu, để tham khảo:

<?php 
$objReader = PHPExcel_IOFactory::createReader('Excel2007'); 
$objReader->setReadDataOnly(true); 

$objPHPExcel = $objReader->load("test.xlsx"); 
$objWorksheet = $objPHPExcel->getActiveSheet(); 

echo '<table>' . "\n"; 
foreach ($objWorksheet->getRowIterator() as $row) { 
    echo '<tr>' . "\n"; 

    $cellIterator = $row->getCellIterator(); 
    $cellIterator->setIterateOnlyExistingCells(false); // This loops all cells, 
                // even if it is not set. 
                // By default, only cells 
                // that are set will be 
                // iterated. 
    foreach ($cellIterator as $cell) { 
    echo '<td>' . $cell->getValue() . '</td>' . "\n"; 
    } 

    echo '</tr>' . "\n"; 
} 
echo '</table>' . "\n"; 
?> 

Trả lời

9

Bạn đang sử dụng vòng lặp. Bạn đã xem xét ví dụ mã cho các trình vòng lặp trong thư mục/Tests chưa? Nếu vậy, bạn có thể đã thấy tham chiếu đến WorksheetIterator

Ngoài ra, getAllSheets() của đối tượng PHPExcel trả về một mảng của các bảng tính, cho phép bạn sử dụng một vòng lặp foreach

+0

Cảm ơn bạn rất nhiều! Tôi đã tìm thấy trình lặp trong thư mục Test - 28iterator.php. getAllSheets() cũng có vẻ tốt. Cảm ơn bạn. – user717236

14

Tôi nghĩ bạn có thể làm điều này . Tăng bảng hoạt động cho đến khi không có trái nào, sau đó làm những gì bạn muốn với mỗi người:

<?php 

    $objReader = PHPExcel_IOFactory::createReader('Excel2007'); 
    $objReader->setReadDataOnly(true); 

    $objPHPExcel = $objReader->load("test.xlsx"); 

    $i = 0; 
    while ($objPHPExcel->setActiveSheetIndex($i)){ 

     $objWorksheet = $objPHPExcel->getActiveSheet(); 
     //now do whatever you want with the active sheet 
     ... 
     $i++; 

    } 

    ... 

?> 
+0

Cảm ơn bạn rất nhiều vì sự giúp đỡ của bạn. Điều này hoạt động tốt! – user717236

+0

Cách tiếp cận thú vị. Cảm ơn câu trả lời đó. – Yitzhak

+1

bạn cần thử ... bắt xây dựng, vì trang cuối cùng ném ngoại lệ –

7

Dưới đây là một chức năng hữu ích tôi sử dụng cho iterating trên tờ và trả lại một mảng các giá trị di động cho mỗi bảng tiêu đề làm khóa mảng:

function getSheets($fileName) { 
    try { 
     $fileType = PHPExcel_IOFactory::identify($fileName); 
     $objReader = PHPExcel_IOFactory::createReader($fileType); 
     $objPHPExcel = $objReader->load($fileName); 
     $sheets = []; 
     foreach ($objPHPExcel->getAllSheets() as $sheet) { 
      $sheets[$sheet->getTitle()] = $sheet->toArray(); 
     } 
     return $sheets; 
    } catch (Exception $e) { 
     die($e->getMessage()); 
    } 
} 
Các vấn đề liên quan