我有一个网站,其中包含一个简单的函数,用于生成带有数组数据的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代码,而不是数据。
请问为什么会这样? 谢谢!
答案 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> </th></tr>
<tr><td> </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";