我正在使用一个简单的基于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上)打开电子表格时创建的自动边框。我宁愿没有边框格式。文件中是否有一种方法可以指定没有添加的格式,或者这是否内置在这些应用程序中?
答案 0 :(得分:8)
我不知道您正在谈论哪个版本的Excel,所以我认为您使用的是2007或更新版本。
扩展更改问题可能取决于名为“Extension Hardening”的Office功能;据我所知,唯一的解决方案是生成一个真实的Excel文件(例如使用PHPExcel类),而不是HTML文件。
出于安全原因,下载的文件是只读的,因为它们是在所谓的“Protected View”中打开的:
来自互联网和其他可能不安全的位置的文件 可能包含病毒,蠕虫或其他可能造成伤害的恶意软件 你的电脑。为了帮助保护您的计算机,请使用这些文件 在受保护的视图中打开可能不安全的位置。通过使用 受保护的视图,您可以读取文件并检查其内容 降低可能发生的风险。
最后,关于边框和格式的说法:使用旧的Excel 2000版本,您可以通过在HTML代码的标题部分添加一些XML标记来格式化输出;有关更多详细信息和示例,请参阅“Microsoft Office HTML and XML Reference”,但请记住它已经过时了,所以我认为这种技术仍然不适用于最新的Excel版本。
如果您想要更多地控制生成的输出,则不应使用简单的HTML来创建电子表格文件。
在this post上,您还可以找到PHPExcel的一些替代方法来编写Excel文件。
答案 1 :(得分:6)
AFAIK,至少在Windows上,它取决于用户在浏览浏览器时显示的提示对用户做了什么。
如果用户选择保存文件,则不会是只读文件。如果用户选择将其打开,则该文件将保存到临时目录中,浏览器可能会在关闭时将其删除。我不确定这种机制是如何工作的,但我假设有一个锁只涉及一些使文件只读的地方。
答案 2 :(得分: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。