PHPExcel列循环

时间:2011-04-07 08:07:37

标签: php phpexcel

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

7 个答案:

答案 0 :(得分:80)

没有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
}

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

您也可以使用

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

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

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

更新(2015-05-06)

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

答案 1 :(得分: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
        }
    }
}

答案 2 :(得分:5)

将列循环为范围

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

}

答案 3 :(得分:1)

试试这个!工作!

$limit = 10000;
$value='sua mensagem'
for($i=0,$j='A';$i<$limit;$i++,$j++) {
    $objPHPExcel->setActiveSheetIndex(0)
  ->setCellValue($j.$i, $value);
}

在$ value中设置要打印的内容。

答案 4 :(得分:1)

这是对最后一条消息的getColumnLetter方法的修复,它允许您获取&#34;字母&#34;列,无论你有多少列

function getColumnLetter( $number ){
    $prefix = '';
    $suffix = '';
    $prefNum = intval( $number/26 );
    if( $number > 25 ){
        $prefix = getColumnLetter( $prefNum - 1 );
    }
    $suffix = chr( fmod( $number, 26 )+65 );
    return $prefix.$suffix;
}

答案 5 :(得分:0)

这个递归方法的设计允许你获得列的“字母”,无论你有多少列,从“A”到“ZZZZZZZZZ ......”:

function getColumnLetter( $number )
{
    $prefix = '';
    $suffix = '';
    $prefNum = intval( $number/26 );
    if( $prefNum > 25 )
    {
        $prefix = getColumnLetter( $prefNum );
    }
    $suffix = chr( fmod( $number, 26 )+65 );
    return $prefix.$suffix;
}

因此,您可以在索引号上循环PHP数组的列并将其转换为字母串,并在PHPExcel方法中使用它,例如“setCellValue”... 但是如果你能使用它们,上述解决方案肯定会更快!

答案 6 :(得分:0)

在PhpSpreadsheet(代替PHPExcel)中,您可以执行以下操作:

        foreach( $sheet->getColumnIterator() as $col )
        {
            $sheet->getColumnDimension( $col->getColumnIndex() )->setAutosize( true );
        }