PHPExcel Column Loop

2022-08-30 13:16:12

如何执行基于Excel工作表列的循环?我发现(并使用)WorksheetIterator,RowIterator和CellIterator,但没有关于列的任何内容。


答案 1

没有 ColumnIterator,因此您必须手动执行此操作。

对于任何给定的工作表:

循环列的行:

$column = 'A';
$lastRow = $worksheet->getHighestRow();
for ($row = 1; $row <= $lastRow; $row++) {
    $cell = $worksheet->getCell($column.$row);
    //  Do what you want with the cell
}

要循环一行中的列,您可以利用 PHP 的 Perls 样式的字符增量功能:

$row = 1;
$lastColumn = $worksheet->getHighestColumn();
$lastColumn++;
for ($column = 'A'; $column != $lastColumn; $column++) {
    $cell = $worksheet->getCell($column.$row);
    //  Do what you want with the cell
}

请注意,在比较列字母以测试循环中的最后一列时,我们不能简单地使用<或<=,因为我们正在比较字符串,而“B”>“AZ”在标准字符串比较中,因此我们使用!=比较,增加最高列值以使第一列ID超过终点。

您还可以使用

$worksheet->cellExists($column.$row);

在循环中测试单元格是否存在,然后使用 getCell() (或 not) 来模拟迭代器 getIterateOnlyExistingCells() 行为

迭代器实际上相当慢,所以你可能会发现这些简单的循环比使用迭代器更快。

更新 (2015-05-06)

PHPExcel 版本 1.8.1 引入了一个新的列迭代器。行和列迭代器还允许您指定要迭代的行或列的范围,并允许您在循环时使用 prev() 和 next()


答案 2

此短代码段提供循环的列行。它获取最后一个非空列(及其行)的索引并循环到该索引,因此请注意excel中忘记的值。

代码遍历列 A 的行,然后循环通过列 B 的行 ...

$objReader = new PHPExcel_Reader_Excel2007();
$objReader->setReadDataOnly(true);
$objPHPExcel = $objReader->load($file);

foreach ($objPHPExcel->getWorksheetIterator() as $worksheet) 
{
    $worksheetTitle = $worksheet->getTitle();
    $highestColumn = $worksheet->getHighestColumn();
    $highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn);

    // expects same number of row records for all columns
    $highestRow = $worksheet->getHighestRow();

    for($col = 0; $col < $highestColumnIndex; $col++)
    {
        // if you do not expect same number of row records for all columns
        // get highest row index for each column
        // $highestRow = $worksheet->getHighestRow();

        for ($row = 1; $row <= $highestRow; $row++)
        {
            $cell = $worksheet->getCellByColumnAndRow($col, $row);
            $val = $cell->getValue();
            // do what you want with cell value
        }
    }
}

推荐