Top.Mail.Ru
Ответы

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

Всем привет!
Есть код:
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к...

Дополнен

Суть в том, что по 10к получится записывать в базу, а также проверять, на то что существует та или иная строка или нет.

Только авторизированные пользователи могут оставлять свои ответы
Дата
Популярность
Аватар пользователя
Мастер

увеличь лимиты на время выполнения и размеры файлов

Аватар пользователя
Мастер
123456789101112131415161718192021222324252627282930
 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); 
 

А если нужно просто отключить лимит по времени, то можно использовать

1
 set_time_limit(0);