以Excel格式导出Mysql表

时间:2012-10-23 09:49:07

标签: php mysql

我需要将mysql表导出为Excel格式。我试过但仍然无法获得正确的格式。任何人都可以帮我解决这个问题。我在下面附上了我的php函数。

<body>
<?php

function export_excel_csv()
{
    $conn = mysql_connect("localhost","itsup739_uaquiz","itsup739_uaquiz");
    $db = mysql_select_db("itsup739_uaquizDB",$conn);

    $sql = "SELECT * FROM results";
    $rec = mysql_query($sql) or die (mysql_error());

    $num_fields = mysql_num_fields($rec);

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

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

    $data = str_replace("\\r" , "" , $data);

    if ($data == "")
    {
        $data = "\\n No Record Found!\n";                       
    }

    header("Content-type: application/octet-stream");
    header("Content-Disposition: attachment; filename=reports.xls");
    header("Pragma: no-cache");
    header("Expires: 0");
    print "$header\\n$data";
    //echo $header;
}
export_excel_csv();
?>

请点击链接查看输出。

http://itsupportsrilanka.com/uaquiz/admin/export.php

3 个答案:

答案 0 :(得分:4)

导出到excel实际上真的很容易。

只需将此内容创建为普通的HTML表格,如下所示:

$contents = '<table>
  <tr>
    <td>Row 1</td>
    <td>Row 2</td>
  </tr>
  <tr>
    <td>bLAH BLAH</Td>
    <td>Blah Blah</td>
  </tr>
</table>';

现在将标题设置为excel文档并输出表格:

$filename = 'my_excel_file.xls';
header( 'Content-type: application/ms-excel' );
header( 'Content-Disposition: attachment; filename=' . $filename );

echo $contents;

这就是它。

答案 1 :(得分:0)

  1. 为了能够阅读您的表格,我建议您将其编写为CSV文件而不在数据周围使用HTML正文。
  2. 不要使用制表符作为分隔符。而是在系统的区域设置中使用字符集(通常为,;)。
  3. 我不确定这是故意的,但你逃过了\t\n的反斜杠。因此,这些不代表制表符或换行符。
  4. 使用fputcsv()将您的行写入文件(或标准输出),默认情况下将使用Excel理解的CSV格式。

答案 2 :(得分:0)

您的代码包含许多错误。

    开头的
  1. <body>标记会产生警告Cannot modify header information。标题不会被设置为在第一行本身开始的输出。
  2. 我认为csv的内容类型为Content-type: text/csv