Я уже видел подобный случай на моем сервере (тогда я использовал CSV, потому что не решить проблему). Причина в том, что файл Excel слишком велик (около 40000 или 50000 записей или размер файла превышает 15 МБ), из-за чего ваш сервер не может его обработать, поэтому файл Excel будет поврежден.
Пример:
Содержимое файла, если оно успешно создано, составляет 20 МБ, но когда файл создает 15 МБ, ваш сервер перегружен, он остановит процесс здесь. Вы все еще можете создать файл Excel, но не можете его открыть.
Вы можете попробовать создать файл Excel объемом около 1 МБ или менее, если он работает, проблема может быть не в вашем коде.
Надежда может помочь вам.
Очень жаль, потому что плохой английский.