<?php
$myconn = mysql_connect("localhost", "dbname", "dbpass");
mysql_select_db("dbname", $myconn);
$myquery = "CONSULTA SQL";
$resquery = mysql_query($myquery, $myconn) or die (mysql_error());
$count = mysql_num_fields($resquery);
for ($i = 0; $i < $count; $i++){
$header .= mysql_field_name($resquery, $i)."\t";
}
while($row = mysql_fetch_row($resquery)){
$line = '';
foreach($row as $value){
if(!isset($value) || $value == ""){
$value = "\t";
}else{
$value = str_replace('"', '""', $value);
$value = '"' . $value . '"' . "\t";
}
$line .= $value;
}
$data .= trim($line)."\n";
}
$data = str_replace("\r", "", $data);
if ($data == "") {
$data = "\n no se encontraron registros\n";
}
header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=$filename.xls");
header("Pragma: no-cache");
header("Expires: 0");
echo $header."\n".$data;
?>
Espero que te ayude a mi me funciona excelente.