Если уж отдавать CSV, то честно признаваться, что это CSV, а не Эксель.
Потому что иначе попросит заказчик -- "А сделай мне чтобы заголовки у колонок были полужирными" -- и все, прийдется пояснять, отмазываться и так далее.
Геренировать настоящий эксель -- тоже, не всегда получается (хотя бы потому что формат Экселя был среверсирован, и далеко не все можно создать средствами PHP). То есть, это не настоящий эксель, а файл, который в большинстве случаев похож на Эксель
.
Так что лучший (и при этом достаточно кроссплатформенный) вариант -- это PDF.
Для генерации можно использовать как уже упомянутый PDFLib, так и более мощный (на мой взгляд) пакет
Преимущества последнего -- он сам написан на PHP, то есть упрашивать хостера поставить стороннее расширение не нужно будет.