Pour le header du fichier, c'est très simple :

header("Content-Type: application/vnd.ms-excel;");

Le formatage du tableau permet d'utiliser la plupart des formatage disponibles dans Excel :

<table>
    <tr>
        <td>Texte</td>
        <td style='mso-number-format:\@'>On formate un texte</td>
    </tr>
    <tr>
        <td>Nombre sur 3 décimales ( 2.345 )</td>
        <td style='mso-number-format:"0\.000"'>2.345678</td>
    </tr>
    <tr>
        <td>Nombre séparé par un espace, avec 3 décimales ( 1 234.567 )</td>
        <td style='mso-number-format:\#\ \#\#0\.000'>1234.56789</td>
    </tr>
    <tr>
        <td>Une date ( 06/09/2009 )</td>
        <td style='mso-number-format:"dd\/mm\/yyyy"'>2009-09-06 13:37:45</td>
    </tr>
</table>

Voilà, il suffit juste ensuite de produire une simple boucle pour obtenir des exports de données vers Excel. En utilisant les headers, les colspans, les rowspans, etc, on peux rapidement obtenir des exports beaucoup plus poussés. Les couleurs de textes et les fonds de cellules sont aussi utilisables.