Как определить конец файла с помощью библиотеки PHPExcel в цикле чанка?

Используя библиотеку PHPExcel, я пытаюсь перебрать около 1500 строк, каждая строка имеет около 25 столбцов.

Я использую этот код (взят изPHPExcel работает 256, 512, а также 1024 МБ оперативной памяти):

/**  Create a new Reader of the type defined in $inputFileType  **/
$objReader = PHPExcel_IOFactory::createReader($inputFileType);
/**  Define how many rows we want to read for each "chunk"  **/ 
$chunkSize = 20;
/**  Create a new Instance of our Read Filter  **/ 
$chunkFilter = new chunkReadFilter(); 
/**  Tell the Reader that we want to use the Read Filter that we've Instantiated  **/ 
$objReader->setReadFilter($chunkFilter); 

/**  Loop to read our worksheet in "chunk size" blocks  **/ 
/**  $startRow is set to 2 initially because we always read the headings in row #1  **/
for ($startRow = 2; $startRow <= 65536; $startRow += $chunkSize) { 
    /**  Tell the Read Filter, the limits on which rows we want to read this iteration        **/ 
$chunkFilter->setRows($startRow,$chunkSize); 
/**  Load only the rows that match our filter from $inputFileName to a PHPExcel Object  **/ 
$objPHPExcel = $objReader->load($inputFileName); 
//    Do some processing here 

//    Free up some of the memory 
$objPHPExcel->disconnectWorksheets(); 
unset($objPHPExcel); 

}

Я хочу обработать как много строк данных. Я пытался использовать метод getHighestRow () из объекта Worksheet, но он просто продолжал возвращать A1

Я также попытался проверить, была ли следующая найденная строка пустой, написав эту маленькую функцию:

function _emptyRow($row) {
    $empty=true;

    foreach($row as $r) {
    if ($r!='') {
        $empty = false;
        }
    }

    return $empty;

}

Так что если _emptyRow () я будуbreak вне цикла . Это не сработало для меня.

Кто-нибудь может предложить способ извлечь только все записи, которые имеют данные? Когда я запускаю это, даже если только около 1500 строк имеют данные, он достигает примерно 23000 до истечения времени ожидания (с set_time_limit (240));

Ответы на вопрос(2)

Я обычно делал бы это:

$objPHPExcel = $objReader->load($inputFileName);    
$rows = count($objPHPExcel->getActiveSheet()->toArray());    
for ($start_row = 1; $start_row < $rows; $start_row ++)
// ...

$excel->getActiveSheet()->toArray() вернет только каждую строку (с данными) в массиве.

патч это позволяет вам читать информацию листа перед тем, как читать весь файл. Эта информация включает в себя количество строк и столбцов для каждого рабочего листа, поэтому вы можете использовать это для получения количества строк перед «чтением фрагментов» фактических данных рабочей книги.

Этот патч теперь включен в последний код SVN, поэтому в будущем он станет частью ядра PHPExcel.

Ваш ответ на вопрос