Таймаут сервера?
Memory_limit?
Ошибку выдает?
Можно разбить задачу на этапы, запускать их ajax-ом, показывать пользователю статус загрузки. И красиво и сервер не нагружаем.
Вначале создаем файл, потом по частям записываем, каждый раз проверяем открывается ли он для записи, если файл слишком большой и убивает оперативку - создаем новый. На выходе 2 и более файлов.
Можно вместо excel создавать csv, он легче. Я не думаю что вы туда формулы засовываете и сводные таблицы.