Mensaje de error al exportar datos mysql para excel

<?php /*******EDIT LINES 3-8*******/ $DB_Server = "localhost"; //MySQL Server $DB_Username = "username"; //MySQL Username $DB_Password = "password"; //MySQL Password $DB_DBName = "databasename"; //MySQL Database Name $DB_TBLName = "tablename"; //MySQL Table Name $filename = "excelfilename"; //File Name /*******YOU DO NOT NEED TO EDIT ANYTHING BELOW THIS LINE*******/ //create MySQL connection $sql = "Select * from $DB_TBLName"; $Connect = @mysql_connect($DB_Server, $DB_Username, $DB_Password) or die("Couldn't connect to MySQL:<br>" . mysql_error() . "<br>" . mysql_errno()); //select database $Db = @mysql_select_db($DB_DBName, $Connect) or die("Couldn't select database:<br>" . mysql_error(). "<br>" . mysql_errno()); //execute query $result = @mysql_query($sql,$Connect) or die("Couldn't execute query:<br>" . mysql_error(). "<br>" . mysql_errno()); $file_ending = "xls"; //header info for browser header("Content-Type: application/xls"); header("Content-Disposition: attachment; filename=$filename.xls"); header("Pragma: no-cache"); header("Expires: 0"); /*******Start of Formatting for Excel*******/ //define separator (defines columns in excel & tabs in word) $sep = "\t"; //tabbed character //start of printing column names as names of MySQL fields for ($i = 0; $i < mysql_num_fields($result); $i++) { echo mysql_field_name($result,$i) . "\t"; } print("\n"); //end of printing column names //start while loop to get data while($row = mysql_fetch_row($result)) { $schema_insert = ""; for($j=0; $j<mysql_num_fields($result);$j++) { if(!isset($row[$j])) $schema_insert .= "NULL".$sep; elseif ($row[$j] != "") $schema_insert .= "$row[$j]".$sep; else $schema_insert .= "".$sep; } $schema_insert = str_replace($sep."$", "", $schema_insert); $schema_insert = preg_replace("/\r\n|\n\r|\n|\r/", " ", $schema_insert); $schema_insert .= "\t"; print(trim($schema_insert)); print "\n"; } ?> 

Traté de usar el código de Peter como arriba. Los datos se exportan muy bien, pero se lanza el siguiente post de error:

El formatting de file y la extensión de 'database.xls' no coinciden. El file puede estar dañado o inseguro. A less que confíes en su fuente, no la abras. ¿Quieres abrirlo de todos modos?

Lo he intentado con una extensión de file diferente, pero no pude solucionarlo.

El motivo del error es que está creando un file de text, con un campo separado por una pestaña y no un file de Excel.

Simplemente cambia las líneas:

 header("Content-Type: application/xls"); header("Content-Disposition: attachment; filename=$filename.xls"); 

con:

 header("Content-Type: text/plain"); header("Content-Disposition: attachment; filename=$filename.txt"); 

o alternativamente:

 header("Content-Type: text/csv"); header("Content-Disposition: attachment; filename=$filename.csv"); 

Entonces podrías abrir este file también desde Excel.