Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Чтение большого excel через PHPExcel

Ден Але Ученик (60), на голосовании 11 месяцев назад
Всем привет!
Есть код:
function parseEXCELfile($filename){
require_once dirname(__FILE__).'/PHPExcel/Classes/PHPExcel.php';
$result = array();
$file_type = PHPExcel_IOFactory::identify($filename);
$objReader = PHPExcel_IOFactory::createReader( $file_type );
$objPHPExcel = $objReader->load($filename);
$result = $objPHPExcel->getActiveSheet()->toArray();
return $result;
}
$RES = parseEXCELfile('file.xlsx');

Код простой и работает на малых файлах, но дело в том, что у меня у файла 60-70к строк и скрипт не вывозит (502 ошибка). Подскажите пожалуйста, как прогонять к примеру и за один запрос получить определенное кол-во строк, например 10к...
Дополнен 12 месяцев назад
Суть в том, что по 10к получится записывать в базу, а также проверять, на то что существует та или иная строка или нет.
Голосование за лучший ответ
Давид Мейстер Мастер (2089) 12 месяцев назад
 function parseAndInsertEXCELfileChunk($filename, $startRow, $chunkSize) { 
require_once dirname(__FILE__).'/PHPExcel/Classes/PHPExcel.php';
require_once dirname(__FILE__).'/PHPExcel/Classes/PHPExcel/IOFactory.php';
require_once dirname(__FILE__).'/PHPExcel/Classes/PHPExcel/Shared/String.php';
$result = array();
$file_type = PHPExcel_IOFactory::identify($filename);
$objReader = PHPExcel_IOFactory::createReader($file_type);
$objReader->setReadDataOnly(true);
$chunkFilter = new PHPExcel_ChunkReadFilter();
$objReader->setReadFilter($chunkFilter);
$chunkFilter->setRows($startRow, $chunkSize);
$objPHPExcel = $objReader->load($filename);
$objWorksheet = $objPHPExcel->getActiveSheet();
$highestRow = $objWorksheet->getHighestRow();
$highestColumn = $objWorksheet->getHighestColumn();
$chunkData = $objWorksheet->rangeToArray('A' . $startRow . ':' . $highestColumn . ($startRow + $chunkSize - 1), null, true, true, true);

// Далее можно обработать $chunkData, например, записать его в базу данных
// ...
// Рекомендуется использовать batch-вставку для обработки больших объемов данных

// Возвращаем информацию о количестве обработанных строк
return count($chunkData);
}

// Пример использования для чтения 10 000 строк, начиная с первой строки
$rowOffset = 1; // Номер строки с которой начать чтение
$chunkSize = 10000; // Количество строк для чтения
$processedRowCount = parseAndInsertEXCELfileChunk('file.xlsx', $rowOffset, $chunkSize);
А если нужно просто отключить лимит по времени, то можно использовать
 set_time_limit(0); 
step Мастер (1313) 12 месяцев назад
увеличь лимиты на время выполнения и размеры файлов
Похожие вопросы