Я использую библиотеку PHPExcel для генерации данных excel на основе базы данных mysql. Результаты запроса MySql составляют 1,34,000 строк. И Excel поддерживает 65 536 строк на одном листе. Сделанная таким образом логика:Ошибка экспорта PHPExcel для больших файлов
foreach($result as $value) { $val = array_values($value); if($rowscounter < 65000) { $objPHPExcel->addRow($val,$rowscounter); } else { $active_sheet++; $objPHPExcel->createSheet(); $objPHPExcel->setActiveSheetIndex($active_sheet); $rowscounter = 1; } $rowscounter++; } // deliver header header("Content-Type: $mtype; charset=" . $objPHPExcel->sEncoding); header("Content-Type:application/octet-stream"); header("Content-Disposition: inline; filename=\"" . $filename . ".$ext\""); // Save it as an excel 2003 file $objWriter = IOFactory::createWriter($objPHPExcel,$objPHPExcel->sFileFormat); //echo "Peak memory usage: " . (memory_get_peak_usage(true)/1024/1024) . " MB";exit; $objWriter->save('php://output');
для создания нового листа после достижения 65000 записей для одного wohe-листа.
Но это не сработает; не выдавая никаких результатов или ошибок. Первоначально я думал об этом из-за ограничения памяти. Но при повторном воспроизведении он показывает максимальную память до 1400,5 МБ, и я установил ограничение на память до 3500 МБ, используя ini_set('memory_limit', '3500M');
Не могли бы вы предложить что-нибудь или любую альтернативу?
Можете ли вы изложить изменения, внесенные вами в PHPExcel? Вы ссылаетесь на такие методы, как $ objPHPExcel-> addRow() (которые я ожидаю быть связанными с листом, а не с книгой) и такими свойствами, как $ objPHPExcel-> sFileFormat, которые не являются частью кода библиотеки PHPExcel. –
Вы пробовали отладку, чтобы определить, не работает ли она в цикле foreach() или при попытке записать файл? –
Да Mark, $ objPHPExcel-> addRow() - моя функция, которая ничего не использует -> getActiveSheet() -> setCellValueByColumnAndRow(); –