2011-06-10 161 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,或者将其保存在服务器上。