Подтвердить что ты не робот

Цикл столбца PHPExcel

Как я могу сделать цикл, основанный на столбцах таблицы Excel? Я нашел (и использовал) WorksheetIterator, RowIterator и CellIterator, но ничего о столбцах.

4b9b3361

Ответ 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" в стандартном сравнении строк, поэтому мы используем сравнение a! =, увеличивая максимальное значение столбца, чтобы дать идентификатор первого столбца за конечную точку.

Вы также можете использовать

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

в цикле, чтобы проверить существование ячейки перед ее доступом с помощью getCell() (или нет) для эмуляции поведения итератора 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
        }
    }
}

Ответ 3

столбцы цикла как диапазон

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

}

Ответ 4

Попробуйте это! Работа!

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

установить в значение $значение, которое вы хотите распечатать.

Ответ 5

Это исправление для метода getColumnLetter последнего сообщения, оно позволяет получить "буквы" столбцов, независимо от количества столбцов, которые у вас есть

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;
}

Ответ 6

Этот рекурсивный метод был разработан, чтобы вы могли получить "буквы" столбцов, независимо от количества столбцов, которые у вас есть, от "А" до "ZZZZZZZZZZ...":

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"... Но решения выше, конечно, быстрее, если вы можете их использовать!