PHP Excel Header

17
header("Content-Type:   application/vnd.ms-excel; charset=utf-8");
header("Content-type:   application/x-msexcel; charset=utf-8");
header("Content-Disposition: attachment; filename=abc.xsl"); 
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false);
echo "Some Text"

以下是使用PHP编写和下载xsl文件的代码,

我的问题是,当我打开Excel文件时,MS-Excel会在打开文件之前显示警告:

您正在尝试打开的文件格式与文件扩展名指定的格式不同...Blah blah

有什么方法可以使用PHP代码消除这个警告?文件内容已经正确地编写了。

我知道这是因为文件中编写的内容是文本文件内容,文件扩展名不正确,即xls。解决方案是什么?

请不要建议使用任何库。


解决方案???嗯 - 使用正确的扩展名,.txt?我不确定你在这里问什么。 - Pekka
3
但是,“某些文本”根本不是Excel文件的有效内容...如果你欺骗地将文本文件假扮成xls文件,Excel会给出这个消息...如果你想避免这种情况,不要告诉我们“没有库”。使用一个库或自己编写整个程序...我编写的库已经花费了6年以上的时间。 - Mark Baker
3
仅仅发送 Excel 文件的 MIME 类型并不能神奇地将 HTML 或 CSV 输出转换为真正的 Excel 文件。 - mario
2
当然,如果您不想使用库,您可以通过取消注释php.ini文件中的php_automagic扩展来简单启用PHP的自动转换功能。这将告诉PHP自动将您的纯文本转换为真正的Excel文件以匹配标题。 - Mark Baker
5个回答

38

您提供了多个 Content-Type 头。 application/vnd.ms-excel 就足够了。

而且还有一些语法错误。echo 语句应该以 ; 结尾,文件扩展名也不对。

header("Content-Type:   application/vnd.ms-excel; charset=utf-8");
header("Content-Disposition: attachment; filename=abc.xls");  //File name extension was wrong
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false);
echo "Some Text"; //no ending ; here

2
更不用说在内容描述中的文件名扩展名了。 - Mark Baker
我已经将内容复制并粘贴到一个新的PHP文件中,并检查了我的下载的XLS文件,但仍然出现相同的错误信息。是否还需要进行其他操作来修复此问题? - Alok Jha
我收到了相同的错误信息, 您尝试打开的文件与文件扩展名指定的格式不同。 - Alok Jha
我刚刚在这里添加了我的代码: https://jsfiddle.net/alok111444/y97y31yt/我不知道如何在jsfiddle中打开php编辑器,所以我只是将代码简单地粘贴到了html编辑器中。 - Alok Jha
1
这个弹出窗口是正常的。这是Excel的警告,说明您实际上没有加载Excel文件。但是,当他们保存它时,它会变得正确。如果您想要创建一个实际的Excel文件进行下载,您需要一个服务器端库来实现这一点。 - Erick Robertson
显示剩余5条评论

9

试试这个

header("Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
header("Content-Disposition: attachment;filename=\"filename.xlsx\"");
header("Cache-Control: max-age=0");

2
问题在于您输入了错误的Excel文件扩展名。您使用的是.xsl而不是xls。
我知道我来晚了,但这可以帮助未来阅读此帖子的读者。

0

关于CI:在我的情况下,我试图导出xlsx文件,但MIME类型为application/vnd.ms-excel,这个类型没有被添加到xlsx数组中,所以我手动添加了它。

application\config\mimes.php

现在它运行良好:

'xlsx'  =>  array('text/x-comma-separated-values', 'text/comma-separated-values', 'application/octet-stream', 'application/vnd.ms-excel', 'application/x-csv', 'text/x-csv', 'text/csv', 'application/csv', 'application/excel', 'application/vnd.msexcel'),

用以上的数组替换了xlsx数组,已经为我修复好了!


0

尝试在您的PHP脚本末尾添加exit;


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接