【发布时间】:2012-03-13 15:23:53
【问题描述】:
在使用 PHP 输出 Excel 文件时,它工作正常,但是,每个 Excel 文件顶部有 3 个空白行。标题是这样的:
<?php
header ("Expires: Mon, 28 Oct 2008 05:00:00 GMT");
header ("Last-Modified: " . gmdate("D,d M YH:i:s") . " GMT");
header ("Cache-Control: no-cache, must-revalidate");
header ("Pragma: no-cache");
header ("Content-type: application/vnd.ms-excel");
header ("Content-Disposition: attachment; filename=\"GridExport.xls" );
header ("Content-Description: Generated Report" );
echo $content_for_layout;
?>
在诸如记事本之类的文本编辑器中查看 3 个空白行时,我实际上看到一个空白行,然后是带有单个空格的行,然后是另一个空白行,因此基本上相当于:
\n.\n\n
其中句点 = 单个空格。
最后,当我在 Excel > 2003 中打开文件时,我收到关于文件格式不正确的错误消息,但单击“是”可以正常打开(减去 3 个空白行问题)。 是否可以发送正确的标头以免收到此消息?请参阅以下屏幕截图:
https://twiki.auscope.org/wiki/pub/Grid/WfsReaderWs/OpenFileWarning.png
【问题讨论】:
-
$content_for_layout 中有什么?它是实际的 Excel 文件的二进制数据,还是您试图假装为 Excel 文件的一些 CSV 数据?
-
它是制表符分隔的数据。另外,如果我将其设置为空,或注释掉该行,我仍然有 3 个空白行的问题。
-
检查这个 php 脚本,以及您包含的任何其他脚本,不包含开头的空格。您没有抱怨标头没有被兑现,因此很可能在您的 header() 调用之后发生了输出。
-
似乎空白行是由项目中的“其他”php文件在php标签之前/之后有换行符或空格引起的。使用 vim "set invlist" 进行验证。不过,另一篇文章是解决方案:stackoverflow.com/a/1943780/1022147