0

我将我的 mysql 数据库导出到 excel,一切正常,但我希望价格字段在 excel 电子表格中显示为美元符号和逗号。

这是我的代码:

$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());

这将正确格式化它,但它只输出价格字段而没有其他内容。

4

2 回答 2

1

从技术上讲,您不会生成 Excel 电子表格。您正在生成一个扩展名为 .xls 的 CSV 文件。CSV 没有添加格式的机制,因为它只是纯文本。您可以让 MySQL 和/或 PHP 将数字格式化为看起来不错的货币值,但是您正在破坏它作为数字的存在。这将是一个字符串,它曾经是一个数字。

您应该使用PHPExcel生成一个 ACTUAL Excel 文件,您可以在其中添加 Excel 支持的所有常用功能,包括颜色和公式。

于 2011-06-10T17:32:04.427 回答
0

您的代码正在生成一个带有 XLS 扩展名的文本文件(CSV 格式)。然后,在安装了 Excel 的 Windows 下,尽管内容只是文本文件,但它可能会被 Excel 自动打开。此方法无法生成任何具有样式的数据。

我建议您使用OpenTBS轻松构建您的 Excel 文件。OpenTBS 是一个 PHP 类,它可以使用模板构建真正的 XLSX、DOCX、ODT、ODS 等等。您只需使用 Excel 设计模板,然后将其与 PHP 下的数据合并,您就可以直接下载一个新的 XSLS,或者作为文件保存在服务器上。

于 2011-06-10T18:52:10.160 回答