假设一个网页显示一个表格,但可以选择将其下载为Excel表格。该选项显示为提交表单的按钮(包含创建相同报表所需的参数,但对于Excel)。
<form action="makereport.blah">
<!-- Some parameters -->
<input type="button" value="Export to Excel" onClick="submit();"/>
</form>
最后一步仍然是将浏览器定向到创建的Excel工作表。
我看到三种可能性:
在表单的“操作”页面中,使用OnLoad事件:在JavaScript中重写创建的文件路径的URL并重新加载页面
在HTTP标头中:重定向到文件的URL(使用Redirect命令)
使用iframe
,其中src
是目标文件
那些似乎有些 hackish ,但我过去曾经使用过它们。 这通常是怎么做的?
(注意,我用来生成HTML(和Excel工作表)的语言是一个内部解决方案。所以如果PHP有一些东西,我只需要移植它。)
答案 0 :(得分:3)
可能性4(正确的一个):此表单指向的PHP脚本应该发送Content-type: application/vnd.ms-excel
header然后Excel文件的内容。如果它是磁盘上的实际文件,请使用readfile
,否则只需echo
Excel数据。如果要指定要下载的文件名,还可以发送Content-Disposition: attachment; filename='filename'
标题。
答案 1 :(得分:1)
处理表单发布的脚本/代码(服务器端)可以生成Excel电子表格。然后,您可以直接返回电子表格(使用正确的HTTP标头,如果文件是直接加载的),而不是使用HTML响应(或某种重定向)进行回复。
PHP中的一个例子:
<?php
// generate spreadsheet in file
$file = do_something_to_generate_spreadsheet();
// specifies it is an excel spreadsheet response
header('Content-Type: application/vnd.ms-excel');
header('Content-Description: File Transfer');
header('Content-Disposition: attachment; filename="' . $file . '"'); // filename
header('Content-Length: ' . filesize($file)); // length
readfile($file); // sends file to client
?>
答案 2 :(得分:0)
为什么要有第二页呢?将makereport.blah
文件本身设为xls
,而不是另一个HTML文档。
答案 3 :(得分:0)
您可以在新文件中使用DATAURI方案以base64模式插入文件。我今晚要制作一个剧本。
答案 4 :(得分:0)
使用webtoolkit.info中的base64代码并反汇编XML / XLS文件我试过制作一个脚本来强制下载空中文件。我创建一个Windows对象,当它打开时,然后插入用base64编写的XML / XLS代码。这个方法是dataURI的黑客。我没有在文件下载时输入名称。 我试过google chrome。 here文件的小说。
感谢您的关注。