Чтение строки Excel в виде массива: имеет ли PHPExcel эквивалент fgetcsv ()?

1

Я обновляю код чтения CSV с помощью библиотеки PHPExcel, и я сталкиваюсь с проблемами, итерациями через таблицу данных.

Мой код:

$filetype = PHPExcel_IOFactory::identify($filename);
$objReader = PHPExcel_IOFactory::createReader($filetype);
$xl = $objReader->load($filename);
$objWorksheet = $xl->getActiveSheet();

foreach($objWorksheet->getRowIterator() as  $rowIndex => $row){
    print_r($row);
}

Я бы предпочел не преобразовать весь рабочий лист в массив до итерации, потому что некоторые из моих файлов Excel могут быть довольно большими, и я предпочел бы избежать массового использования памяти.

Что я ожидал: для $row для возврата массива всех ячеек в этой строке.

Что я получил: $row - это объект PHPExcel с ячейками в этой строке.

Есть ли эквивалент fgetcsv() в PHPExcel, который позволит мне получить массив всех ячеек подряд?

Теги:
excel
phpexcel

1 ответ

7
Лучший ответ

Да, когда вы используете Row Iterator, тогда он вернет объект PHPExcel_Worksheet_Row для каждой строки по очереди; вы можете затем перебрать этот объект строки ($row) с помощью Cell Iterator (см. /Example/28iterator.php)

foreach($objWorksheet->getRowIterator() as $row) {
    $cellIterator = $row->getCellIterator();
    $cellIterator->setIterateOnlyExistingCells(true);
    // Iterate over the individual cells in the row
    foreach ($cellIterator as $cell) {
        // Display information about the cell object
        echo 'I am Cell ' , $cell->getCoordinate() , PHP_EOL;
        echo '    and my value is ' , $cell->getValue() , PHP_EOL;
    }
}

Или, альтернативно, вы можете преобразовать эту строку в массив, а не использовать Cell Iterator

$lastColumn = $objWorksheet->getHighestColumn();
foreach($objWorksheet->getRowIterator() as $rowIndex => $row) {
    // Convert the cell data from this row to an array of values
    //    just as though you'd retrieved it using fgetcsv()
    $array = $objWorksheet->rangeToArray('A'.$rowIndex.':'.$lastColumn.$rowIndex);
}

и поскольку $array - это просто массив ячеек в одной строке, он будет занимать столько же памяти, сколько и строка, полученная с помощью fgetcsv()

  • 0
    Блестяще, эта вторая версия - это то, к чему я стремился!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню