8

我正在使用一个简单的基于 Web 的 PHP 应用程序,它将表格输出为电子表格

header("Content-Disposition: attachment; filename=" . $filename . ".xls");
header("Content-Type: application/vnd.ms-excel");

//inserts tab delimited text

但我发现下载的电子表格作为只读文件打开,必须保存在本地,并且(在 Windows 上的 Excel 中)类型更改为 XLS(来自 HTML)。有没有办法正确设置文件类型的属性,以便进行简单的保存不需要更正文件类型?

下载的文件是出于安全性而只读还是不正常?

此外,我不喜欢在 Excel 或 OpenOffice(Linux 上)中打开电子表格时创建的自动边框。我宁愿没有边框格式。文件中有没有办法指定不添加格式,或者这是否内置在这些应用程序中?

4

3 回答 3

8

我不知道您说的是哪个版本的 Excel,所以我假设您使用的是 2007 或更新版本。

扩展更改问题可能取决于名为“扩展强化”的 Office 功能;据我所知,唯一的解决方案是生成一个真正的 Excel 文件(例如通过使用PHPExcel类集),而不是 HTML 文件。

出于安全原因,下载的文件是只读的,因为它们是在所谓的“受保护的视图”中打开的:

来自 Internet 和其他可能不安全的位置的文件可能包含病毒、蠕虫或其他类型的恶意软件,它们会损害您的计算机。为了帮助保护您的计算机,来自这些潜在不安全位置的文件会在受保护的视图中打开。通过使用受保护的视图,您可以读取文件并检查其内容,同时降低可能发生的风险。

最后,关于边框和格式:在旧的 Excel 2000 版本中,您可以通过在 HTML 代码的标题部分简单地添加一些 XML 标记来格式化输出;有关更多详细信息和示例,请参阅“ Microsoft Office HTML 和 XML 参考”,但请记住,它已经过时了,所以我认为这种技术仍然不适用于最新的 Excel 版本。

如果您想更好地控制生成的输出,则不应使用简单的 HTML 来创建电子表格文件。

这篇文章中,您还可以找到一些 PHPExcel 的替代方法来编写 Excel 文件。

于 2012-07-19T20:29:53.960 回答
6

AFAIK,至少在 Windows 上,这取决于用户在点击链接时对浏览器显示的提示做了什么。

如果用户选择保存文件,它将不是只读的。如果用户选择打开它,该文件将被保存到一个临时目录,并且浏览器可能会在它关闭时将其删除。我不确定这种机制是如何工作的,但我假设有一个锁涉及某个地方,使文件只读。

于 2009-06-19T18:13:44.450 回答
0

如果要在本地保存,可以设置属性content-description

header('Content-Description: File Transfer');   
header('Content-Type: application/vnd.ms-excel');
header("Content-Disposition: attachment; filename=" . $filename . ".xls");    

编辑

如果您打印制表符分隔的文本和属性content-disposition,如 xls 或 csv,Excel 应用程序(或其他程序,如 gnumeric 或 openoffice)会像 xls 或 csv 一样识别它。

于 2012-07-22T22:51:18.620 回答