PHPExcel列循环

Haz*_*zar 32 php phpexcel

如何进行基于Excel工作表列的循环?我发现(和使用过)WorksheetIterator,RowIterator和CellIterator但没有关于列.

Mar*_*ker 83

没有ColumnIterator,所以你必须手动完成.

对于任何给定的工作表:

要循环列的行:

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

要循环连续列,您可以利用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
}
Run Code Online (Sandbox Code Playgroud)

需要注意的是比较列的字母时,在循环测试的最后一列,我们不能简单地用<或<=,因为我们比较字符串,而"B">"AZ"的标准字符串比较,所以我们使用!=比较,增加最高列值以使第一列ID超过结束点.

你也可以使用

$worksheet->cellExists($column.$row);
Run Code Online (Sandbox Code Playgroud)

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

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

更新时间(2015-05-06)

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

  • 我试图获取列的数值.我不知道PHP的字符增量功能.感谢您的解决方案和这个简洁的提示! (8认同)

小智 7

这个简短的片段提供了遍历行的循环.它获取最后一个非空列(及其行)的索引并循环到该索引,因此请注意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
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


any*_*asa 5

循环列作为范围

foreach ( range('A', $Excel->getActiveSheet()->getHighestColumn()) as $column_key) {

}
Run Code Online (Sandbox Code Playgroud)

  • 哇。我一点都不知道 (3认同)
  • 它仅适用于具有一个字符名称 ( A - Z ) 的列。请参阅 https://www.php.net/manual/en/function.range.php (2认同)