使用php 4.3.9将数据从数据库转储到excel文件

时间:2011-04-01 08:56:18

标签: php excel

我最近使用以下代码将数据库中的数据导出为ex​​cel文件。但输出显示为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文件。我在以前的项目中使用的代码完全一样,工作正常。不知道怎么解决这个问题?请帮助。

4 个答案:

答案 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)

您可以使用此类,它允许您从PHP创建Excel文件

PHP Class for Reading/Writing Excel Files

Another one

我推荐第一个。

答案 3 :(得分:0)

有一个用于在response to this question中读/写Excel文件的PHP库列表。我不确定它们中有多少可以与PHP4一起使用(当然大多数都需要PHP5),但你可能会在这里找到一些东西。