使用 PHPExcel 循环工作表
Posted
技术标签:
【中文标题】使用 PHPExcel 循环工作表【英文标题】:Looping through worksheets with PHPExcel 【发布时间】:2012-07-21 22:58:21 【问题描述】:我正在使用 phpExcel 库来读取 Excel 文件并对其执行处理。我想遍历每个工作表。我检查了文档,我能找到的只是更改活动工作表索引或仅加载指定的工作表。如何循环浏览所有工作表?
感谢您的帮助。
这是文档的循环示例,供参考:
<?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";
?>
【问题讨论】:
【参考方案1】:我认为你可以做到这一点。增加活动工作表直到没有剩余工作表,然后对每个工作表执行您想要的操作:
<?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++;
...
?>
【讨论】:
有趣的方法。谢谢你的回答。 你需要 try ... catch 构造,因为最后一页抛出异常 if($i getSheetCount()-1 ) $i++;否则中断;将其添加到循环的末尾,因为这会给您错误的查找不存在的最后一张表【参考方案2】:您正在使用迭代器。您是否查看 /Tests 目录中的迭代器代码示例?如果是这样,您可能已经看到对 WorksheetIterator 的引用
或者,PHPExcel 对象的 getAllSheets() 方法返回一个工作表数组,它允许您使用 foreach 循环
【讨论】:
非常感谢!我确实在Test 目录中找到了迭代器——28iterator.php。 getAllSheets() 看起来也不错。谢谢。【参考方案3】:这是一个有用的函数,用于迭代工作表并为每个单元格值返回一个单元格值数组,其中工作表标题作为数组键:
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());
【讨论】:
以上是关于使用 PHPExcel 循环工作表的主要内容,如果未能解决你的问题,请参考以下文章