【问题标题】:PHP Excel Blank Rows and HeadersPHP Excel 空白行和标题
【发布时间】: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

标签: php excel csv


【解决方案1】:

如果您输出带有 XLS 扩展名的 CVS,Excel 2007 及更高版本会警告您它不是一个 excel 文件,但无论如何都要打开它。早期版本不会给出警告。 将其正确输出为 CSV 文件不会导致该错误,也不会阻止其他 CVS 处理应用程序处理它。

至于这些行是什么——如果不知道 $content_for_layout 中的内容是不可能的

【讨论】:

  • 这些行不是由 $content_for_layout 引起的,因为如果我注释掉该行,或者将其设置为 '',我仍然会得到它们。
  • 顺便说一句,如果我不使用 xls 扩展名(改用 .csv),Excel 将不会使用 TAB 分隔符。如果我使用逗号,一些文本可能会包含它们,这会搞砸一切。
  • Excel 不会选择 csv 文件中的制表符(即逗号分隔值),如果您想使用制表符分隔它的扩展名只是文本(这显然没有帮助)。如果您不想自己处理逗号大小写,可以使用一些 php CSV 库
【解决方案2】:

不应该:

header ("Content-Disposition: attachment; filename=\"GridExport.xls" );

成为

header ("Content-Disposition: attachment; filename=\"GridExport.xls\"" );

我不知道这是否是答案,但无论如何我觉得它是错误的。

【讨论】:

  • 感谢您的错字。不幸的是,这并没有解决它。不过是为了努力。
猜你喜欢
  • 2017-05-21
  • 2011-05-06
  • 1970-01-01
  • 2010-10-02
  • 2018-10-26
  • 2015-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多