In breve funziona così:

invece di restituire un testo (in formato html) al tuo browser devi informare il client che stai mandando un file excel. Questa cosa si fa usando la riga
codice:
response.setContentType("application/vnd.ms-excel");
con la quale dici che il flusso dati dovrà essere visualizzato con excel.
Dopo aver fatto ciò devi mandare i dati in un formato che excel riesca ad interpretare correttamente.

Non ho mai spedito ai client file excel ma sempre pdf in un modo simile a quello che ti ho spiegato (stesso metodo con parametro diverso).
Mi ricordo che avevo provato a fare un file excel con un'applicazione tradizionale e (se la memoria non mi tradisce) bastava usare tabulazioni e nuove righe per spostarsi nel file.