если всё плохо, и сгенерировать настоящий xlsx каким-нить POI на сервере никак нельзя, то можно по-колхозному сгенерировать html таблицу и отдать её файлом с ёкселевским расширением и Content-Type: application/vnd.ms-excel
ёксель будет ругаться, но откроет и даже какое-то оформление попытается воспроизвести, если оно инлайновыми стилями задано. ещё можно пытаться ёкселевские атрибуты ячейкам добавлять, подсмотрев их в том хтмл, который сам ёксель выгружает.
это, конечно, не полноценное решение, но зато тривиально реализуемое чисто на клиенте.