3

我正在使用 PHPExcel 库来读取包含许多工作表的 Excel 文件并对其执行处理。现在我循环遍历每个工作表没有问题。但是,我想提取每个工作表的索引并将其打印出来,但我不知道该怎么做。当然,我可以制作自己的计数器并完成它。但是必须有一个带有 getWorksheetIterator() 方法的内置方法,不是吗?

也就是说,如何提取当前的工作表迭代器?

感谢您的任何帮助。

这是文档的循环示例,供参考,稍作修改,包含 worksheetiterator 方法:

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

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

$CurrentWorkSheetIndex = 0; 

foreach ($objPHPExcel->getWorksheetIterator() as $worksheet) {
    echo 'WorkSheet' . $CurrentWorkSheetIndex++ . "\n";
    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";
}
?>
4

2 回答 2

3

WorksheetIterator 依次循环遍历每个工作表,所以第一个是索引 0,第二个是索引 1,第三个是索引 2,依此类推。

所以要么为迭代器的每个循环增加你的 $CurrentWorkSheetIndex 。

$CurrentWorkSheetIndex = 0;   

foreach ($objPHPExcel->getWorksheetIterator() as $worksheet) {
    $index = $CurrentWorkSheetIndex;
    ....
    $CurrentWorkSheetIndex++;
}

或者使用迭代器的 key() 方法。

$wsIterator = $objPHPExcelR->getWorksheetIterator();
foreach($wsIterator as $worksheet) {
    $index = $wsIterator->key();
    ....
}
于 2012-07-24T20:41:59.677 回答
3

我找到了自己问题的答案。

foreach ($objPHPExcel->getWorksheetIterator() as $worksheet) {
    echo 'Worksheet number - ', $objPHPExcel->getIndex($worksheet) , PHP_EOL;

    // rest of code above
}
于 2012-07-24T20:42:02.567 回答