我正在使用一个简单的基于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上)打开电子表格时创建的自动边框。我宁愿没有边框格式。文件中是否有一种方法可以指定没有添加的格式,或者这是否内置在这些应用程序中?

有帮助吗?

解决方案

我不知道您正在谈论哪个版本的Excel,因此我认为您使用的是2007或更新版本。


扩展更改问题可能取决于名为“ Extension Hardening &quot ;;据我所知,唯一的解决方案是生成一个真正的Excel文件(例如使用 PHPExcel 一组类),而不是HTML文件。

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

  

来自互联网和其他可能不安全的位置的文件   可能包含病毒,蠕虫或其他可能造成伤害的恶意软件   你的电脑。为了帮助保护您的计算机,请使用这些文件   在受保护的视图中打开可能不安全的位置。通过使用   受保护的视图,您可以读取文件并检查其内容   降低可能发生的风险。

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

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

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

其他提示

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

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

如果要在本地保存,可以设置属性 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。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top