2015-12-30 62 views
0
<?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"; 
    } 
?> 

我試圖使用上面的Peter代碼。 數據導出很好,但正在拋出以下錯誤消息:將mysql數據導出爲ex​​cel時的錯誤消息

'database.xls'的文件格式和擴展名不匹配。文件 可能已損壞或不安全。除非你信任它的源碼不要打開 它。你還想打開嗎?

我試過不同的文件擴展名,但無法修復它。

+0

請[停止使用'mysql_ *'函數](http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php)。 [這些擴展](http://php.net/manual/en/migration70.removed-exts-sapis.php)已在PHP 7中刪除。瞭解[編寫]​​(http://en.wikipedia.org/ wiki/Prepared_statement)語句[PDO](http://php.net/manual/en/pdo.prepared-statements.php)和[MySQLi](http://php.net/manual/en/mysqli.quickstart .prepared-statements.php)並考慮使用PDO,[這真的很簡單](http://jayblanchard.net/demystifying_php_pdo.html)。 –

+0

[如何創建最小,完整和可驗證的示例](http://stackoverflow.com/help/mcve) – wogsland

回答

1

錯誤的原因是您正在創建一個文本文件,其中字段由製表符分隔,而不是Excel文件。

簡單地改變行:

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

有:

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

,或者:

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

然後你也可以打開此文件從Excel。

+0

數據導出爲單個單元格。 – rns

+0

編寫csv文件有多種不同的方式。如果字段中沒有逗號(或者在字段周圍放置雙引號(「)),則也可以用逗號替換程序中的字符」\ t「。否則,必須告訴Excel如何解釋文件,通過指定該字段由製表符分隔 – Renzo

+0

謝謝你解決這個問題。 – rns