我有一个使用Javascript执行某些计算然后绘制数据的应用程序,但我想为用户添加选项,以便能够将数据实际下载到csv或xls文件中。
在Javascript(或其他一些方法)中是否有办法让用户按下按钮,然后它会提示他们输入要保存的文件名,然后它会创建逗号分隔或excel电子表格?
谢谢!
修改
感谢所有人的建议。希望我能把你们全部标记为答案,但是现在必须要做的事情
答案 0 :(得分:4)
打开窗口并将csv写入其中并不困难。但我不知道javascript有任何改变Content-Type:
标题的方法。如果没有它,它将不会提示保存或打开。
您需要服务器的帮助才能执行此操作。您可以使用表单变量将数据发送到服务器,并让服务器使用正确的标头Content-type: text/csv
向后发送它,您可能还希望Content-Disposition:
标头为您的文件命名。
答案 1 :(得分:1)
是的,但您也需要使用服务器端代码。使用JavaScript构建指向将csv数据作为附件流回的页面的链接。服务器输出应包含content-disposition
标头attachment; filename="fileName.csv"
。
答案 2 :(得分:1)
不,您无法直接从JavaScript创建和/或保存文件。在某些浏览器/平台(IE / Windows)上,您可以通过ActiveX对象创建和写入文件:
function WriteToFile()
{
var fso = new ActiveXObject("Scripting.FileSystemObject");
var s = fso.CreateTextFile("C:\\temp\\Test.txt", true);
s.WriteLine('Hello');
s.Close();
}
另一种解决方案是使用客户端JavaScript(在浏览器中)将CSV数据输出到单独的窗口(或弹出窗口),并让用户将其复制/粘贴到Excel中。
答案 3 :(得分:1)
如果你想在浏览器网站风格中这样做,那可能很难。但Javascript是一种很好的语言,但您需要使用.hta
而不是普通.html
。创建.hta
创建一个独立的应用程序,就像普通的.exe
一样。
以下是您要查找ActiveXObject("Excel.Application")
为了将html转换为hta,这里是标记
<HTA:APPLICATION
id="SomeId"
border="thin"
borderStyle="normal"
caption="yes"
maximizeButton="yes"
minimizeButton="yes"
showInTaskbar="yes"
windowState="yes"
innerBorder="yes"
navigable="yes"
scroll="auto"
scrollFlat="yes"
singleinstance="yes"
/>
的进一步阅读
答案 4 :(得分:1)
您当然可以使用FireBreath编写一个浏览器插件(IE上的ActiveX控件,其他人使用NPAPI)来执行此操作;你必须用C ++编写它。老实说,我同意其他人建议你做这个服务器端,但是你可以用插件来做它并不会太困难。
答案 5 :(得分:0)
我认为使用data URIs
可以做到这一点(达到一定的大小限制)