Buenas
Para generar un Excel, funciona con tablas HTML. Luego tan sólo tienes que guardarlo con la extensión .xls y ya está.
Por ejemplo, este lo hice y funciona perfectamente (cambio campos y lo hago más sencillo):
Código PHP:
$consulta=mysql_query("SELECT nom, edat FROM nombres ORDER BY nom");
$shtml="<table>";
$shtml=$shtml."<tr>";
$shtml=$shtml."<td>NOMBRE</td><td>EDAD</td></tr>"; // Cabecera con nombres de campo
while ($datos=mysql_fetch_row($consulta)){
$nom=$datos[0];
$edat=$datos[1];
$shtml=$shtml."<tr>
<td>".$nom."</td>
<td>".$edat."</td>
</tr>";
}
$shtml=$shtml."</table>";
$sfile="exportaciones/Nombres_Y_Edades.xls"; // Ruta del archivo a generar
$fp=fopen($sfile,"w");
fwrite($fp,$shtml);
fclose($fp);
Esto generaría un fichero Excel donde pondría arriba Nombre, en la siguiente casilla Edad, y debajo de ellas, todos los nombres con su edad que haya en la BBDD.
Espero que te haya servido de ayuda, saludos