我最近使用以下代码将数据库中的数据导出为excel文件。但输出显示为html页面,其中包含来自数据库的正确数据。
<?php
/* database connection here */
$file_type = "vnd.ms-excel";
$file_ending = "xls";
header("Content-Type: application/$file_type");
header("Content-Disposition: attachment; filename=$table.$file_ending");
header("Pragma: no-cache");
header("Expires: 0");
/* extract from database */
它从数据库中提取所有数据,因此我假设数据库功能正确,但它只是不保存为excel文件。我在以前的项目中使用的代码完全一样,工作正常。不知道怎么解决这个问题?请帮助。
答案 0 :(得分:1)
我的建议是检查生成的 HTTP标头并确保它们是正确的。您可以使用Firebug的“网络”面板或您选择的工具。
在任何情况下,您的描述的这一部分都表明您没有生成Excel文件:
输出显示为html页面 使用来自数据库的正确数据
Excel文件是二进制文件。如果在浏览器中显示,它们看起来就像垃圾一样。我怀疑你是在告诉浏览器“这里你是一个Excel电子表格”,然后发送HTML。
BTW,Expires
标题看起来不正确。它应该包含一个带有日期而不是整数的字符串:
http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.21
正如规范所述,浏览器必须将0
作为in the past
处理,但无论如何它都不是正确的值。
答案 1 :(得分:1)
最后才发现这是我遇到的同样问题。刚刚在我的编辑器中将 UTF-8 设置为 UTF-8而没有BOM 就解决了这个问题....代码似乎是正确的但这里是我现在使用的更好的标题内容。谢谢你们的帮助。 ;)
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
header("Content-Disposition: attachment;filename=".$filename.".xls");
header("Content-Transfer-Encoding: binary ");
答案 2 :(得分:0)
答案 3 :(得分:0)
有一个用于在response to this question中读/写Excel文件的PHP库列表。我不确定它们中有多少可以与PHP4一起使用(当然大多数都需要PHP5),但你可能会在这里找到一些东西。