php生成excel和下载

时间:2014-06-03 11:24:40

标签: php excel download

我有一个网站,其中包含一个简单的函数,用于生成带有数组数据的Excel,然后提供用户下载。

header( "Content-Type: application/vnd.ms-excel" );
header( "Content-disposition: attachment; filename=spreadsheet.xls" );
echo 'First Name' . "\t" . 'Last Name' . "\t" . 'Phone' . "\n";
echo 'John' . "\t" . 'Doe' . "\t" . '555-5555' . "\n";

上面的代码用于测试,但我只从excel的网站获得一些html代码,而不是数据。

请问为什么会这样? 谢谢!

3 个答案:

答案 0 :(得分:2)

请确保在标题调用之前不发送任何内容。

// At the begginnig of script...
ob_start();

// ... do some stuff ...

ob_get_clean();

header( "Content-Type: application/vnd.ms-excel" );
header( "Content-disposition: attachment; filename=spreadsheet.xls" );
echo 'First Name' . "\t" . 'Last Name' . "\t" . 'Phone' . "\n";
echo 'John' . "\t" . 'Doe' . "\t" . '555-5555' . "\n";
die();

如果您需要处理整个脚本,则采用另一种方法:

<?php
// At the beggining...
ob_start();    
$content="";
$normalout=true;

// ... do some stuff ...

// i guess if some condition is true...
$content=ob_get_clean();
$normalout=false;
header( "Content-Type: application/vnd.ms-excel" );
header( "Content-disposition: attachment; filename=spreadsheet.xls" );
echo 'First Name' . "\t" . 'Last Name' . "\t" . 'Phone' . "\n";
echo 'John' . "\t" . 'Doe' . "\t" . '555-5555' . "\n";

// Here you could die() or continue...
ob_start();

// ... rest of execution ...

$content.=ob_get_clean();
if($normalout)
{
    echo($content);
} else {
      // Excel provided no output.
}
?>

这应该有用。

答案 1 :(得分:0)

该代码似乎在Chrome上没有任何问题(当然使用php标签)。

无论如何,这里有一个模板,用于导出正在发送的POST表。

<?php
        header("Content-Type: application/vnd.ms-excel");
        header("Expires: 0");
        $date = date('Y-m-d-Hi');
        header("content-disposition: attachment;filename=Excel_Report_$date.xls");
        $table = $_POST["table_info"];
?>

<html>
        <head>
                <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        </head>
        <body>
                <table>
                        <tr><th>&nbsp;</th></tr>
                        <tr><td>&nbsp;</td></tr>
                        <?=$table?>
                </table>
        </body>
</html>

如果您要导出一些需要更多细节的报告,我建议PHPExcel作为目前为止最好的库,通过PHP代码进行CSV / XML / XLS(X)管理。

答案 2 :(得分:0)

您发送的文件是制表符隔离值,而不是XLS(二进制格式)。

您可以做的是将文件作为CSV(Content-type =“text / csv”)发送,文件格式为csv:

header("Content-Type: text/csv");
header("content-disposition: attachment;filename=my_document.csv");
echo '"First Name";"Last Name";"Phone"' . "\n";
echo '"John";"Doe";"555-123456"' . "\n";