У меня была точно такая же проблема, и поиск в Google не нашел ценного решения.
Поскольку PHPExcel генерирует объекты и сохраняет все данные в памяти, прежде чем, наконец, создать файл документа, который сам также хранится в памяти,установка более высоких пределов памяти в PHP никогда полностью не решит эту проблему - это решение не очень хорошо масштабируется.
Чтобы действительно решить проблему, вам нужно сгенерировать файл XLS «на лету».Это то, что я сделал, и теперь я могу быть уверен, что «загрузить набор результатов SQL как XLS» работает независимо от того, сколько (миллионов) строк возвращено базой данных.
К сожалению, я не смог найти ни одной библиотеки, котораяподдерживает генерацию XLS (X) "на автомобиле".
Я нашел эту статью в IBM Developer Works, в которой приводится пример того, как генерировать XLS XML "на лету": http://www.ibm.com/developerworks/opensource/library/os-phpexcel/#N101FC
Для меня это очень хорошо работает - у меня есть несколько листов с большим количеством данных, и я даже не коснулся лимита памяти PHP.Очень хорошо масштабируется.
Обратите внимание, что в этом примере используется простой XML-формат Excel (расширение файла "xml"), поэтому вы можете отправлять несжатые данные непосредственно в браузер.http://en.wikipedia.org/wiki/Microsoft_Office_XML_formats#Excel_XML_Spreadsheet_example
Если вам действительно нужно сгенерировать XLSX, все становится еще сложнее.XLSX - это сжатый архив, содержащий несколько файлов XML.Для этого вы должны записать все свои данные на диск (или в память - та же проблема, что и в PHPExcel), а затем создать архив с этими данными.http://en.wikipedia.org/wiki/Office_Open_XML
Возможно, также возможно создавать сжатые архивы "на лету", но этот подход кажется действительно сложным.