2011-06-10 158 views
0

將我的mysql數據庫導出爲ex​​cel,並且一切正常,但我希望價格字段在Excel電子表格中以美元符號和逗號顯示。將數據庫導出爲xls,格式爲美元符號和逗號

這裏是我的代碼:

$pubtable = $_GET["publication"]; 
$addate = $_GET["adDateHidden"]; 

$export = mysql_query("SELECT * FROM $pubtable WHERE addate = '$addate' ORDER BY price DESC") or die ("Sql error : " . mysql_error()); 

$fields = mysql_num_fields($export); 

for($i = 0; $i < $fields; $i++){ 
    $header .= mysql_field_name($export , $i). "\t"; 
} 

while($row = mysql_fetch_row($export)){ 
    $line = ''; 
    foreach($row as $value) { 
     if(!isset($value) || trim($value) == "")  { 
      $value = "\t"; 
     } else { 
      $value = str_replace('"' , '""' , $value); 
      $value = '"' . $value . '"' . "\t"; 
     } 
     $line .= $value; 
    } 
    $data .= trim($line). "\n"; 
} 
$data = str_replace("\r" , "" , $data); 

if(trim($data) == ""){ 
    $data = "\n(0)Records Found!\n";       
} 

header("Content-type: application/vnd.ms-excel"); 
header("Content-Disposition: attachment; filename=".$pubtable."_".$addate.".xls"); 
header("Pragma: no-cache"); 
header("Expires: 0"); 
header ('Content-Transfer-Encoding: binary'); 
header ('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); 
header ('Cache-Control: cache, must-revalidate'); 
print "$header\n$data"; 

我試着這樣做

$export = mysql_query("SELECT CONCAT('$', FORMAT(price, 2)) as fieldalias * FROM $pubtable WHERE addate = '$addate' ORDER BY fieldalias DESC") or die ("Sql error : " . mysql_error()); 

這個正確的格式,但它僅輸出價格領域,沒有別的。

回答

1

從技術上講,您並未生成Excel電子表格。您正在生成擴展名爲.xls的CSV文件。 CSV沒有添加格式的機制,因爲它只是純文本。您可以將MySQL和/或PHP格式的數字轉換爲看起來像一個不錯的貨幣值,但是然後您將其作爲一個數字銷燬。這將是一個字符串,即使用一個數字。

您應該使用PHPExcel來生成一個ACTUAL Excel文件,您可以在其中添加Excel支持的所有常用工具,包括顏色和公式。

0

您的代碼正在生成帶有XLS擴展名的文本文件(CSV格式)。然後,在安裝了Excel的Windows下,儘管內容僅爲文本文件,但可能會由Excel自動打開。 此方法不能產生任何帶有樣式的數據。

我建議您使用OpenTBS來輕鬆構建您的Excel文件。 OpenTBS是一個PHP類,可以使用模板構建真正的XLSX,DOCX,ODT,ODS等等。您只需使用Excel設計模板,然後將其與PHP中的數據合併,即可直接下載新的XSLS,或者將其保存在服務器上。