Я пытаюсь экспортировать около 40 000 строк данных Mysql в PHP (Laravel4) с использованием библиотеки PHPExcel. Ниже мой код:Экспорт больших файлов в excel с помощью PHPExcel
($ patList представляет собой массив из столбцов результата)
set_time_limit (3000);
$cacheMethod = PHPExcel_CachedObjectStorageFactory:: cache_to_phpTemp;
$cacheSettings = array('memoryCacheSize' => -1);
PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings);
$objPHPExcel = new PHPExcel();
$i = 1;
$patList = $result[0];
for ($r = 0; $r < count($patList); $r++) {
$objPHPExcel->setActiveSheetIndex(0)
->setCellValue("A$i", $patList[$r][0])
->setCellValue("B$i", $patList[$r][1])
->setCellValue("C$i", $patList[$r][2])
->setCellValue("D$i", $patList[$r][1])
->setCellValue("E$i", $patList[$r][2])
->setCellValue("F$i", $patList[$r][1])
->setCellValue("G$i", $patList[$r][2])
->setCellValue("H$i", $patList[$r][2])
->setCellValue("I$i", $patList[$r][1])
->setCellValue("J$i", $patList[$r][2])
->setCellValue("K$i", $patList[$r][5]);
$i++;
}
$objPHPExcel->getActiveSheet()->setTitle('Name of Sheet 1');
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="result.xls"');
header('Cache-Control: max-age=0');
ob_clean();
flush();
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('php://output');
Приведенный выше код работает нормально, если есть 3-4 столбцы в Excel и 15000 строк. Однако, если я увеличу no. строк до 30 000 или нет. столбцов до 10, excel не генерируется.
вы получаете какие-либо ошибки? Включено ли сообщение об ошибках? Убедитесь, что ваш скрипт не исчерпывает память, потому что вы сохраняете довольно большие переменные в памяти. – Bogdan
Попробуйте установить 'ini_set ('memory_limit', '1024M');' или то, что вы считаете достаточным для сценария. – Bogdan
Да, сейчас это работает! Он потреблял 228 МБ памяти, поэтому он терпел неудачу. Большое спасибо :) –