2012-07-23 56 views
19

我正在使用PHPExcel庫來讀取Excel文件並對其執行處理。我想遍歷每個工作表。我檢查了文檔,所有我能找到的是改變活動工作表索引或只加載指定的工作表。我怎樣才能遍歷所有的工作表?使用PHPExcel循環工作表

謝謝你的幫助。

這裏是文檔的循環示例,以供參考:

<?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"; 
?> 

回答

9

您使用的迭代器。你看了/ Tests目錄中迭代器的代碼示例嗎?如果是這樣,你可能已經看到參考WorksheetIterator

另外,在getAllSheets()的PHPExcel對象的方法返回工作表的數組,它允許您使用foreach循環

+0

非常感謝!我在Test目錄中找到了迭代器 - 28iterator.php。 getAllSheets()也很好看。謝謝。 – user717236 2012-07-23 18:58:45

14

我認爲你可以做到這一點。增加活動工作表,直到沒有任何左,然後做你想要什麼每個人:

<?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

非常感謝您的幫助。這效果很好! – user717236 2012-07-23 18:57:42

+0

有趣的方法。謝謝你的回答。 – Yitzhak 2015-05-19 15:23:01

+1

你需要嘗試... catch結構,因爲最後一頁拋出異常 – 2015-06-11 13:00:13

7

下面是我使用的遍歷表,並與回紙單元格的值的數組,每個有用的功能作爲陣列關鍵字的標題:

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